我正在尝试制作基于文本的批处理游戏。但是我遇到了一个问题,就是开始写它以前从未遇到的问题。
:menu
:: the game menu - opens when the game starts
cls
echo This game is still being made -- expermintal
echo Start Screen:
echo [1] View Changes
echo [2] Start Game
echo enter your choice:
set /p startchoice =
if %startchoice%==1 goto changes
if %startchoice%==2 goto startgame
当我输入1或2时,它会显示错误“此时goto意外发生”我该如何解决?
答案 0 :(得分:7)
您的startchoice
未正确设置。使用set /p
的替代语法,在那里提供提示(并删除startchoice
和作业(=
)运算符之间的空格 - 我认为它实际上是问题,但如果使用set /p <variable>=<Prompt>
语法,则可以通过一行减少批处理文件。
我为goto
和echo
语句添加了两个目标,以便您可以看到它们已到达:
:menu
:: the game menu - opens when the game starts
cls
echo This game is still being made -- expermintal
echo Start Screen:
echo [1] View Changes
echo [2] Start Game
set /p startchoice=Enter your choice:
if %startchoice%==1 goto changes
if %startchoice%==2 goto startgame
:changes
echo Changes
goto end
:startgame
echo StartGame
:end
答案 1 :(得分:4)
你需要围绕if比较的引号,它不喜欢你在没有提示的情况下使用set / p。以下作品:
:menu
:: the game menu - opens when the game starts
cls
echo This game is still being made -- expermintal
echo Start Screen:
echo [1] View Changes
echo [2] Start Game
set /p startchoice = "enter your choice: "
if "%startchoice%"=="1" goto changes
if "%startchoice%"=="2" goto startgame
答案 2 :(得分:0)
请尝试以下方法,而不是使用环境变量:
CHOICE
IF %ERRORLEVEL% EQU 1 goto changes
IF %ERRORLEVEL% EQU 2 goto startgame
Choice是一个允许您输入数字或y / n并返回错误代码的程序。 %ERRORLEVEL%是一个保存程序最后一个错误代码的变量。
您也可以进行其他比较。
EQU - equal
NEQ - not equal
LSS - less than
LEQ - less than or equal
GTR - greater than
GEQ - greater than or equal
答案 3 :(得分:-1)
可能是故障的另一个原因是你没有正确地包括SET / P M =变量...... m和等号之间不应该有空格。