最近、ある優良企業の面接を受け、効率的なデータ構造でテトリス ゲームを設計するよう依頼されました。形状ごとに 2D 配列に回答しましたが、インタビュアーはより良い回答を探していました。それから、ルドもデザインしてほしいと頼まれました。
これらの両方の質問に対する意見はありますか?
最近、ある優良企業の面接を受け、効率的なデータ構造でテトリス ゲームを設計するよう依頼されました。形状ごとに 2D 配列に回答しましたが、インタビュアーはより良い回答を探していました。それから、ルドもデザインしてほしいと頼まれました。
これらの両方の質問に対する意見はありますか?
適切な選択は、各ピースの原点{0.0}
からのオフセットの3つのペアのリストです(4番目のオフセットは)。これにより、形状を次のようにエンコードできます。
I {0,1} {0,2} {0,3}
J {0,1} {1,1} {2,1}
L {0,1} {-1,1} {-2,1}
O {0,1} {1,1} {1,0}
S {-1,0} {-1,1} {-2,1}
T {-1,1} {0,1} {1,1}
Z {1,0} {1,1} {2,1}
これらのリストが手元にあれば、図形を描画し、「ガラス」で対応する図形の空き容量を確認し、回転を適用して、ガラスの内側の最終的な休憩場所に配置することができます。ほとんどの操作で2つのネストされたループを必要とする2D構造とは異なり、この構造では、1つのループでテストを実行できます。また、些細な4つのステップを展開すると、ループなしでテストを実行できます。
Ludo のやり方はよくわかりませんが、テトリスで最初に頭に浮かぶのは、ビット マスクを使用することです。
テトリスにすべてのシェイプを含めるのに十分な大きさの「スーパーシェイプ」を作成し、マスクのビットをオンにして「シェイプ」を作成できます。
このようにして、各シェイプを同じオブジェクト タイプにすることができます。それらが「着陸」すると、ボードを表すはるかに大きなビットマスクでビットをオンにすることができます。ビットの適切なセットがすべて「線を引いた」状態にある場合、イベントを処理できます。