Checkers Spiel: Keine Fehlerprüfung richtig?

8

Ich mache ein Checkers-Spiel für eine Aufgabe. Die ganze Sache läuft so, wie es sollte, bis auf eine seltsame Sache. Hier ist mein Board:

Ich bewege mich, indem ich die Quellzeile und -spalte, dann die Zielzeile und -spalte gebe.

%Vor%

Ich sollte einen Fehler ausgeben, wenn ich versuche, ein Stück an eine ungültige Stelle zu bewegen (nicht diagonal). Wenn ich also versuche ein Stück von 5 2 zu bewegen - & gt; 4 2, gibt es mir eine Fehlermeldung.

%Vor%

Für die meisten Dinge funktioniert es, aber wenn ich versuche, direkt einen Bereich nach unten zu bewegen (zum Beispiel 2 3 - & gt; 3 3), bewegt es das Stück und gibt mir keine Fehlermeldung.

Ich stecke fest! Irgendwelche Ideen, warum das passieren könnte? Ich kann bei Bedarf mehr Code veröffentlichen.

    
alundy 05.08.2013, 15:14
quelle

6 Antworten

7

Gemäß Ihrer Logik, wenn

%Vor%

ist wahr, der ganze Ausdruck wird wahr sein. Sie müssen auf die Reihenfolge achten, in der Java die booleschen Operationen ~ Add () bei Bedarf auswertet ~

    
charles_ma 05.08.2013, 15:22
quelle
5

Es ist ziemlich einfach, denke ich. Es gibt nur vier erlaubte Züge.

%Vor%

Natürlich erlaubt dieser Check Rückwärtsbewegungen. Aber die Richtung einer Rückwärtsbewegung hängt von der Spielfarbe ab und davon, ob das Stück durch Erreichen des anderen Endes befördert wird.

    
Martijn Courteaux 05.08.2013 15:18
quelle
3

Es sieht gut aus. Sie haben gerade vergessen, schließende Klammern um die zusammengesetzte if-Anweisung hinzuzufügen. Also, es ist wahr, wenn es nicht sollte.

    
Jon 07.08.2013 05:18
quelle
2

Ihr logischer Ausdruck ist falsch.

Sehen Sie sich Vorrang für Java-Operatoren an.

Wenn Sie Zweifel haben, verwenden Sie immer Klammern:

%Vor%     
bjedrzejewski 05.08.2013 15:24
quelle
2
%Vor%

Ich denke, Sie brauchen hier ein paar Klammern, da diese Bewertung schwierig ist, da Sie versuchen, zwei Ausdrücke gleichzeitig zu vergleichen. Probieren Sie

aus %Vor%

Auf diese Weise, wenn (destR = srcR +/- 1) UND (destC = srcC +/- 1), ist die Bewegung gültig.

Der ursprüngliche Weg würde einige der Zeit ausarbeiten, da Java boolean zwei Ausdrücke oder das Ergebnis des vorherigen Ausdrucks mit dem nächsten vergleicht.

    
Deactivator2 05.08.2013 15:28
quelle
1
%Vor%

entspricht

%Vor%

In Ihrem zweiten Beispiel:

%Vor%

destr (= 3) ist gleich srcR (= 2) + 1 = & gt; destR == srcR+1 ist true = & gt; Die Auswertung von (destR == srcR+1 || (destR == srcR-1 && destC == srcC+1) || destC == srcC-1) ist true .

Um Ihr Problem zu beheben, müssen Sie Ihre if -Anweisung zu:

ändern %Vor%     
mabbas 05.08.2013 15:31
quelle

Tags und Links