首先,不要相信你的“想法”。写出真正的代码以确保您可以进行行和列检查。
这个想法应该是直截了当的:
循环通过棋盘。假设左上角是 [0,0],然后向右走 ([0,1], [0,2]...) 直到碰到右边界。然后转到下一行。完成,直到你点击右下角的框。
对于每个框,检查是否有 k 个出现 1. 向右,2. 向下,3. 对角线向左向下和 4. 对角线向右向下。
如果发生 4 个中的任何一个,则返回 true,否则,移动到下一个单元格。
例如,这里是一些示例伪代码:
遍历板:
ROWS=8;
COLS=8;
char[ROWS][COLS] board;
k = 3; // occurrence
for (x = 0 to COLS-1) {
for (y = 0 to ROWS-1) {
checkRightward(x, y, k);
// checkDownward(...)
}
}
样本检查向右:
checkRightward(x,y,k) {
char symbol = board[y][x];
noOfOccurence = 0;
for (currentX = x; currentX < COLS ; ++currentX) {
if (board[y][currentX] == symbol) {
noOfOccurence++;
} else {
break; // jump out from the loop
}
}
return (noOfOccurence >= k);
}
您应该不难将这个想法翻译成 Java,并添加其他缺失的检查。
编辑:由于作者似乎并不真正理解我在说什么......所以我对这个想法进行了一些视觉展示:
假设一个 8 x 8 板,它是这样的:
X
0 1 2 3 4 5 6 7
0
1
2
3 * ---->
Y 4 / | \
5 |/_ | _\|
6 V
7
在上图中,当前单元格(带星号 * 的位置)的 [x,y] 坐标为 [3,3]。你要做的就是检查
1) 向右:这意味着检查 [3,3]、[4,3]、[5,3].... 是否具有相同的符号
2)向下:这意味着检查 [3,3]、[3,4]、[3,5].... 是否具有相同的符号
3)右对角线:这意味着检查 [3,3], [4,4], [5,5].... 是否具有相同的符号
4) 左对角线:这意味着检查 [3,3], [2,4], [1,5].... 是否具有相同的符号
您从 [0,0] 单元格开始检查,然后 [1,0], [2,0]... 然后 [0,1],[1,1][2,1]... 直到您找到了一个单元格,其中 4 次检查中的任何一个都成功,或者当您点击最后一个单元格时 ([7,7])。