2016-04-29 13 views
-3

PvP Chessプログラムを作成しようとしました。ただし、無効な移動が行われた場合は、ターンを終了します。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が成立します。

私は、

First move is made

をこのコードを実行すると、私は2番目の無効を再生する場合、第二の動きが再生すべき

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

ヘルプは高く評価されています。

+1

コードをフォーマットしてください。 –

+2

「休憩」は何をしていると思いますか? – Henry

答えて

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

私はあなたのコードの残りの部分を参照する必要があると思いますプレイヤーの切り替えに合わせてインデックスが逆転している場合、私は驚くことはありません。

関連する問題