Unreal Engine 4 で作るテトリス Part.07

16/07/2017

Programing UnrealEngine4

本記事は UnrealEngine 4.16.2 を使用

前回の続きからです。

いよいよテトリス制作も終盤、今回は埋まっているラインを判定しライン消去する処理を作っていきます。

1.行がブロックで埋まっているか判定する処理の作成

ブロックの有無は BoardLayout で管理しているので、一行ずつ埋まっているかチェックをしていけば良いです。

Tetris ブループリントを開き、DeleteLine という名前の関数を作成。

繰り返し処理の計算に変数が必要なので、Local Variables に以下の変数を追加します。

変数名初期値
IyInteger0
IzInteger0
JyInteger0
JzInteger0
DeleteFlagBooleanfalse

処理は以下のように組みます。

実はこれでは無限ループになってしまっているのですが、後々ここに Iz の加算処理を追加するので、それがある前提で見てください。

壁の内側のマスの数だけループし、行毎に空間があるか判定しています。

行のループが終わる度(Iy のループが Completed になる度)に DeleteFlag が True かをチェックすれば、その行を消してよいかが判断できます。

行消去の処理を Iy ループの Completed から以下のように繋げ組みます。

当該行が消去対象であればその行の値は必要ないため、一行上の値を上書きしています。
そのシフトを最上行の手前まで行っています(最上行の上は存在しないため)。最上行にはゼロを入れます。

行のシフトが行われるので、ライン消去を行った場合は Iz の加算は行いません。
そのため、DeleteFlag が False のときしか加算しないように組んでいます。

2.BoardLayout の最新状態を表示させる処理の作成

DeleteLine を実行に組み込む(ShiftQueue が配置されている箇所等)と動作はしますが、BoardLayout の値しか変更されていないため画面の表示は変化しません。
BoardLayout の状態を画面に反映させる処理を作る必要があります。

Tetris に RefreshViewOnBoard という名前の関数を作成します。

処理は以下のように組みます。

単純に Tetris で管理している Block02 ~ 08 のインスタンスメッシュをすべて削除し、BoardLayout に従って新しくメッシュを追加する処理となっています。

では今回作った関数を実行処理に組み込みましょう。

InsertControlledBlockToBoard の末尾、ShiftQueue を実行する箇所に DeleteLine と RefreshViewOnBoard を差し込みます。

テストプレイをしてみると、しっかりライン消去が行われているのが確認できます。


-目次-

Major Contents

ブログ アーカイブ

Contact us

名前

メール *

メッセージ *

QooQ