Step 12 of 12 · Final

ゲームオーバー & リスタート

新しいミノが出てくる場所にもう空きが無ければ、そこでゲーム終了R で盤面とスコアをリセットして最初からやり直せます。 これで全 12 ステップ、あなたのテトリスが完成です。

MyTetris.java
Java runtime を初回読み込み中…
CheerpJ の JRE (数十 MB) をダウンロードしています。2回目以降はキャッシュから瞬時に立ち上がります。
preparing

About this step

ゲーム終了の判定

新しいミノを出した瞬間、spawn 位置でもう動けない(他のブロックと重なる)なら、 もう置く場所が無いということ。canMove(currentCells, pieceCol, pieceRow)false なら gameOver = true、それだけ。

衝突判定のために Step 5 で書いた canMove が、 ゲームオーバー判定にもそのまま使えるのがポイント。 基本関数は使い回される、というのがプログラミングの面白いところ。

update と onKey をガード

if (gameOver) return;updateonKey の先頭に入れて、 終了後は何も動かないように。ただし R キー(リスタート)だけは ゲームオーバー中でも反応させる必要があるので、ガードの前にチェック。

restart() は 1 メソッドにまとめる

盤面・スコア・レベル・アキュムレータ・gameOver フラグをリセット。 状態をリセットする場所は 1つに集める、というのが重要。 初期化コードが散らばるとバグの温床になります。

最後に spawnNext() で最初のミノを出せば、リスタート完了。

おめでとう、完成です 🎉

これで 12 ステップすべて。あなたの書いた Java で、 一から作ったテトリスがブラウザで動いています

研修で習った文法 — クラス、継承、フィールド、メソッド、配列、列挙型、 条件分岐、ループ、例外 — が、全部この小さなゲームに埋め込まれています。 コードの拡張はこれから自由に:T-spin 判定、ゴースト表示、ホールド、BGM、 ネット対戦… 挑戦はいくらでもあります。

次にやりたいこと

  • コードエディタを組み込んで、その場で書き換えられるように
  • ステップ 1 から自分の手で書き起こしてみる
  • 友達のテトリスと並べて見せ合う