我在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;
}
你写了:
int[] newPos = pos;
然后两个变量都指向同一个表。
vector(direction, newPos);
然后将更改公共表(pos
和newPos
)。
一个
if (getSquare(pos) == getSquare(newPos)) {
很可能永远是真的。
你应该告诉我们错误是什么。以及涉及哪些案例。
你还写了:getSquare(newPos)==-1