“If”语句在批处理游戏中无法按要求工作,数学运算也无法正常工作

“If”语句在批处理游戏中无法按要求工作,数学运算也无法正常工作

当在我的批处理游戏中运行以下代码进行战斗时,无论输入是什么,它都会发起攻击并进入 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

非常感谢你的帮助,DavidPostill。以下是我做错的事情:

我不用尝试不同的单词,只需将“选择”留空来检查 IF 语句,这意味着我每次都会得到原始值。那么,这样做没什么问题。

至于数学,我不确定我是如何做到的,但只需参考 Rob Van der Woude 关于此事的页面,我就能重写一个正常运行的代码。我没有使用所有这些变量,而是将它们全部删除,并采用一种更简单的方法:

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

相关内容