テトリスボードはグリッドレイアウトです。非常に簡単な理解方法は、テトリスのピースは「塗りつぶされた」正方形のセット数にすぎないということです。0
ブール値の意味では、ピースは、塗りつぶされていない、または塗りつぶされていると見なすことができます1
。グリッド(またはタイルベース)アプローチを使用すると、ブロックが範囲外になるのを防ぎ、追加のボーナスとして、最下部の衝突に達したときの衝突コードも簡素化されます。
擬似コード:移動したいスペースがif (!grid[x][y]) block.move(direction)
どこにあるかをチェックできます。これは、指定された方向に1つのグリッドスペースでピースとマップを調整する任意の関数です。この意味で、ゲームループを使用して、ピースを段階的にドロップしたり、次のピースに使用したりすることもできます。grid[x][y]
block.move(direction)
block.move('down')
else block.stop(), game.generateBlock()
グリッドメソッドを使用すると、回転したピースがアウトオブバウンズになるかどうかを簡単に確認できます。if(x < 0 || x > gridWidth) block.move(direction)
これdirection
は、アウトオブバウンズに移動した場合とは逆の方向です。
グリッドベースの例を続けると、ピースは実際にはオン/オフのパターンであり、回転は次のように表示されます。
▇ ▇ ▇ ▇ ▇ ▇ ▇
▇ or ▇ ▇ ▇ or ▇ or ▇
▇ ▇ ▇
この基本的なアートワークだけで示されているのは、長方形のピースが多いため、ピースが中心点を中心に回転しないことです。パターンはブール状態で簡単に保存できますが、パターンがどの「位置」にあるかを追跡し、方向に関係なくテストするコードを記述できます。
各ピースには有限の数のパターンがあるため(最大4つ)、それらを単純にハードコーディングすることがおそらく最善の利益になります。この回答は、刺激的なコードを提供します:https ://stackoverflow.com / a / 8131337/571506
3Dゲームプログラミングに移行する可能性が少しでもある場合は、調査を行い、これらの単純な変数を使用して少し線形代数を学習することを強くお勧めします。各ピースはマトリックスとして保存できるため、ベースの「ピースマトリックス」に単純な変換を適用して、新しいパターンを取得できます。これは簡単に偽造することも、全面的に行うこともできます。3Dゲームプログラミングに移行する可能性が少しでもある場合は、調査を行い、これらの単純な変数を使用して少し線形代数を学習することを強くお勧めします。アルゴリズムについては、次の質問を確認してください。2次元配列をどのように回転させますか?
テトリスは非常によく文書化されたゲームであり、「ツールボックス」に多くのスキルを追加できます。プログラミングの大部分を手作業で行いながら、提供されているパラダイムを使用して可能な限り多くのことを理解するようにしてください。そうすれば、長期的にはメリットが得られることがわかります。