Step 11 of 12
スコアとレベル
消したライン数からスコアを計算し、10行ごとにレベルアップ。 レベルが上がると落下が速くなります。 盤面の右側にスコア・レベル・ライン数を表示するため、キャンバスを少し広げます。
About this step
ゲーム状態が増えてきた
ここまでは「ブロックと盤面」だけを追いかけていましたが、
Step 11 で score・linesCleared・level という
ゲーム全体の状態が加わります。
これらは「ブロックの位置」とは別の軸で動く値です。 状態が増えると変更のタイミングを見失いやすくなるので、 「誰が、どのイベントで、この値を変えるか」を整理する癖をつけましょう。
スコアの計算式
標準的な Tetris のスコア:
| 1 行消し | 100 × level |
| 2 行消し | 300 × level |
| 3 行消し | 500 × level |
| 4 行消し (テトリス!) | 800 × level |
配列リテラル int[] points = {0, 100, 300, 500, 800} を使って
points[n] で一発参照するのが気持ちいい書き方。
points[0] は未使用(保険)。
レベルで速くなる
dropSeconds() がメソッドになりました。固定値 1.0 ではなく、
レベルに応じて計算する形。レベル 1 → 1.0秒、レベル 5 → 0.6秒、レベル 10 → 0.1秒。
これで Step 11 以降、DROP_SECONDS 定数は dropSeconds() メソッド呼び出しに置き換わります。
キャンバス拡張
表示エリアを 240px → 340px に広げ、右側に screen.text でスコア等を描きます。
これまで当たり前のように盤面 = キャンバス全域だった前提が崩れる、地味だけど大事な瞬間。
座標は「盤面の右端 + 14px 」から始めています。
次のステップ
Step 12 でゲームオーバー判定とリスタートを入れて、全体を締めます。 スポーン位置にブロックが重なったら「もう置けない」 = ゲームオーバー、 R で最初からやり直し。