学習を目的としてKotlinでテトリスのようなものを作る ④


前回まででブロックの積み上げまで実装できました。


今回でやっと完成です。
配置されているブロックの更新をとゲームの終了処理を実装します。


ブロックの更新


ブロックがフィールドに追加されたときに、一行すべてにブロックが配置されているかを判定します。
その場合、その行よりも上のブロックをすべて一行下にずらします。
Fieldクラスに以下のメソッドを追加します。
正直これに関してはどういう方法が正しいかはわかりませんが素直に実装した結果こうなりました。


これを実行するとこうなりました。

終了処理


終了処理といっても単にゲームをリスタートするだけです。
そのためにFieldクラスのaddBlockメソッドを修正します
ブロックする際にy座標を表すインデックスがフィールド外(0未満)だった場合終了と判断します。
そのあとフィールドの状態を初期化します。


そして初期化するメソッドです。


そしてGraphicクラスのupdateBlockPosメソッドを以下のように修正します。


FieldクラスのaddBlockからの戻り値がfalseの場合(終了の場合)、フィールドを初期化します。
実行したらこうなりました。
ブロックが詰めなくなると確かにリセットされてますね。

ソースコード


改善するべきところを挙げたらきりがないと思いますが、ひとまずこれで完成とします。
ブロックの回転とか絶対必要だと思ったのですが、もう余力がありません。
もともとKotlinの学習のために始めたことなので今はこれで十分かと思います。