Step 12 of 12 · Final
ゲームオーバー & リスタート
新しいミノが出てくる場所にもう空きが無ければ、そこでゲーム終了。 R で盤面とスコアをリセットして最初からやり直せます。 これで全 12 ステップ、あなたのテトリスが完成です。
About this step
ゲーム終了の判定
新しいミノを出した瞬間、spawn 位置でもう動けない(他のブロックと重なる)なら、
もう置く場所が無いということ。canMove(currentCells, pieceCol, pieceRow) が
false なら gameOver = true、それだけ。
衝突判定のために Step 5 で書いた canMove が、
ゲームオーバー判定にもそのまま使えるのがポイント。
基本関数は使い回される、というのがプログラミングの面白いところ。
update と onKey をガード
if (gameOver) return; を
update と onKey の先頭に入れて、
終了後は何も動かないように。ただし R キー(リスタート)だけは
ゲームオーバー中でも反応させる必要があるので、ガードの前にチェック。
restart() は 1 メソッドにまとめる
盤面・スコア・レベル・アキュムレータ・gameOver フラグをリセット。 状態をリセットする場所は 1つに集める、というのが重要。 初期化コードが散らばるとバグの温床になります。
最後に spawnNext() で最初のミノを出せば、リスタート完了。
おめでとう、完成です 🎉
これで 12 ステップすべて。あなたの書いた Java で、 一から作ったテトリスがブラウザで動いています。
研修で習った文法 — クラス、継承、フィールド、メソッド、配列、列挙型、 条件分岐、ループ、例外 — が、全部この小さなゲームに埋め込まれています。 コードの拡張はこれから自由に:T-spin 判定、ゴースト表示、ホールド、BGM、 ネット対戦… 挑戦はいくらでもあります。
次にやりたいこと
- コードエディタを組み込んで、その場で書き換えられるように
- ステップ 1 から自分の手で書き起こしてみる
- 友達のテトリスと並べて見せ合う