Hatena::Groupnadesiko

雪乃☆雫のなでしこ日和

2016-06-10

石を消す・・・とゆうこと

| 00:13

 同じ色の石が3つ、縦横斜めに並んでいたら消す。

 単純極まりないことなんだけど・・・どーいうこっちゃ(@_@)

 とりあえず、消せるか消せないかを判定する部分は置いといて(えっ;)消すことになった石は、消去石という配列に覚えさせるということにする。

 初期化も忘れず!(爆)

#-----------------------------------------------------------------------
*消去石初期化
  石消去フラグ=オフ。
  xxとは整数。yyとは整数。
  6
    xx=(回数-1)
    13
      yy=(回数-1)
      消去石¥xx,yy=-1
#-----------------------------------------------------------------------

 画面から石を消すこと自体は簡単なんですよ。

 固定石配列を書き換えて、の場所の石を-1にするだけだからね。

 消去石配列で、消すフラグの立った同じ場所の固定石を-1にして、固定石を再描画してやれば消えます。

#-----------------------------------------------------------------------
*石消去
  xxとは整数。yyとは整数。
  6
    xx=(回数-1)
    13
      yy=(回数-1)
      もし、消去石¥xx,yy=1ならば、
        固定石¥xx,yy=-1。
        消去数=消去数+1
        母艦のタイトルは「なでこら  {消去数}」
  固定石描画。0.3秒待つ。
#-----------------------------------------------------------------------

 しかし、隙を埋めなくちゃあなりません。

 そうないと、消えた石の上に石があった場合、石が宙に浮いてる的なことになっちゃうからね。

 なんか、もっと上手い手があるような気もするけど、とりあえず、まず消去石を参照して消した石があったら、の上にある固定石のデータを全部順番に一個ずつ下にずらす。

 y軸で複数個の石が消えてた場合、何度もデータを書き換えることになってて無駄っぽいけど、まあいいや~;

#-----------------------------------------------------------------------
*隙埋め
  xxとは整数。yyとは整数。Cとは整数。
  6
    xx=(回数-1)
    13
      yy=(回数-1)
      もし、消去石¥xx,yy=1ならば、
        Cでyyから0まで繰り返す
          もし、C=0ならば、
            固定石¥xx,C=-1
          違えば、
            固定石¥xx,C=固定石¥xx,(C-1)
  固定石描画。0.3秒待つ。
#-----------------------------------------------------------------------

 して、問題の、消せるか消せないかの判定なんだけど・・・

 石を固定した後、の石の上下左右と斜めにおんなじ石があるかどうかを順番に調べていく。→同じ石だったら消去石にマークする。→違う石か壁or床だったら調べるのをやめる。→マークした石が3個以上だったら消す!*3

 ・・・で行けるかと思ったらダメだった。

 まず、早まって消してしまう(固定石に反映)と、別方向を調べる時、こに石がないことになってしまい、もし別方向にも同じ石が3個以上並んでいても消せなくなってしまう。

 では、のまま調査を続行したとすると、マークした石が増えてしまうので、もしの向きには同じ色の石が2個しか並んでいなくても、消す判定になってしまう。

 ではでは、向きによってマークする数値を変えてみたらどうかしらと思ったらそれもダメで、先に調べて消せることになった石が、別方向で2個しか並んでいなくて、消さない判定に変わってしまったりする。

 むむむ・・・

トラックバック - http://nadesiko.g.hatena.ne.jp/snowdrops89/20160610