0

这种方法应该在最初和一些动作之后确定游戏是否结束。

public boolean isGameOver() {
    Point[] player1 = new Point[12];
    int p1 = 0;
    Point[] player2 = new Point[12];
    int p2 = 0;
    for (int i = 0; i < 7; i++) {
        for (int j = 0; j < 7; j++) {
            if (board[i][j] == 1) {
                Point p = new Point(i, j);
                player1[p1] = p;
                p1++;
                //System.out.println(p.getX()+ " 1 " + p.getY());
            } else if (board[i][j] == 2) {
                Point p = new Point(i, j);
                player2[p2] = p;
                p2++;
                //System.out.println(p.getX()+ " 2 " + p.getY());
            }
        }
    }
    for(int i1=0;i1<player1.length;i1++) {
        ArrayList<Point> temp = getPossibleMoves(player1[i1]);
        if(temp.isEmpty())
            return true;
    }
    for(int i1=0;i1<player1.length;i1++) {
        ArrayList<Point> temp = getPossibleMoves(player2[i1]);
        if(temp.isEmpty())
            return true;
    }
    return false;
} 

问题是当我运行这些测试时,它们都有数组索引超出范围的错误这些是测试

最初:

  @Test(timeout=1000)
public void testGameOverInitial() {
    assertFalse(board.isGameOver());
}

经过一些动作:

 @Test(timeout=1000)

public void testGameOverAfterSomeMoves() {
    board.move(new Point(1, 0), new Point(3, 2)); // White's turn
    board.move(new Point(0, 5), new Point(2, 5)); // Black's turn
    assertFalse(board.isGameOver());
}
4

2 回答 2

1

您没有控制p1p2变量的值,因此它们可以大于您的数组长度。

有错误的行:

player1[p1]
p1++;

player2[p2]
p2++;

一个可能的解决方案是控制何时增加这些变量的值:

//similar for player2 and p2
if (p1 < player1.length) {
    p1++;
}
于 2013-04-26T19:53:20.730 回答
1

由于p1p2嵌套在for循环中,它们最多可以增加到 49,而不是 12,即两个播放器数组的大小。

您可以检查长度p1是否小于player1.length@LuiggiMendoza 建议的长度。或者你可以修复你的循环和你的player数组的长度。

我不确定您要做什么。您需要为您要解决的问题选择最佳解决方案。

于 2013-04-26T19:59:39.203 回答