2016-12-01 12 views
1

Ich habe eine textbasierte Pokemon Schlacht programmiert und es sagt mir immer, ich habe einen fehlenden Operator. Hier ist das Skript, auf das ich mich einlasse.fehlende Batch-Operator und habe keine Ahnung warum

set /a attacks=%random% * 3/32768 + 1 
if %attacks%==1 set /a %ph%==%ph% - %random% * 10/32768 + 1 
if %attacks%==2 set /a %ph%==%ph% - %random% * 30/32768 + 1 
if %attacks%==3 set /a %ph%==%ph% - %random% * 50/32768 + 1 
if %attacks%==3 echo Squirtle used water bolt! 
if %attacks%==2 echo Squirtle used Tackle! 
if %attacks%==1 echo Squirtle used Water Pulse! 

jede Hilfe ist willkommen! Vielen Dank!

+4

Anstelle von 'set/a% ph% ==' sollten Sie 'set/a ph =' – SomethingDark

+1

@SomethingDark: Dies ist wichtiger als es aussieht. Auch wenn "ph" einen Wert, numerisch oder eine Zeichenkette hat, scheint der Befehl 'set/a% var% =' im Allgemeinen ungültig zu sein, so dass Sie anscheinend kein indirektes 'set/a' verwenden können, obwohl es logisch ist eine gültige Operation. – Magoo

+1

@Magoo: Wenn 'var' Variable einen gültigen Variablennamen enthält, dann ist' set/a% var% = ... 'eine absolut gültige Operation. – Aacini

Antwort

0

Wie SomethingDark sagt, möchten Sie set /a ph= verwenden. Beachten Sie, dass es ein Gleichheitszeichen gibt, das bedeutet "erhält den Wert", nicht zwei Gleichheitszeichen, das mit if verwendet wird und bedeutet "gleich?" (als Vergleich). Was Sie auch taten, indem Sie %ph%=... einstellten, war das Setzen einer neuen Variablen mit dem gleichen Namen Wert der Variablen ph. Mit anderen Worten, wenn ph auf 1 gesetzt wurde, haben Sie eine Variable mit dem Namen 1 auf das Ergebnis Ihrer mathematischen Operation gesetzt. Oder, wenn ph leer war, erhielten Sie wahrscheinlich fehlende Operand (was ich denke, was Sie sagen wollten). Wie auch immer, ich bin mir sicher, dass Sie das nicht beabsichtigt haben.

wird dieses Format arbeiten:

if %attacks%==1 set /a ph=%ph% - %random% * 10/32768 + 1 

Ich habe ein paar weitere Vorschläge bekam.

Erstens könnte es eine stilistische Wahl sein, aber ich verwende gerne den Mod (%) Operator mit Zufall. Es erleichtert das Lesen. Wie folgt aus:

set /a ph=%ph% - %random% %% 10 + 1 

Das (die %% 10 Teil), um eine Zahl zwischen 0 und 9 nimmt, dann + 1 macht es 1 bis 10, Modulo-Arithmetik unter Verwendung von (die, dividieren durch die Anzahl, dann den Rest zurück). Es ist einfacher IMO zu lesen. Beachten Sie, dass Sie nur die doppelte %% in einer Batch-Datei benötigen. Verwenden Sie in cmd einfach %.

Zweitens, wenn Sie einen Vergleich mit if, wenn einer Ihrer Operanden jemals leer ist, wird es Ihr Skript beenden. Umgeben Sie die Operanden stattdessen mit Anführungszeichen, so dass selbst eine leere Variable Ihr Skript nicht beschädigt. Es ist nicht unbedingt erforderlich, wenn Ihre Variablen niemals leer sind, aber es könnte sich lohnen.

if "%attacks%"=="3" echo Squirtle used water bolt! 

Ich hoffe, dass hilft.

Verwandte Themen