我正在制作一个19x19的棋盘游戏,它基本上是五子棋,叫做Gomoku。
我想设计一个高效的算法来查找是否有'n'个棋子在一行。数据存储为19x19的二维数组。但出于问题的考虑,让我们假设它是6x6。
0 0 0 1 0 0 0 0 0 0 0 0
0 0 0 1 0 0 0 1 0 0 0 0
0 0 0 1 0 0 0 0 1 0 0 0
0 0 0 1 0 0 0 0 0 1 0 0
0 0 0 1 0 0 0 0 0 0 1 0
0 0 0 0 0 0 0 0 0 0 0 1
这是两个连续的1的“5”的例子。如何测试水平、垂直和两个对角线?
以下是我低效的代码:
private boolean firstDiagonalCheck(int x, int y, int num) {
int count = 1;
int check = 0;
boolean rflag = true;
boolean lflag = true;
int pos = 1;
check = turnHuman + 1;
while (rflag) {
if (x + pos >= 19 || y + pos >= 19) {
rflag = false;
break;
}
if (gb.getBoard()[x + pos][y + pos] == check) {
count++;
pos++;
} else {
rflag = false;
}
}
pos = 1;
while (lflag) {
if (x - pos < 0 || y - pos < 0) {
lflag = false;
break;
}
if (gb.getBoard()[x - pos][y - pos] == check) {
count++;
pos++;
} else {
lflag = false;
}
}
if (count == num) {
return true;
}
return false;
}
这只是第一种对角线的方法,还有另外三种方法。
如何使其更有效率并检查所有4个方向?
编辑##################
我的代码实现了以下功能: - 获取棋子的位置(x,y) - 检查两侧(如果是垂直方向则为上下),并计算出连续相同棋子的数量 - 如果计数匹配所需的数字("num"),则返回true,否则返回false。
如果每次都检查整个棋盘以查看是否有连续的棋子,是否会更有效率?