gpt4 book ai didi

Java:如何检查二维数组中的对角线连接四

转载 作者:行者123 更新时间:2023-11-29 09:59:46 25 4
gpt4 key购买 nike

我有一个 Connect Four “board”,它是一个 6*7 二维字符数组,其中填充了空格、X 或 O。当垂直、水平或连续的一行中有四个 X 或四个 O 时,满足获胜条件对角地。我已经成功地检查了垂直和水平的获胜条件,其中获胜字符通过以下一些方法返回:

private char CheckVerticalWinner(char[][] currentBoard) {
// check vertical (move down one row, same column)
char vWinner = ' ';
for (int col=0; col<7; col++) {
int vCount = 0;
for (int row=0; row<5; row++) {
if (currentBoard[row][col]!=' ' &&
currentBoard[row][col] == currentBoard[row+1][col]) {
vCount++;
System.out.println("VERT "+vCount); //test
} else {
vCount = 1;
}

if (vCount>=4) {
vWinner = currentBoard[row][col];
}
}
}
return vWinner;
}


private char CheckHorizontalWinner(char[][] currentBoard) {
// check horizontal (move across one column, same row)
char hWinner = ' ';
for (int row=0; row<6; row++) {
int hCount = 0;
for (int col=0; col<6; col++) {
if (currentBoard[row][col]!=' ' &&
currentBoard[row][col] == currentBoard[row][col+1]) {
hCount++;
System.out.println("HORIZ "+hCount); //test
} else {
hCount = 1;
}

if (hCount>= 4) {
hWinner = currentBoard[row][col];
}
}
}
return hWinner;
}

我只是想知道如何在不抛出 ArrayIndexOutOfBoundsException 的情况下检查对角线胜利。我知道我需要遍历二维数组两次,一次用于前向对角线,一次用于长度为 4 个正方形或更多的后向对角线,如下图所示:

Diagonals to be checked diagram

基本上,我将如何填写此方法以返回获胜字符?

private char CheckDiagonalWinner(char[][] currentBoard) {

// some iteration here

return dWinner;
}

如有任何帮助,我们将不胜感激!

最佳答案

最简单的算法可能是:

for every direction
for every coordinate
check whether the next 3 elements in this direction exist and are the same

在代码中:

final int maxx = 7;
final int maxy = 6;

char winner(char[][] board) {
int[][] directions = {{1,0}, {1,-1}, {1,1}, {0,1}};
for (int[] d : directions) {
int dx = d[0];
int dy = d[1];
for (int x = 0; x < maxx; x++) {
for (int y = 0; y < maxy; y++) {
int lastx = x + 3*dx;
int lasty = y + 3*dy;
if (0 <= lastx && lastx < maxx && 0 <= lasty && lasty < maxy) {
char w = board[x][y];
if (w != ' ' && w == board[x+dx][y+dy]
&& w == board[x+2*dx][y+2*dy]
&& w == board[lastx][lasty]) {
return w;
}
}
}
}
}
return ' '; // no winner
}

关于Java:如何检查二维数组中的对角线连接四,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39062111/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com