Hatena::Groupnadesiko

雪乃☆雫のなでしこ日和

2019-08-22

大体遊べる感じに☆

| 16:08

 さてさて・・・


 昨日のはクリックした駒を消すだけだったケド、再帰関数でもって同じ色の駒を辿って全て消します。

 ぷろでるさんのコードが全然分からないけど、まあこうゆうこってしょう。

 「」は消された場所で、「消色」は、消したい色です。

 コラムスと違って、連鎖しないし4方向しか無いからカンタンです♪

 あ~、コラムス!

 色々、ロジックを考え直すところや、機能を追加することや、考えていたけど、取りあえず遊べる感じになったことで安心して放置したな~;;;

#②同じ色のバブルを消す
●(Noの)同色探索
 X=No%駒数x。Y=(No/駒数x)を切捨。
 もし、(探索済一覧[No]=1)または、(駒色[No]=)ならば、
   戻る。
 違えば、
   探索済一覧[No]=1。
   # 上下左右に同じ色の駒があるかどうかチェックする
   もし、(X-1≧0)かつ(駒色[No-1]=消色)かつ(探索済一覧[No-1]≠1)ならば、        #左
     個数=個数+1。(No-1)の同色探索。
   ここまで。
   もし、(X+1<駒数x)かつ(駒色[No+1]=消色)かつ(探索済一覧[No+1]≠1)ならば、      #右
     個数=個数+1。(No+1)の同色探索。
   ここまで。
   もし、(Y-1≧0)かつ(駒色[No-駒数x]=消色)かつ(探索済一覧[No-駒数x]≠1)ならば、    #上
     個数=個数+1。(No-駒数x)の同色探索。
   ここまで。
   もし、(Y+1<駒数y)かつ(駒色[No+駒数x]=消色)かつ(探索済一覧[No+駒数x]≠1)ならば、  #下
     個数=個数+1。(No+駒数x)の同色探索。
   ここまで。
   もし、個数=1でなければ、駒色[No]=。
   戻る。
 ここまで。
ここまで。

http://snowdrops.starfree.jp/wnako3_test/19_samegame2.html



 でっ、消した部分を詰めます。

 駒色を下から(駒色配列を逆順に)いっこいっこ調べていって、(消した駒)を発見したら、度は上方向へを数えつつ探索し、じゃ無い駒を発見したら、の上を全部の数だけ下にずらす、としてみたんだけども、どうだろう;

 上部にが増えてくるにつれ、無意味にも全て下にずらしてることになっちゃうけど、ま、いっか(^▽^;

 しかも、上部の部分でも、いちいち上方向への調査が発生してしまうのか・・・

 ・・・消した駒のデータを別に持って、それを参照した方が無駄が無くて済むのか・・・まっ、いっか(えっΣ(゜д゜;)

 案外、消した駒を発見するや否や、問答無用で上部を一個下にずらす、としたほうが、プログラムはずっと短くて済んでいいような気もしてきた。

#③消した部分に残っているバブルを詰める
●駒詰
 # 消えた分だけ下に詰める
 Noを駒数-1から0まで繰り返す。
  Y=(No/駒数x)を切捨。
  もし、(駒色[No]=)かつ(Y>0)ならば、
   # 消す駒を数える。
   消去数=0。
   Cを0からYまで繰り返す。
    もし、駒色[No-C*駒数x]=ならば、
      消去数=消去数+1。
    違えば、
      # 上部の駒を消去数個分下にずらす。
      移動元=No-C*駒数x。移動先=No。
      (Y-消去数+1)   #上部に残ってる駒の数。
        駒色[移動先]=駒色[移動元]。
        駒色[移動元]=。
        移動元=移動元-駒数x。移動先=移動先-駒数x。
      ここまで。
      抜ける。
    ここまで。
   ここまで。
  ここまで。
 ここまで。

 #全部消えた列を左に詰める
 Noを(駒数-1-駒数x)から(駒数-1)まで繰り返す。  #一番下がなら全部消えてる
  X=No%駒数x。
  もし、(駒色[No]=)かつ(X<駒数x-1)ならば、
   # 消す列を数える。
   消去数=0。
   Cを0から(駒数x-1-X)まで繰り返す。
    もし、駒色[No+C]=ならば、
      消去数=消去数+1。
    違えば、
      #右の列を消去数分左にずらす。
      移動元=No+消去数。移動先=No。
      (駒数x-X-消去数)    #右側に残ってる列数。
        (駒数y)        #一列全てをずらす。
         駒色[移動先-駒数x*(回数-1)]=駒色[移動元-駒数x*(回数-1)]。
         駒色[移動元-駒数x*(回数-1)]=。
        ここまで。
        移動元=移動元+1。移動先=移動先+1。
      ここまで。
      抜ける。
    ここまで。
   ここまで。
  ここまで。
 ここまで。
ここまで。

http://snowdrops.starfree.jp/wnako3_test/19_samegame3.html



 全駒を調査して、上下左右に同じ色の駒がいっこも無かったら、もう消せる駒が無くゲームオーバー

 沢山消すと高得点になるのは良いけど、目に付く沢山消せるところを早まって消しちゃった場合より、丁寧に消してって全部消すことが出来た場合の方がスコアが低いとかは納得いかないので、全消しボーナスを付けたいと思う。

 コレは終了判定で一緒に出来る気がするけど、それぞれ「はい」「いいえ」で戻り値を得られた方が楽っぽいので別の関数にしちゃった;

#④消せるバブルが残っているかチェックする
●終了判定
 Noを0から駒数-1まで繰り返す。
  もし、駒色[No]=でなければ、
   # 上下左右に同じ色の駒があるかどうかチェックする
   もし、(駒色[No]=駒色[No-1])または(駒色[No]=駒色[No+1])または(駒色[No]=駒色[No-駒数x])または(駒色[No]=駒色[No+駒数x])ならば、
     いいえ戻る。
   ここまで。
  ここまで。
 ここまで。
 はい戻るここまで。

●全消判定
 Noを0から駒数-1まで繰り返す。
  もし、駒色[No]=でなければ、
    いいえ戻る。
  ここまで。
 ここまで。
 はい戻るここまで。

http://snowdrops.starfree.jp/wnako3_test/19_samegame4.html

 これで、とりあえず遊べる感じになったと思います☆

 駒消してないじゃん白丸じゃん、とか言わないで~。線色も変えれば良いだけなんだけど、駒は●じゃ無い物に変えるつもりなので、駒描画と駒消去はまるっと書き換える予定だから、てきとーこいてんです;

 後は、スコアもちゃんと表示する欄を作ったり、ハイスコアをローカルストレージに記録したりして、完成、かな?

ゲスト



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