我试图检查一名球员是否对角赢了(从左上角到右下角)。网格的左上部分是(0,0)。我没有根据放置的最后一个牌来核对玩家是否赢了。相反,我检查网格上的所有点以检查是否有人对角赢了。这就是我提出的。
public class TestWin {
private int count_piece;
private char[][] board;
public void myBoard(char[][] x){
this.board = x;
//vertWin();
//horizontalWin();
diagDownWin();
}
public boolean diagDownWin(){
for(int row = 0; row < board.length; row++){
for(int col = 0; col < board[0].length; col++){
if(board[row][col] == board[row+1][col+1]){
count_piece++;
if(count_piece >= 4){
System.out.println("You win");
return true;
}
}else{
count_piece = 0;
}
}
}
System.out.println("No win");
return false;
}
public static void main(String[] args) {
char[][] myGrid = {
{ 'X', 'O', 'O', 'O'},
{ 'X', 'X', 'O', 'O'},
{ 'O', 'X', 'X', 'O'},
{ 'O', 'O', 'X', 'X'},
{ 'O', 'O', 'O', 'O'}
};
TestWin m1 = new TestWin();
m1.myBoard(myGrid);
}
}
因为有两种方法可以从对角线中获胜 - 我会检查从左上角到右下角的移动。我想要一个接一个(行+ 1和列+1),但是我在写行的地方遇到一个数组超出边界错误:
if(board[row][col] == board[row+1][col+1])
我认为这是因为当我到达最后一行和最后一行时,我添加了一个更大的board.length和board [0] .length
我该怎么做才能防止错误?
答案 0 :(得分:1)
在你的循环中,只迭代可以有效成为右下四行的左上角位置的位数(因此,对于你的例子)网格,位置(0, 0)
和(0, 1)
)。然后,评估从那一点开始是否发生了四行。有点像:
for(int row = 0; row < grid .length - 3; row++){
for(int col = 0; col < grid [row].length - 3; col++){
if((grid [row][col] == grid [row+1][col+1]) &&
(grid [row+1][col+1] == grid [row+2][col+2]) &&
(grid [row+2][col+2] == grid [row+3][col+3])){
System.out.println("Someone won down-right!");
}
}
}
这是相对蛮力的,但应该用于简单的目的。
请注意,由于您没有在提议的示例中对角迭代(而是按行中的列,然后按行),您的count_piece
将无法按预期执行。如果你坚持迭代:
for(int row = 0; row < grid .length - 3; row++){
for(int col = 0; col < grid [row].length - 3; col++){
int solution = true;
for (int index = 0; index <= 2; ++index) {
int rowIndex = row + index;
int colIndex = col + index;
if (grid [rowIndex][colIndex] != grid [rowIndex+1][colIndex+1]) {
solution = false;
break;
}
}
if (solution) {
System.out.println("Someone won down-right!");
}
}
}
似乎没必要。
答案 1 :(得分:0)
我会修改行的边界,将col循环修改为
for(int row = 0; row < board.length-1; row++){
for(int col = 0; col < board[0].length-1; col++){
然后将成功条件修改为
if(count_piece >= 3){
然后您可能需要手动检查“边缘”处的值。