-4

回転式で各ピースを回転させます。詳細は、回転角が90度なので、次のようになります。

xNew = y;  

yNew = -x;

しかし、私の方法は2つの問題に遭遇しました:

1)箱から出して:各タイプの部分は正方形の4x4に合います。(左下の0,0)しかし、この回転によって、場合によっては、このボックスから出てしまいます。たとえば、座標が(5,6)の点があるので、これらの座標を4x4ボックスに再度合わせる方法を教えてください。または、このための別の式を教えてください。

2)Iの場合:(同じ行または同じ列に4つの正方形)、2回転の場合があります。しかし、上記の方法では、まだ4個あります。だから、これを防ぐ方法。

ありがとう :)

4

2 に答える 2

3

テトリスボードはグリッドレイアウトです。非常に簡単な理解方法は、テトリスのピースは「塗りつぶされた」正方形のセット数にすぎないということです。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次元配列をどのように回転させますか?

テトリスは非常によく文書化されたゲームであり、「ツールボックス」に多くのスキルを追加できます。プログラミングの大部分を手作業で行いながら、提供されているパラダイムを使用して可能な限り多くのことを理解するようにしてください。そうすれば、長期的にはメリットが得られることがわかります。

于 2012-06-19T18:29:01.347 に答える
0

質問2はわかりませんが、質問1の場合は、回転させるだけでなく、ピースを左/右/上/下に移動する必要があります。

于 2012-06-19T17:53:07.103 に答える