Connect 4 中的对角线获胜检查
Diagonal win checks in Connect 4
我正在开发具有 7x7 字段、水平和垂直检查的 Connect 4 游戏,但我无法进行对角线检查
只要其中一个标记不在最后一列,我就可以赢。
这些都是支票:
private static int getWinningInDiagonals() {
// Top-Left -> Bottom-Right
for (int column = 0; column < 7; column++) {
int count = 0;
for (int row = 0; row < 7; row++) {
if (field[row][column] != 0 && field[row+1][column + row - 1] == field[row][column])
count++;
else
count = 1;
if (count >= 4) {
return field[row][column];
}
}
}
// Top-Right -> Bottom-Left
for (int column = 0; column < 7; column++) {
int count = 0;
for (int row = 0; row < 7; row++) {
if (field[row][column] != 0 && field[row+1][column - row + 1] == field[row][column])
count++;
else
count = 1;
if (count >= 4) {
return field[row][column];
}
}
}
return 0;
}
如果你想每次都同时下右移,你也只需要到3,3因为对角线不能出现比它更远的位置,而且它不离开数组的边界。
如果我假设您的左上角是您的 0,0 是正确的,这应该适用于您的左上角到右下角。
从右上到左下是更改列和行循环以及更改偏移量工作方式的问题。
// Top-Left -> Bottom-Right
for (int column = 0; column < 4; column++) {
for (int row = 0; row < 4; row++) {
player = 0;
if (field[row][column] != 0){
player=field[row][column];
offset = 1;
}
while (player != 0){
if (field[row + offset][column + offset] == player){
offset += 1;
}else{
player = 0;
}
}
if(offset >= 4){
return field[row][column];
}
}
}
我正在开发具有 7x7 字段、水平和垂直检查的 Connect 4 游戏,但我无法进行对角线检查
只要其中一个标记不在最后一列,我就可以赢。
这些都是支票:
private static int getWinningInDiagonals() {
// Top-Left -> Bottom-Right
for (int column = 0; column < 7; column++) {
int count = 0;
for (int row = 0; row < 7; row++) {
if (field[row][column] != 0 && field[row+1][column + row - 1] == field[row][column])
count++;
else
count = 1;
if (count >= 4) {
return field[row][column];
}
}
}
// Top-Right -> Bottom-Left
for (int column = 0; column < 7; column++) {
int count = 0;
for (int row = 0; row < 7; row++) {
if (field[row][column] != 0 && field[row+1][column - row + 1] == field[row][column])
count++;
else
count = 1;
if (count >= 4) {
return field[row][column];
}
}
}
return 0;
}
如果你想每次都同时下右移,你也只需要到3,3因为对角线不能出现比它更远的位置,而且它不离开数组的边界。
如果我假设您的左上角是您的 0,0 是正确的,这应该适用于您的左上角到右下角。 从右上到左下是更改列和行循环以及更改偏移量工作方式的问题。
// Top-Left -> Bottom-Right
for (int column = 0; column < 4; column++) {
for (int row = 0; row < 4; row++) {
player = 0;
if (field[row][column] != 0){
player=field[row][column];
offset = 1;
}
while (player != 0){
if (field[row + offset][column + offset] == player){
offset += 1;
}else{
player = 0;
}
}
if(offset >= 4){
return field[row][column];
}
}
}