MS Batch: set funktioniert nicht
lima-city → Forum → Programmiersprachen → Sonstige Programmiersprachen
abfragen
aktuellem spieler
anfang
aufgefallen
bedingung
befehl
code
dank
fehler
feld
folgendes code
grammatik
kleinen logik
not
richtig code
set
setzen
spieler
standardwert
zweite punkt
-
Hallo,
ich versuche gerade, TicTacToe mit einer Batch-Datei hinzukriegen. Aber der Set-Befehl funktioniert nicht richtig:
REM Setze Standardwerte: set a1= set a2= [...] set p1=X set p2=O set pn=X [...] :game [...] REM Von aktuellem Spieler %pn% zu besetzendes Feld %n% abfragen set /p n="Spieler %pn%: Feld (z.B. b2): " REM U.-Variable des Feldes besetzen if (%n%=="a1") set a1=%pn% if (%n%=="a2") set a2=%pn% [...] REM Der andere Spieler ist jetzt dran if (%pn%==%p1%) set %pn%=%p2% if (%pn%==%p2%) set %pn%=%p1% REM Zurückspringen goto game
Die Umgebungsvariablen werden zwar am Anfang gesetzt, aber bei den Zeilen "if (%n%=="xy") set xy=%pn%" passiert scheinbar nichts. habe ich irgendwas übersehen? -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Hey ;)
Ich kann dir deine Frage leider nicht beantworten, aber vielleicht an einer anderen Stelle helfen.
1) "Debuggen":
In deinem Fall könnte es sehr hilfreich sein, wenn du dir Zwischenausgaben mit echo ausgeben lässt. (z.B. Geht das Script überhaupt in die if? Was haben die Variablen für einen Wert vor bzw. nach der if, u.ä....)
Vielleicht findest du ja dann deinen Fehler.
2) Ich denke, dass du da einen kleinen Logik-Fehler beim "Spieler wechseln" hast:
REM Der andere Spieler ist jetzt dran if (%pn%==%p1%) set %pn%=%p2% if (%pn%==%p2%) set %pn%=%p1%
Wenn pn gleich p1 -> Setze pn = p2
// Wenn die obere Bedingung true war, ist pn jetzt ganz sicher p2, folglich ist die nächste Bedingung auch true...
Wenn pn gleich p2 -> Setze pn = p1.
=> pn wird nach diesen 2 if's (sofern in mind. eine hineingegangen wird) auf jeden Fall den Wert von p1 haben.
Lösung: else if. (In dem Fall ginge er nur in die 2. if, wenn die 1. if nicht ausführt wurde.)
lg
Sincer -
Vielen Dank sincer,
"Debuggen" mache ich ja (ich dachte das muss nicht unbedingt hier mit rein), aber vorher und nachher ist das Ergebnis gleich wie das am Anfang. Da ändert sich überhaupt nichts.
Der zweite Punkt ist mir jetzt auch aufgefallen, danke.
Wie geht das mit dem else? Ich habe von der Grammatik von Batch wenig Ahnung. -
if (%pn%==%p1%) (
set pn=%p2%
else (
set pn=%p1%
))
Bei set waren 2 % zuviel. Siehe set /?
Manchmal muss man das %Wert% noch in Anführungsstriche setzen. -
Danke tid-gaming,
Das mit den %s ist mir noch nicht aufgefallen, danke.
Und das if habe ich anscheinend etwas blöd verwendet:
es muss "if %x% == %y% REM Was machen" statt "if (%x%==%y%) REM Was machen" heißen!
Ein Else scheint es nach langer Google Suche wirklich nicht zu geben, auch dein Beispiel funktioniert nicht. Was aber funktioniert ist folgendes:
if not "wert1" == "wert2" GOTO else REM Wenn Wahr GOTO end :else REM Wenn Falsch :end
Beitrag zuletzt geändert: 8.7.2011 14:56:31 von momar-blog -
Hmm kann seien das es nur bei for Schleifen mit dem else funktioniert. Das hab ich noch nicht getestet.
Aber else funktioniert da 100%.
Siehe find /?|find /i "else" -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage