2D配列を検索するアルゴリズム

スティーブン

テトリスのようなゲームを再現しようとしています。「ColorShape」というオブジェクトを格納する2D配列「_tiles」があります。

private ColorShape[][] _tiles = new ColorShape[8][17];; 

下矢印キーを押して配列内で次に使用可能なスロットを見つけ、図形をすばやく配置するためのquickDrop()メソッドを作成しようとしています。ピースが含まれている列の現在のピースの下の行を検索するアルゴリズムを理解するのに苦労しています。

これは私がこれまでにやろうとしたことですが、私はこれをすべて間違っていると思います:(ピースは30x30ピクセルであるため、30で除算されているため、配列の位置はのxとyの位置に対応します形状)

public void quickDrop(){

   // j is the column that the piece is currently in
   int j = _proxyPiece.getXLocation()/30;

    for (int i=0; i<17;i++){

        if(_tiles[j][i] == null)
          continue;



       else if (_tiles[j][i] != null){
         _tiles[j][i-2] =  _proxyPiece.getFirstPiece();  
         _tiles[j][i-1] =  _proxyPiece.getSecondPiece();
         repaint();

         _proxyPiece.setPiece(this.newPiece());
         repaint();
         break;
       }    


  }
}

public void paintComponent(Graphics g) {
    if (_pauseState == false){
    _pauseText.setVisible(false);
    super.paintComponent(g);
    // simplify the positioning of things.
    g.translate(0, 0);

    //Draws the board outline and fills it white
    g.setColor(Color.WHITE);
    g.drawRect(0, 0, 240, 480);
    g.fillRect(0, 0, 240, 480);

    //Draws a dark gray grid 
    g.setColor(Color.DARK_GRAY);

        for(int x = 0; x < COL_COUNT + 1; x++) {
            for(int y = 0; y < VISIBLE_ROW_COUNT+1; y++) {
                g.drawLine(0, y * TILE_SIZE, COL_COUNT * TILE_SIZE, y * TILE_SIZE);
                g.drawLine(x * TILE_SIZE, 0, x * TILE_SIZE, VISIBLE_ROW_COUNT *    TILE_SIZE);
            }
        }

    Graphics2D aBetterPen = (Graphics2D)g;    
    _proxyPiece.fill(aBetterPen);

    for (int i = 0; i<16; i++){
        for(int j=0; j<8;j++){
            if(_tiles[j][i] != null)
             _tiles[j][i].fill(aBetterPen);
        }
    }
}
   else if (_pauseState == true){
       _pauseText.setVisible(true);
       super.paintComponent(g);
       // simplify the positioning of things.
       g.translate(0, 0);
       g.setColor(Color.WHITE);
       g.drawRect(0, 0, 240, 480);
       g.fillRect(0, 0, 240, 480);

    }

}
ウィリアム・モリソン

これを解決するための1つのアルゴリズム:

  1. 現在のドロップピースを取得し、現在の位置から下に向かってすべてのY値の上に移動します。
  2. 以前に配置されたピースと衝突する場合、またはグリッドの下部を超える場合は、最後にチェックしたY位置が有効な解決策です。

1つだけではなく、すべての有効なソリューションが必要な場合は、現在選択されているピースのすべての可能な回転に対してこのアルゴリズムを繰り返します。

これがアルゴリズムの例です。コードをそのまま使用することはできませんが、すぐに始めることができます。

ColorShape[][] grid = new ColorShape[width][height];
TetrisShape shape = new TetrisShape(Shape.L_SHAPE);

//position will be bottom left coordinate of bounding rectangle of dropping shape.
Point position = new Point(shape.getPosition());
int resultY = -1;
for(int dy=0;dy<height;dy++){
    for(int y=0;y<height;y++){
        int shapeY = position.y+y;
        if(shapeY>=height || shape.intersectsGrid(grid)){
            resultY = shapeY -1;
            break;
        }        
    }
}

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

配列内の要素を検索するアルゴリズム

分類Dev

2つの配列内の2つの要素の合計を検索するO(nlogn)のアルゴリズム

分類Dev

2つの配列の値を検索するためのアルゴリズム

分類Dev

2D配列のピークを見つけるアルゴリズム

分類Dev

2次元配列を検索するためのアルゴリズム

分類Dev

数のセットを隣接せずに2D配列に分散するアルゴリズム

分類Dev

遺伝的アルゴリズム関数JS 2D配列

分類Dev

Pythonの2D配列の再帰的アルゴリズム

分類Dev

合計が値になる5つの要素の配列を検索するためのアルゴリズム

分類Dev

配列内の単語を検索するアルゴリズムはありますか

分類Dev

アルゴリズムはカタツムリの2D配列で番号の位置を見つけます

分類Dev

配列内の要素数を決定するC ++線形検索アルゴリズム

分類Dev

ポイントの配列を検索するためのより良いアルゴリズム?

分類Dev

2Dポイントのリストから曲線を検出するアルゴリズム

分類Dev

検索アルゴリズムを最適化する方法

分類Dev

vhdlで線形検索アルゴリズムを作成する

分類Dev

テーブルセル/ 2D配列ソートアルゴリズム

分類Dev

2Dグリッドを定義するアルゴリズム

分類Dev

2D配列に円を作成するアルゴリズム編集:ダイヤモンドは大丈夫です

分類Dev

2D配列での経路探索のアルゴリズム

分類Dev

2D配列のラビンカープアルゴリズム

分類Dev

2D配列の要素を変更するアルゴリズムの作成で問題が発生しました

分類Dev

'{'と '}'をjavascriptの2つの配列に格納するアルゴリズム

分類Dev

文字列内の部分文字列を検索するための高速アルゴリズム

分類Dev

繰り返される状態を回避する検索アルゴリズム

分類Dev

指定された文字列の文字セットを検索するための最速のアルゴリズム

分類Dev

特定の文字列をDBで検索するための優れたアルゴリズム

分類Dev

HashMap検索アルゴリズムの複雑さを計算する方法は?

分類Dev

2D配列の各要素に1回アクセスする最も非効率的なアルゴリズム

Related 関連記事

  1. 1

    配列内の要素を検索するアルゴリズム

  2. 2

    2つの配列内の2つの要素の合計を検索するO(nlogn)のアルゴリズム

  3. 3

    2つの配列の値を検索するためのアルゴリズム

  4. 4

    2D配列のピークを見つけるアルゴリズム

  5. 5

    2次元配列を検索するためのアルゴリズム

  6. 6

    数のセットを隣接せずに2D配列に分散するアルゴリズム

  7. 7

    遺伝的アルゴリズム関数JS 2D配列

  8. 8

    Pythonの2D配列の再帰的アルゴリズム

  9. 9

    合計が値になる5つの要素の配列を検索するためのアルゴリズム

  10. 10

    配列内の単語を検索するアルゴリズムはありますか

  11. 11

    アルゴリズムはカタツムリの2D配列で番号の位置を見つけます

  12. 12

    配列内の要素数を決定するC ++線形検索アルゴリズム

  13. 13

    ポイントの配列を検索するためのより良いアルゴリズム?

  14. 14

    2Dポイントのリストから曲線を検出するアルゴリズム

  15. 15

    検索アルゴリズムを最適化する方法

  16. 16

    vhdlで線形検索アルゴリズムを作成する

  17. 17

    テーブルセル/ 2D配列ソートアルゴリズム

  18. 18

    2Dグリッドを定義するアルゴリズム

  19. 19

    2D配列に円を作成するアルゴリズム編集:ダイヤモンドは大丈夫です

  20. 20

    2D配列での経路探索のアルゴリズム

  21. 21

    2D配列のラビンカープアルゴリズム

  22. 22

    2D配列の要素を変更するアルゴリズムの作成で問題が発生しました

  23. 23

    '{'と '}'をjavascriptの2つの配列に格納するアルゴリズム

  24. 24

    文字列内の部分文字列を検索するための高速アルゴリズム

  25. 25

    繰り返される状態を回避する検索アルゴリズム

  26. 26

    指定された文字列の文字セットを検索するための最速のアルゴリズム

  27. 27

    特定の文字列をDBで検索するための優れたアルゴリズム

  28. 28

    HashMap検索アルゴリズムの複雑さを計算する方法は?

  29. 29

    2D配列の各要素に1回アクセスする最も非効率的なアルゴリズム

ホットタグ

アーカイブ