【发布时间】:2013-04-12 05:28:37
【问题描述】:
基本上,我目前正在尝试为 Android 制作黑白棋游戏,我的 if 语句让我有点头疼,似乎如果条件适用于不止一个,它只会通过其中一个语句的动作只留下另一个。我的代码如下:
if (check[position] == 0
&& (check[position - 8] == 2
|| check[position + 8] == 2
|| check[position + 1] == 2
|| check[position - 1] == 2
|| check[position - 9] == 2
|| check[position + 9] == 2
|| check[position - 7] == 2 || check[position + 7] == 2)) {
if (check[position + 8] == 2) {
for (int i = position; i < 56; i += 8) {
if (check[i] == 1) {
for (int j = position; j < i; j += 8) {
check[j] = 1;
}
playerno = 2;
break;
} else
break;
}
} else if (check[position - 8] == 2) {
for (int i = position; i > 8; i -= 8) {
if (check[i] == 1) {
for (int j = position; j > i; j -= 8) {
check[j] = 1;
}
playerno = 2;
break;
} else
break;
}
} else if (check[position + 1] == 2) {
for (int i = position; i < board.length; i++) {
if (check[i] == 1) {
for (int j = position; j < i; j++) {
check[j] = 1;
}
playerno = 2;
break;
}
if (i == 7 || i == 15 || i == 23 || i == 31
|| i == 39 || i == 47 || i == 55
|| i == 63) {
break;
}
}
} else if (check[position - 1] == 2) {
for (int i = position; i > 0; i--) {
if (check[i] == 1) {
for (int j = position; j > i; j--) {
check[j] = 1;
}
playerno = 2;
break;
}
if (i == 0 || i == 8 || i == 16 || i == 24
|| i == 32 || i == 40 || i == 48
|| i == 56) {
break;
}
}
}
Check 只是一个 int 数组,它记录了哪个玩家在棋盘上持有该特定棋子 现在由于某种原因,如果我的位置满足其中两个条件,它只会通过一个 if 语句,而且通常不是这个产生游戏将其视为无效动作,我想知道如何解决这个问题?
【问题讨论】:
-
你试过用递归来解决这个问题吗?向外扫描即可。
-
正确的格式发生了什么?
-
如果你的位置在棋盘的顶部或底部,这些条件会溢出数组。
-
对不起,我什至不会尝试这个。请不要使用一维数组来模拟二维板。解决这个问题,然后再回来问有什么问题。
-
使用一维数组是有原因的,如果你阅读了这个问题,你会看到我正在为 Android 编程,我一直被教导最好尝试使用在 Android 中尽可能使用一维数组,所以这就是我学会的方法。
标签: java android if-statement reversi