見出し画像

JavaScriptで落ち物パズルを作る(2)

 以前に書いた記事、「JavaScriptで落ち物パズルを作る」の続きです。前に書いたように、今回製作する落ち物パズルの仕様は・・・

・フィールドサイズは横6×縦12(ここにブロックを積んでいく)
・ブロックは0から9までの数字が2つくっついた状態で落ちる
・数字の組み合わせによりブロックが消える

 消える条件は、少し仕様を変更して、

1.同じ数字の2個以上の並んだ組み合わせを2つ以上作る
2.同じ数字の並びを4個以上作る
3.数字を順番に4個以上並べる(最大値の次は最小値へと行く)

です。前回は、条件2の実装まで済んでいたので、今回するのは条件1と3の実装ですね。まあ、べたな方法で3パターンの消え方を別々に書くことで実装はできましたが、たぶん、もっとうまく書く方法があるとは思います。

 ブロックを消すところはゲームのメイン部分なので、一番時間がかかりましたね。縦横斜めの列の判定は、配列にベクトルを用意しておいて掛けることで、4回の繰り返し処理でいけるみたいだったので、それを採用。

 実際に消すところは、置かれているブロックの管理用以外に、もう一つ同じサイズの2次元配列を用意して、消すところにフラグを立ててまとめて消す処理を採用。この処理は基礎的な手法としてどこかで紹介されていたのを大昔に見た気がしますが、はっきりとは覚えていません。

 とりあえず、そのあたりを踏まえて消去処理を書き検証をするの繰り返しでしたが、時々、自分が気にしていないところが消えることがあって、条件が成立していたのか確認できない時がありました。なので、まだ、どこかにバグがあるかもしれませんね。

 あと、ちょっと気になっていた、ブロックが消えて他ブロックが落ちる時に、次の新規ブロックが落下終了を待たずに落ちてくるところは、状態管理用フラグを入れれば何とかなりました。ついでに、数字の色が一色だと見えにくいので、カラフルにはしてみました。得点は単純に消えた数をカウントしているだけなので、連鎖しても高得点にはなりませんが、まあ、今回は良しとしますかね。

 これで、完成にはなりましたが、自分で時々プレイしてみて、動作が安定しているようなら、対戦モードとかつけてみたいなあと、ちょっと思ってしまいますね。対戦モードをつけるなら、JavaScriptではなくHSPあたりで書き直して、音楽を付けたりもしてみたいなあとは思います。

 なお、今回製作したものは、以下のアドレスから見ることができます。

 とりあえず、いろいろ参考にしてではありますが、完成させることができたので良かったです。

この記事が気に入ったらサポートをしてみませんか?