提问者:小点点

奥赛罗MVC编程是合法的移动方法


我在CS课上有一个项目,我们以MVC的形式制作奥赛罗,我试着在里面做一个合法的动作,但是从我所看到的来看,它只是在黑板上向上看。

我尝试过将它放入一个数组中,其中包含您可以进行的所有可能的移动,但这要么以错误告终,要么它说每个空间都是可能的移动。

这是代码,board是一个2d字符串数组,表示奥赛罗的板,isOffBoard检查位置是否离开板。getSquare检查输入的位置是否是玩的人的一块。方向类主要只是一个2d数组,有坐标要添加,使位置朝着特定的方向走。

public boolean isLegalMove(int[] pos) {
    if (this.board[pos[0]][pos[1]].equals("")) {
        for(int[] direction : Directions.points) {
            int[] newPos = pos;
            vector(direction, newPos);

            if (isOffBoard(newPos) == true || getSquare(newPos) == 1 || getSquare(newPos) == 0) {
                continue;
            }

            while (isOffBoard(newPos) == false && getSquare(newPos) == -1 && getSquare(newPos) != 0) {
                vector(direction, newPos);
                if (getSquare(pos) == getSquare(newPos)) {
                    System.out.println("Legal Move: " + pos[0] + " " + pos[1]);
                    return true;
                }
            }
        }
    }
    return false;
}

共1个答案

匿名用户

你写了:

            int[] newPos = pos;

然后两个变量都指向同一个表。

                vector(direction, newPos);

然后将更改公共表(posnewPos)。

一个

                if (getSquare(pos) == getSquare(newPos)) {

很可能永远是真的。

你应该告诉我们错误是什么。以及涉及哪些案例。

你还写了:getSquare(newPos)==-1