移动二维阵列(棋盘游戏)的最佳方式

时间:2013-07-11 17:23:34

标签: java arrays multidimensional-array 2d-games

我很想知道在Java中移动二维数组最简单的方法是什么?我为游戏板创建了一个二维数组,并使用它来跟踪游戏块的位置。因此,如果我有一个16x16 2d阵列,我该如何制作它,这样玩家可以在棋盘上移动X个空格。

我知道这些作品会从:

[0] [0] - > [0] [16] - TOP

然后

[0] [16] - > [16] [16] - 右侧

然后

[16] [16] - > [16] [0] - BOTTOM

然后最终回到[0] [0]的家庭空间。

[16] [0] - > [0] [0] - 左侧

任何帮助或建议将不胜感激!

编辑:我希望我能接受多个正确答案......叹息;(

3 个答案:

答案 0 :(得分:2)

根据您的评论,您可以使用以下伪代码实现对移动的限制。我不是100%确定这是否是你想要的,但希望它有点帮助

if (user tries to move right) {
    if (posX < 15 && posY == 0)
         //move right
    else
         //don't
}

if (user tries to move left) {
    if (posX > 0 && posY == 15)
         //move left
    else
         //don't
}

等等。这与您正在寻找的相似吗?对数组遍历的限制?我假设你的电路板只允许基于你所说的在阵列的边界上移动,所以下面的O位是合法的,X是非法的:

OOOOOOOOOOOOOOO
OXXXXXXXXXXXXXO
OXXXXXXXXXXXXXO
...
OXXXXXXXXXXXXXO
OOOOOOOOOOOOOOO

答案 1 :(得分:2)

您可以将玩家的位置保存在2个变量中,让我们说xy

如果这是一个圆形棋盘游戏(根据我的理解),你可以有一个功能

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次会使游戏转一圈,也许可以收到200美元: - )

如果你想提前n个空格:

advance(n) {
    advance_one_space();
    if (n>1)
        advance(n-1);
}

答案 2 :(得分:1)

根据您对原始问题的评论,我理解这是语义问题。

从玩家的角度来看,棋盘不是矩阵,正如你暗示的那样,它只是一条直线,恰好在最后一个位置(16 * 4 = 64)之后“传送”一个玩家到第一个位置位置。

从GameEngine的角度来看,是将线上的位置转换为矩阵边界上的单元格。

因此,请求您的GamePiece对象具有position属性,初始化为0. BoardGame的属性boardSide已初始化为16并且另一个属性boardLength等于boardSide * 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;
        }
    }
    (...)
}

P.S。:我现在很匆忙,无法正常完成代码。希望这会有所帮助,但我会稍后再回来尝试完成它。

相关问题