Kiedy w mojej grze wsadowej zostanie uruchomiony następujący kod, bez względu na to, jaki będzie wkład, zawsze zaatakuje i przejdzie do FIGHTPROCESSORLOOP i powie mi „Niezrównoważony nawias”, a logicznie z instrukcją IF nic nie powinno się zdarzyć, gdy dane wejściowe nie są wymagane, prawda? Kody „Podróżowanie” i „Menu” działają idealnie, więc dlaczego „Walka” nie działa równie dobrze?
:CHOICEPROCESSOR
set /P choice=^>
if /i "%type%"=="travel" (
if /i "%choice%"=="%choice1%" goto %TRAVELLINGPROCESSOR%
if /i "%choice%"=="%choice2%" goto %TRAVELLINGPROCESSOR%
if /i "%choice%"=="%choice3%" goto %TRAVELLINGPROCESSOR%
if /i "%choice%"=="%choice4%" goto %TRAVELLINGPROCESSOR%
if /i "%choice%"=="%choice5%" goto %TRAVELLINGPROCESSOR%
)
if /i "%type%"=="menu" (
if /i "%choice%"=="%choice1%" goto %exec1%
if /i "%choice%"=="%choice2%" goto %exec2%
if /i "%choice%"=="%choice3%" goto %exec3%
if /i "%choice%"=="%choice4%" goto %exec4%
if /i "%choice%"=="%choice5%" goto %exec5%
)
if /i "%type%"=="fight" (
if /i "%choice%"=="%weapon%" (
set /a rsdmg=!ehp!-!atk!
set /a rsedmg=!hp!-(!eatk!/!def!)
set /a ehp=!ehp!-!atk!
set /a hp=!hp!-(!eatk!/!def!)
if hp GTR bhp set hp=%bhp%
goto FIGHTPROCESSORLOOP
)
)
echo Huh?
echo.
goto CHOICEPROCESSOR
SET /A "variable=expression"
, zwróć uwagę na"
s. Zobacz ss64.com/nt/set.htmlOdpowiedzi:
Wielkie dzięki za pomoc, DavidPostill. Oto co robiłem źle:
Zamiast próbować różnych słów, po prostu sprawdzę instrukcję IF, pozostawiając mój „Wybór” pusty, co oznacza, że za każdym razem otrzymam oryginalną wartość. Zatem nie ma w tym nic złego.
Jeśli chodzi o matematykę, nie jestem pewien, jak mi się to udało, ale zwykłe odwołanie się do stron Roba Van der Woude'a w tej sprawie pomogło mi przepisać poprawnie działający kod. Zamiast używać wszystkich tych zmiennych, właśnie to wszystko usunąłem i wybrałem znacznie prostsze podejście:
źródło