テトリス ゲームの一部の実装では、ランダム ジェネレーターと呼ばれるアルゴリズムがあり、次のアルゴリズムに基づいて片側テトロミノのセットの順列の無限シーケンスを生成します。
Random Generator は、袋から取り出したかのように、ランダムに並べ替えられた 7 つの片側テトロミノ (I、J、L、O、S、T、Z) のシーケンスをすべて生成します。次に、別のバッグを生成する前に、ピース シーケンスに 7 つのテトロミノすべてを処理します。
この無限シーケンスの要素は、必要な場合にのみ生成されます。つまり、7 つの片側テトロミノのランダム順列は、キューが提供できるよりも多くのピースが必要な場合に、テトロミノのキューに追加されます。
Python でこれを行うには、主に 2 つの方法があると思います。
最初の方法はitertools.permutations
、random.choice
import itertools, random, collections
bag = "IJLOSTZ"
bigbag = list(itertools.permutations(bag))
sequence = collections.deque(random.choice(bigbag))
sequence.extend(random.choice(bigbag))
sequence.extend(random.choice(bigbag))
# . . . Extend as necessary
2 番目の方法では、 のみを使用しrandom.shuffle
ます。
import random, collections
bag = ['I', 'J', 'L', 'O', 'S', 'T', 'Z']
random.shuffle(bag)
sequence = collections.deque(bag)
random.shuffle(bag)
sequence.extend(bag)
random.shuffle(bag)
sequence.extend(bag)
# . . . Extend as necessary
テトリスのプレイヤーが熟練しており、ランダム ジェネレーターが片側テトロミノの大量のシーケンスを生成する必要があると仮定すると、どちらの方法の長所と短所は何ですか?