Do-While 循环过早退出

Do-While loop is exiting prematurely

我尝试编写一个 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;

当我执行这段代码时,

First move is made

所以,如果我下的第 2 步无效,则第 2 步应该重走,因为 (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");

感谢帮助。

尽管可以改进,但我认为您的错误不在您显示的第一段代码中。

如果确实需要,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);

我必须查看您的其余代码,但如果随着玩家切换索引被反转,我不会感到惊讶。