我很想知道在Java中移动二维数组最简单的方法是什么?我为游戏板创建了一个二维数组,并使用它来跟踪游戏块的位置。因此,如果我有一个16x16 2d阵列,我该如何制作它,这样玩家可以在棋盘上移动X个空格。
我知道这些作品会从:
[0] [0] - > [0] [16] - TOP
然后
[0] [16] - > [16] [16] - 右侧
然后
[16] [16] - > [16] [0] - BOTTOM
然后最终回到[0] [0]的家庭空间。
[16] [0] - > [0] [0] - 左侧
任何帮助或建议将不胜感激!
编辑:我希望我能接受多个正确答案......叹息;(答案 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个变量中,让我们说x
和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次会使游戏转一圈,也许可以收到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。:我现在很匆忙,无法正常完成代码。希望这会有所帮助,但我会稍后再回来尝试完成它。