Step 08 of 12
ランダムに出す
ミノを I→O→T→… の固定順から、毎回ランダムに変えます。
差分は数行だけですが、java.util.Random の使い方と
「なぜフィールドとして持つのか」を押さえるのが目的。
About this step
Random の使いかた
Random rng = new Random(); で乱数ジェネレータを作り、
rng.nextInt(7) で 0〜6 のランダムな整数を得ます。
nextInt(n) は 0 以上 n 未満を返します。
配列の長さをそのまま渡せるのが便利。
なぜ Random はフィールド?
Random はフィールドとして一度だけ作るのが普通。
spawnNext の中で毎回 new Random() してしまうと、
内部状態がそのたびにリセットされて乱数の質が落ちます
(特にシードをつけない場合、短時間に作ると似た値が並ぶことがある)。
おまけ:本家テトリスは純ランダムではない
実はプロのテトリスは 7-bag という方式を使います。
「7種類を1つずつ袋に入れ、順にシャッフルして出す」というもの。
純ランダムだと「Z が5連続」みたいな理不尽ケースが起きるのを防ぐためです。
この教材では簡単のため純ランダム(nextInt)でいきます。