1.はじめに
今回はぷよぷよの作り方を説明します。ぷよぷよは、落ちゲーに「連鎖」という概念をうまく持ち込んだゲームです。それまでにも、連鎖の要素を入れていた落ちゲーはあったのですが、運に頼ることが多かった気がします。ぷよぷよは直感的に連鎖を組みやすく、かつ偶然による連鎖が起こりやすい、という点が、ウケたような気がします。
そのほかにも、対戦を重視したシステムや勝ち抜きモード、ぷよが消えたときのアニメーションの細かさなど、現在ある落ちゲーの基本となっています。
しかし、ぷよぷよの元はテトリスなので、作り方はテトリスとほとんど同じです。データ構造などは省略して、テトリスのところで説明できなかった「状態の遷移」と、ぷよの消去ロジックについて説明したいと思います。
2.状態の遷移
ぷよぷよのゲーム中における状態の遷移は以下のようになります。(ほとんどの落ちゲーが似たような流れとなると思います)
簡単に状態の説明をします。
①次のぷよを出す
Nextに表示されているぷよを、操作可能なぷよとします。
②キー入力待ち/自由落下
プレイヤーからのキー入力を受け取り、ぷよを回転/移動します。また、一定時間を経過するとぷよが自由落下します。プレイヤーが動かすぷよの下に、何かがあった場合、確定落下状態になります。
③確定落下
ぷよが落下している状態です。
④結合チェック
落下するぷよがなくなった場合に、4つ以上ぷよがくっついているかをチェックします。(3.結合チェックを参照)
⑤消去
4つ以上ぷよがくっついていた場合に消去を行います。
個人的な印象ですが、出来の悪い落ちゲーは、②から③への遷移、つまり下にくっつく時間が極端に短いです。(ほとんどない、といってもいいと思います)
テトリスやぷよぷよでは、下にブロックやぷよがあっても、回転や移動する時間が少しあります。チェック処理が少し面倒ですが、くっつくまでに少し時間を与えたほうが、プレイヤーはストレスなくプレイできる気がします。
他にも、③で重力加速度を考えて落下させたり、⑤の部分で細かくアニメーションを入れると、見栄えが良くなると思います。
3.結合チェック
さて、メインの結合チェック処理です。テトリスと違って、横一列に並んでいれば消えるわけではないので、ちょっと面倒です。
方法としては、画面内のすべてのぷよに対して「結合チェック」をするという方法をとります。
具体的には、
- 上下左右の全ての方向に同色のぷよがいくつあるかを、再帰的に調べる
- 結合ぷよが4つ以上あれば、そのぷよに消去フラグを立てる
というチェックを画面内の全てのぷよに対して行います。方法としては、戦術シミュレーションでやった、移動範囲の求め方
とほとんど変わらないと思います。
具体的には次のようになります。例えば、以下のようにぷよが並んでいるとします。
例えば、3行目のB列をチェックします。まず、検索色は「赤」となり、結合数は「1」となります。さらに座標(3,B)にチェック済みフラグを立てておきます。
次に上下左右の検索です。上と左は「黄」なのでそれ以上は検索しません。右には「赤」があるので、本チェック処理を再帰呼び出しします。
再帰呼び出しをすると、結合数は「2」となり、座標(3,C)にチェック済みフラグが立ちます。上下左右を検索しますが、上は「黄」右は「壁」下は「緑」なのでそれ以上検索を行いません。また、左は「赤」ですが、チェック済みフラグが立っていますので、検索を行いません。
このように、再帰的に検索を行い、結合数が「4」以上になったら検索を打ち切り、消去フラグを立てます。
さて、ここでは、再帰処理で結合チェックを行いましたが、「結合パターンをテーブルで持つ」という方法もあります。
4つのぷよが結合するパターンは限られていますので、あらかじめ、結合パターンを保持しておき、それが、マッチすれば消去フラグを立てる、という方法です。
以上、一人プレー用のぷよぷよの作り方でした。