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