1

Когда следующий фрагмент кода запускается в моей пакетной игре для боя, независимо от того, что является вводом, он всегда будет атаковать и переходить к FIGHTPROCESSORLOOP и сообщит мне "Несбалансированные скобки", хотя логически с оператором IF ничего не должно произойти, вход не тот, который требуется, верно? Коды "Путешествия" и "Меню" работают отлично, так почему же "Борьба" не работает так же хорошо?

: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

1 ответ1

1

Большое спасибо за вашу помощь, ДэвидПостилл. Вот что я делал неправильно:

Вместо того, чтобы пытаться использовать другие слова, я просто проверял бы выражение IF, оставляя свой "Выбор" пустым, то есть каждый раз получал бы исходное значение. В этом нет ничего плохого.

Что касается математики, я не уверен, как мне удалось это сделать, но простая ссылка на страницы Роба Ван дер Вуде по этому вопросу помогла мне переписать правильно функционирующий код. Вместо того, чтобы использовать все эти переменные, я просто удалил все и пошел к более простому подходу:

if /i "%type%"=="fight" (
    if /i "%choice%"=="%weapon%" (
        set /a ehp = ehp - atk
        set /a hp = hp - eatk
        goto FIGHTPROCESSORLOOP
    )
)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .