3

Javaで2次元配列を移動する最も簡単な方法は何ですか? ゲーム ボード用の 2D 配列を作成し、それを使用してゲーム ピースの位置を追跡します。したがって、16x16 の 2D 配列がある場合、プレイヤーがボード X のスペースを移動できるようにするにはどうすればよいでしょうか。

私は作品が次の場所から移動することを知っています:

[0][0] -> [0][16] - トップ

それから

[0][16] -> [16][16] - 右側

それから

[16][16] -> [16][0] - 下

最後に [0][0] であるホーム スペースに戻ります。

[16][0] -> [0][0] - 左側

どんな助けや提案も大歓迎です!

編集:複数の正解を受け入れることができればいいのに....ため息;(

4

3 に答える 3

2

xプレーヤーの位置を 2 つの変数で保持できますy

それが円形のボードゲームである場合(私が理解していることから)、関数を持つことができます

advance_one_space() { //let's suppose it turns clockwise and your array is board[y][x]
    if ( y==0 && x<15 ) 
        x++;
    else if ( y<15 && x==15 ) 
        y++;
    else if ( y==15 && x>0 ) 
        x--;
    else if ( y>0 && x==0 ) 
        y--;
}

この関数を 60 回呼び出すと、プレイは 1 ターンになり、おそらく 200$ を受け取ることになります :-)

nそして、スペースを進めたい場合:

advance(n) {
    advance_one_space();
    if (n>1)
        advance(n-1);
}
于 2013-07-11T17:44:41.953 に答える
1

元の質問に対するコメントに基づいて、それはセマンティクスの問題であることを理解しています。

プレーヤーの観点からは、ボードはマトリックスではありません。あなたが暗示しているように、最後の位置(16 * 4 = 64)の後にプレーヤーを最初の位置に「テレポート」するのは単なる直線です。

そして、GameEngine の観点からは、行上の位置をマトリックスの境界上のセルに変換する問題です。

したがって、GamePieceオブジェクトにはposition0 で初期化されたプロパティがあると考えてください。 には、 で初期化されたBoardGameプロパティと、 equalsである別のプロパティがあります。boardSide16boardLengthboardSide * 4

ここで、プレーヤーが移動しようとするたびに、ボードから「落ちない」ことを確認してから、画面上に適切に配置する必要があります。

コードは次のようになります。

// When updating the game state
private void move(GamePiece piece, int spaces) {
    int destination = piece.position + spaces;
    if (destination >= BoardGame.boardLength) {
        destination -= BoardGame.boardLength;
    }
    piece.position = destination;
}

// When updating the game view
private void updateView() {
    (...)
    // Considering you store the game pieces on the gamePieces collection
    for (GamePiece p: gamePieces) {
        int side = Math.floor(p.position % BoardGame.boardSide); // Either 0, 1, 2 or 3
        switch (side) {
            case 0: // Top
                // Place Piece method takes: the piece, the X position and the Y position
                BoardGame.placePiece(p, BoardGame.boardSide - p.position, 0);
                break;
            case 1: // Right

                break;
            case 2: // Bottom

                break;
            case 3: // Left
                break;
        }
    }
    (...)
}

PS:私は今とても急いでいて、コードを適切に仕上げることができません。これが役立つことを願っていますが、後で戻って終了しようとします。

于 2013-07-11T18:47:47.823 に答える