Instrukcje „Jeśli” nie działają zgodnie z wymaganiami w grze wsadowej, a matematyka nie działa poprawnie

1

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
Mathys Oliveira
źródło
SET /A "variable=expression", zwróć uwagę na "s. Zobacz ss64.com/nt/set.html
DavidPostill
Obawiam się, że wciąż dostaję „Niezrównoważony nawias” nawet po umieszczeniu cytatów przed i po, jak wspomniałeś ..
Mathys Oliveira
2
Następnie przeczytaj Debugowanie plików wsadowych
DavidPostill

Odpowiedzi:

1

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:

if /i "%type%"=="fight" (
    if /i "%choice%"=="%weapon%" (
        set /a ehp = ehp - atk
        set /a hp = hp - eatk
        goto FIGHTPROCESSORLOOP
    )
)
Mathys Oliveira
źródło