2016-04-29 121 views
-3

我試過寫一個PvP國際象棋程序。但是,當一個無效的移動被執行時,它會結束回合。Do-While循環過早退出

 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

請格式化您的代碼。 –

+2

你覺得'打破了什麼?'在做什麼? – Henry

回答

0

雖然它可以改進,但我認爲你的錯誤不在你顯示的第一塊代碼中。

如果真的需要,askMove()可以設置white/black.movefalse。那麼你可以簡化第一個代碼塊,如下所示:

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

我得看看你的代碼的其餘部分但是如果索引因玩家轉換而被逆轉,我不會感到驚訝。