首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >(JavaFX) -蛇和梯子游戏中的Snake迭代2D矩阵

(JavaFX) -蛇和梯子游戏中的Snake迭代2D矩阵
EN

Stack Overflow用户
提问于 2018-07-12 12:11:53
回答 1查看 626关注 0票数 1

我正在制作游戏“蛇和梯子”。我正在使用一个GridPane来表示游戏板,显然我想以“蛇”的方式在棋盘上移动。就像这样:http://prntscr.com/k5lcaq

当骰子被滚动时,我想要将'dice_num‘向前移动+您当前的位置,所以我使用一个一维数组计算新索引,并将这个索引转换为2D坐标(反向行-主要顺序)。

代码语言:javascript
复制
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数组呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-12 12:51:23

通过以下转换,您可以很容易地将坐标系颠倒:

代码语言:javascript
复制
y' = maxY - y

要获得“蛇形顺序”,只需检查行索引差异是奇数还是偶数。即使在某些情况下,索引的增加也应该增加x坐标。

代码语言:javascript
复制
x' = x

对于奇数情况,需要应用类似于上面的y转换的转换。

代码语言:javascript
复制
x' = xMax - x

以下方法允许您在(x, y)和1D-index之间进行转换。请注意,index是基于0的:

代码语言:javascript
复制
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 };
}
代码语言:javascript
复制
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]);
}

这将使您可以轻松地修改职位:

代码语言:javascript
复制
int[] nextPos = getPosition(steps + getIndex(currentX, currentY));
int nextX = nextPos[0];
int nextY = nextPos[1];
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51305405

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档