ぷよぷよの作り方

投稿者: | 2012年5月22日

1.はじめに

今回はぷよぷよの作り方を説明します。ぷよぷよは、落ちゲーに「連鎖」という概念をうまく持ち込んだゲームです。それまでにも、連鎖の要素を入れていた落ちゲーはあったのですが、運に頼ることが多かった気がします。ぷよぷよは直感的に連鎖を組みやすく、かつ偶然による連鎖が起こりやすい、という点が、ウケたような気がします。

そのほかにも、対戦を重視したシステムや勝ち抜きモード、ぷよが消えたときのアニメーションの細かさなど、現在ある落ちゲーの基本となっています。

しかし、ぷよぷよの元はテトリスなので、作り方はテトリスとほとんど同じです。データ構造などは省略して、テトリスのところで説明できなかった「状態の遷移」と、ぷよの消去ロジックについて説明したいと思います。

2.状態の遷移

ぷよぷよのゲーム中における状態の遷移は以下のようになります。(ほとんどの落ちゲーが似たような流れとなると思います)

簡単に状態の説明をします。

①次のぷよを出す

Nextに表示されているぷよを、操作可能なぷよとします。

②キー入力待ち/自由落下

プレイヤーからのキー入力を受け取り、ぷよを回転/移動します。また、一定時間を経過するとぷよが自由落下します。プレイヤーが動かすぷよの下に、何かがあった場合、確定落下状態になります。

③確定落下

ぷよが落下している状態です。

④結合チェック

落下するぷよがなくなった場合に、4つ以上ぷよがくっついているかをチェックします。(3.結合チェックを参照)

⑤消去

4つ以上ぷよがくっついていた場合に消去を行います。

個人的な印象ですが、出来の悪い落ちゲーは、②から③への遷移、つまり下にくっつく時間が極端に短いです。(ほとんどない、といってもいいと思います)

テトリスやぷよぷよでは、下にブロックやぷよがあっても、回転や移動する時間が少しあります。チェック処理が少し面倒ですが、くっつくまでに少し時間を与えたほうが、プレイヤーはストレスなくプレイできる気がします。

他にも、③で重力加速度を考えて落下させたり、⑤の部分で細かくアニメーションを入れると、見栄えが良くなると思います。

3.結合チェック

さて、メインの結合チェック処理です。テトリスと違って、横一列に並んでいれば消えるわけではないので、ちょっと面倒です。

方法としては、画面内のすべてのぷよに対して「結合チェック」をするという方法をとります。

具体的には、

  1. 上下左右の全ての方向に同色のぷよがいくつあるかを、再帰的に調べる
  2. 結合ぷよが4つ以上あれば、そのぷよに消去フラグを立てる

というチェックを画面内の全てのぷよに対して行います。方法としては、戦術シミュレーションでやった、移動範囲の求め方

とほとんど変わらないと思います。

具体的には次のようになります。例えば、以下のようにぷよが並んでいるとします。

例えば、3行目のB列をチェックします。まず、検索色は「赤」となり、結合数は「1」となります。さらに座標(3,B)にチェック済みフラグを立てておきます。

次に上下左右の検索です。上と左は「黄」なのでそれ以上は検索しません。右には「赤」があるので、本チェック処理を再帰呼び出しします。

再帰呼び出しをすると、結合数は「2」となり、座標(3,C)にチェック済みフラグが立ちます。上下左右を検索しますが、上は「黄」右は「壁」下は「緑」なのでそれ以上検索を行いません。また、左は「赤」ですが、チェック済みフラグが立っていますので、検索を行いません。

このように、再帰的に検索を行い、結合数が「4」以上になったら検索を打ち切り、消去フラグを立てます。

さて、ここでは、再帰処理で結合チェックを行いましたが、「結合パターンをテーブルで持つ」という方法もあります。

4つのぷよが結合するパターンは限られていますので、あらかじめ、結合パターンを保持しておき、それが、マッチすれば消去フラグを立てる、という方法です。

以上、一人プレー用のぷよぷよの作り方でした。