見出し画像

■ぷよぷよを作る(2) ぷよ落下、消滅、連鎖

1.ぷよの落下

 ぷよの落下は、以下の3パターンが考えられます。

①レバー操作をしない場合、一定間隔で落下
②下方向にレバーを入れた場合、素早く落下
③「ちぎり」が発生した場合、自由落下

 ①は一定のフレームが経過したらぷよのY座標を増やすことで実現できます。1回の落下で半マス分くらい進める感じでしょうか。実際のゲームだと、難易度によって落下する間隔が短くなりますね。

 ②は早くぷよを落とす場合の操作です。如何に素早くぷよを捌くかが勝負のポイントですね。
 1点注意するのは、②の操作をしている間は①の落下処理は行わない事です。②の操作に①の落下処理が加わってしまうと、意図しない挙動になる可能性があります。
 実際のゲームでは、②の操作を行っている間は得点が入るみたいですね。

 ③は操作するぷよを横向きに置いたとき、左右どちらか片方が下に落ちる場合です。これはぷよぷよ用語で「ちぎり」って言うらしいです。
φ(..)メモメモ

ちぎりによる自由落下の考察

 上の画像は何やら自由落下が起きず、変な位置(X:3, Y:9)に赤ぷよが残ってしまうバグのようです。これは恐らく座標を

①データ処理用の座標
②画面表示用の座標

に分けていることが関係していますね。
 ①はフィールドにおけるマス単位の座標(X:0~5、Y:0~12)で、操作ぷよを置き終わった(=固定された)状態のぷよなどを扱います。
 ②はぷよを画面表示する際の座標であるため、ドット単位の座標となります。上の図の吹き出しにある「視覚的には期待通りに自由落下しているが、~」というのは、②の座標は正しい(画面の見かけ上は正しい)が、自由落下に伴い①の座標が更新されていないので、次のぷよ設置の際に不具合が起きた、ということのようです。

 また、自由落下はちぎりの他にぷよが消滅した後スペースができることによる落下も考えられます。

ぷよ消滅による自由落下

 上記の落下が完成すれば、落下処理は概ねOKではないでしょうか。お邪魔ぷよの落下もこの仕組みで動きます。

2.ぷよ消滅

 落下が出来たら次はぷよの消滅ですね。ぷよぷよは基本的にぷよが4つ以上繋がると消えます。

ぷよの消滅

 上の画像は消滅処理を作る前のものです。縦横に4つ以上繋がっている箇所が、赤ぷよが2箇所、緑ぷよが2箇所あります。
 操作ぷよを置き終わった後、これらのぷよが消滅すればOKです。

 操作ぷよを置いた後、フィールド上の同色のぷよが繋がっているかをチェックします。ぷよぷよのルールでは繋がる方向は上下左右のみで、斜め方向は繋がりません。
 繋がっているかチェックするには、隣接するぷよを再帰的にチェックする方法が考えられます。(セガ公式が公開してるぷよぷよプログラミングではどうやってチェックしてるんだろう…)

再帰法による連結のチェック

 この辺りで連鎖についても視野に入ってきます。下の図はちぎりにより赤ぷよが落ちて連鎖するまでの流れをバトルフェーズ(Battle Phase)一覧にまとめたものです。

ゲームの進行状況(フェーズ)

 自分はゲームを作る際によくフェーズ(シーン?)に分けて流れを考えています。例えば上の画像で言うとフェーズ「FALL」や「EFFECT」の最中にぷよが操作できてしまうと、本家のゲームと挙動が異なってしまいます(それはそれで面白そうですが…笑)

3.連結表現

 同じ色のぷよが隣接すると、ぷよ同士がくっつきます。ぷよの色ごとに表情が違い、実にユニークです。
 これまでは赤と緑しか色が無かったので黄色、青、紫を追加し、くっついてる感を再現してみました。「2.ぷよ消滅」でのチェック処理の結果、繋がっていればくっついてる画像にする感じですね。

同じ色のぷよ同士がくっつく

 以下はぷよが着地する → ぷるぷる震える → 連結 の流れです。

着地アニメーション、連結

4.連鎖、エフェクト

 ぷよぷよの醍醐味である「連鎖」。ぷよの落下、消滅が出来ていれば、連鎖はもうほとんど出来ていることになります。
 あとは連鎖にエフェクトを付ければかなり雰囲気が再現できます。

ぷよ消滅エフェクト
連鎖数の表示

 消滅エフェクトは「ぷよぷよフィーバー」のように、複数のぷよが同時に消える感じです。ぷよぷよ通では若干時間差でぷよ達が消えていく表現で、自分は後者の方が好きです。今後の改善点の1つです。

ぷよが同時に消滅 (今回作ったもの)
ぷよが時間差で消滅 (本物のぷよぷよ)

 ここまで出来たら、次は「ネクストぷよ」の作成です。

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