我有一個連接四個「板」,這是一個6 * 7的二維字符數組,填充了空格,X或O.勝利條件滿足時,垂直,水平或對角線連續排列四個X或四個Os。我已經成功地獲得勝利條件檢查成功垂直和水平位置,其中獲勝的char是一些方法如下返回:Java:如何檢查對角線連接四維贏得二維數組
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。我知道我需要通過2D陣列來迭代兩次,一次用於前向對角線,一次用於後向對角線是4個方格長或更多,如下面圖中:
Diagonals to be checked diagram
基本上,如何將我填寫這個方法返回一個成功的char?
private char CheckDiagonalWinner(char[][] currentBoard) {
// some iteration here
return dWinner;
}
任何幫助將不勝感激!
是不是妨礙自己超過董事會的範圍內的一個簡單的事情?對於一個N×M的板子,你只需要考慮'(0,0)'到'(N-4,M-4)'的子矩陣,例如右邊的對角線,左到右下。 –
作爲建議,我建議你製作一種方法,接受網格的起始行和列,然後在特定方向上「掃描」至少4個值。當一行中有4個值時,它可以返回一個布爾值。 –
提示:嘗試提出更有意義的抽象:使用兩個字符的字符是一個非常低層次的抽象爲您的目的。相反,您可以使用枚舉來表示單元中的單元格。換句話說:不要選擇矩陣必須是二維數組的「立即」思想。花一些時間思考,如果組織單元的不同形式可能使其他事情變得更容易。 – GhostCat