2016-04-29 9 views
-3

Ich habe versucht, ein PvP-Schachprogramm zu schreiben. Wenn jedoch ein ungültiger Zug gespielt wird, endet der Zug.Do-While-Schleife wird vorzeitig beendet

Im Code wird q wahr, wenn die Anfangs- und Endkoordinaten eines Stücks nicht übereinstimmen.

if (x1 != x2 || y1 != y2) 
      return true; 
     return false; 

Wenn ich diesen Code ausführen,

First move is made

Also, wenn ich die zweite ungültig spielen, sollte der zweite Schritt wiederholen, weil (q == false) , jedoch

Der Code sollte nur dann ausgelöst werden, "wenn du einen gegnerischen Stein nicht bewegen kannst", wenn der falsche Spieler an der Reihe ist. Allerdings löst es aus, wenn ich versuche, einen gültigen Zug zu spielen.

It says that I'm using an enemy piece!

Auch wenn ich schrieb:

player p 
    if (board[x1][y1].initPiece.name.charAt(0) != p.colour) 
     System.out.println ("you cannot move an enemy piece"); 

Hilfe ist willkommen.

+1

formatieren Sie bitte Ihren Code. –

+2

Was glaubst du, "break;" tut? – Henry

Antwort

0

So wie es verbessert werden könnte, ich glaube nicht, dass Ihr Fehler in dem ersten Block von Code ist, den Sie gezeigt haben.

Wenn es wirklich benötigt wird, kann askMove()white/black.move auf false gesetzt werden. Dann könnten Sie den ersten Codeblock wie folgt vereinfachen:

while(!askMove(board, white, in)); 
while(!askMove(board, black, in)); 

Das kommt Ihrem Fehler nicht nahe.

Aber ich denke, Sie Fehler finden werden ziemlich schnell, wenn Sie diesen Code ändern:

if (board[x1][y1].initPiece.name.charAt(0) != p.colour) 
     System.out.println ("you cannot move an enemy piece"); 

Zu diesem Code:

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

habe ich den Rest des Codes sehen aber ich wäre nicht überrascht, wenn die Indexierung umgekehrt wird, wenn die Spieler gewechselt werden.

Verwandte Themen