我正在制作游戏“蛇和梯子”。我正在使用一个GridPane来表示游戏板,显然我想以“蛇”的方式在棋盘上移动。就像这样:http://prntscr.com/k5lcaq。
当骰子被滚动时,我想要将'dice_num‘向前移动+您当前的位置,所以我使用一个一维数组计算新索引,并将这个索引转换为2D坐标(反向行-主要顺序)。
gameGrid.add(pieceImage, newIndex % ROWS, newIndex / ROWS);其中,gameGrid是我的网格窗格的ID,newIndex %行表示列坐标,newIndex /行表示行坐标。
问题1:网格窗格正在以自己的方式迭代。就像这样:https://prnt.sc/k5lhjx。显然,当二维数组遇到坐标0,9时,下一个位置是1,0,但我实际上想要的下一个位置是1,9。
问题2: --我想从网格窗格的底部开始计数(从数字1开始,见截图),一直到100。但是,我应该如何反向遍历2D数组呢?
发布于 2018-07-12 12:51:23
通过以下转换,您可以很容易地将坐标系颠倒:
y' = maxY - y要获得“蛇形顺序”,只需检查行索引差异是奇数还是偶数。即使在某些情况下,索引的增加也应该增加x坐标。
x' = x对于奇数情况,需要应用类似于上面的y转换的转换。
x' = xMax - x以下方法允许您在(x, y)和1D-index之间进行转换。请注意,index是基于0的:
private static final int ROWS = 10;
private static final int COLUMNS = 10;
public static int getIndex(int column, int row) {
int offsetY = ROWS - 1 - row;
int offsetX = ((offsetY & 1) == 0) ? column : COLUMNS - 1 - column;
return offsetY * COLUMNS + offsetX;
}
public static int[] getPosition(int index) {
int offsetY = index / COLUMNS;
int dx = index % COLUMNS;
int offsetX = ((offsetY & 1) == 0) ? dx : COLUMNS - 1 - dx;
return new int[] { offsetX, ROWS - 1 - offsetY };
}for (int y = 0; y < ROWS; y++) {
for (int x = 0; x < COLUMNS; x++, i++) {
System.out.print('\t' + Integer.toString(getIndex(x, y)));
}
System.out.println();
}
System.out.println();
for (int j = 0; j < COLUMNS * ROWS; j++) {
int[] pos = getPosition(j);
System.out.format("%d: (%d, %d)\n", j, pos[0], pos[1]);
}这将使您可以轻松地修改职位:
int[] nextPos = getPosition(steps + getIndex(currentX, currentY));
int nextX = nextPos[0];
int nextY = nextPos[1];https://stackoverflow.com/questions/51305405
复制相似问题