我尝试过编写PvP国际象棋程序。但是,当播放无效移动时,它会结束转弯。
do
{
boolean q = askMove(board, white , in);
if (q == true){
white.move = false;
break;
}
else
continue;
} while (white.move == true);
do
{
//boardDisplay (board);
boolean w = askMove(board, black, in);
if (w == true){
black.move = false;
break;
}
else
continue;
}while (black.move == true);
}
在代码中,如果一个片段的初始坐标和最终坐标不相同,则q为真。
if (x1 != x2 || y1 != y2)
return true;
return false;
当我执行此代码时,
所以,如果我玩第二次无效,第二次移动应重播,因为(q == false) 然而,
代码应该只触发“你无法移动敌人”。只有当它是错误的玩家时。但是,当我尝试播放有效的动作时,它会触发。
It says that I'm using an enemy piece!
即使我写道:
player p
if (board[x1][y1].initPiece.name.charAt(0) != p.colour)
System.out.println ("you cannot move an enemy piece");
非常感谢帮助。
答案 0 :(得分:0)
尽管可以改进,但我不认为您的错误出现在您已经展示的第一个代码块中。
如果真的需要,askMove()
可以将white/black.move
设置为false
。然后,您可以将第一个代码块简化为:
while(!askMove(board, white, in));
while(!askMove(board, black, in));
没有解释你的错误。
但是,如果您更改此代码,我认为您会很快发现错误:
if (board[x1][y1].initPiece.name.charAt(0) != p.colour)
System.out.println ("you cannot move an enemy piece");
到此代码:
if (board[x1][y1].initPiece.name.charAt(0) != p.colour)
System.out.println ("You cannot move the enemy piece "
+ board[x1][y1].initPiece.name + " at "
+ x1 + "," + y1 + " when playing as "
+ p.colour);
我必须看到你的其他代码,但如果在转换玩家时索引被撤销,我不会感到惊讶。