![](/img/trans.png)
[英]Checking if a row of a 2-dimensional array exists anywhere within another array
[英]Checking adjacent tiles in 2-dimensional array
所以我试图用 Java 制作一个连接四的游戏,而不是我连接 6 而不是 4。
我有一个二维数组和 X 数量的玩家。 我必须检查连续 6 个块(水平、垂直和对角线)是否由同一玩家标记。 如果是,程序应该打印谁赢了。
现在,我在检查或确定谁获胜方面没有问题,尽管在我的一生中,我无法弄清楚如何防止程序在尝试检查数组外的块时崩溃。
现在,我试图避免使用 try-catch 或一个接一个地执行 8 个循环,而是对所有方向使用一种方法,只是参数有所变化,但我似乎无法使其工作:\\
有没有人对这可能如何工作有任何建议?
我是编程的初学者,我可能错过了一些东西,所以这就是我寻求帮助的原因:)
干杯
编辑:这是代码。 它有点长,这就是为什么我想缩短它并使其以某种方式工作。 Terminal 类与 System.out.println 类相同。
void checkIfPlayerWins(Field field, Integer rowNumber, Integer colNumber) {
Integer counter = 1;
for (int i = 1; i <= 6; i++) {
if (field.isOccupied(rowNumber, colNumber + i)) {
counter++;
} else {
break;
}
}
for (int i = 1; i <= 6; i++) {
if (field.isOccupied(rowNumber - i, colNumber + i)) {
counter++;
} else {
break;
}
}
for (int i = 1; i <= 6; i++) {
if (field.isOccupied(rowNumber - i, colNumber)) {
counter++;
} else {
break;
}
}
for (int i = 1; i <= 6; i++) {
if (field.isOccupied(rowNumber - i, colNumber - i)) {
counter++;
} else {
break;
}
}
for (int i = 1; i <= 6; i++) {
if (field.isOccupied(rowNumber, colNumber - i)) {
counter++;
} else {
break;
}
}
for (int i = 1; i <= 6; i++) {
if (field.isOccupied(rowNumber + i, colNumber - i)) {
counter++;
} else {
break;
}
}
for (int i = 1; i <= 6; i++) {
if (field.isOccupied(rowNumber + i, colNumber)) {
counter++;
} else {
break;
}
}
for (int i = 1; i <= 6; i++) {
if (field.isOccupied(rowNumber + i, colNumber + i)) {
counter++;
} else {
break;
}
}
if (counter == 6) {
Terminal.printLine("");
}
}
这是 isOccupied 方法
boolean isOccupied(Integer x, Integer y) {
return !this.field[x][y].equals("**");
}
您可以简单地处理您尝试在isOccupied
方法中检查Field
是否在无效坐标处被占用的情况:
boolean isOccupied(Integer x, Integer y) {
if(x < 0 || y < 0 || x >= numberOfColumns || y >= numberOfRows) {
// Attempting to check outside the grid: it's non-occupied.
return false;
}
return !this.field[x][y].equals("**");
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.