Do-While循环过早退出

时间:2016-04-29 04:56:16

标签: java loops do-while chess

我尝试过编写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

所以,如果我玩第二次无效,第二次移动应重播,​​因为(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");

非常感谢帮助。

1 个答案:

答案 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);

我必须看到你的其他代码,但如果在转换玩家时索引被撤销,我不会感到惊讶。