在我的游戏中,如果我拼写错误,例如“向南”它将关闭批处理文件而不是回显错误。这是我遇到问题的代码的一部分。
:type
set /p menu=type:
if "%menu%" == "go north" goto north
if "%menu%" == "go south" goto south
if "%menu%" == "go east" goto east
if "%menu%" == "go west" goto west
if "%menu%" == "grab bandage" goto pick up
if "%menu%" == "use bandage" goto use
if "%menu%" == "inventory" goto inventory
if "%menu%" == "look around" goto look around
if "%menu%" == "open drawer" goto open drawer
if "%menu%" == "open tin can" goto open can
if "%menu%" == "take tin can" goto ttc
if "%menu%" == "take key" goto tk
if "%menu%" == "take money" goto take money
if "%menu%" == "throw can" goto throw
echo error
pause
cls
goto play
它应该按照选择直到它达到回声错误。如果我拼错了不在列表中,例如“狗”它将显示错误。如果我拼写向南走这样的“去suth”它会显示错误,但如果我像这样拼写“去soutg”它会关闭游戏。有没有办法让拼错的单词像“go soutg”一样出错,而不必列出拼错单词的方法?
答案 0 :(得分:0)
代码似乎很正常,您遇到的问题不会由拼写错误引起,而是在几种情况下由goto
语句引起。
CMD解释器将空格作为参数的分隔符,因此您不能使用goto take money
,因为它实际上将解释为goto take
并将忽略money
,这会导致代码变为非现有标签。
当然使用建议的IF /I
可以帮助您忽略区分大小写的拼写错误,特别是当用户看不到选项列表时。
如果用户/播放器会看到可能性列表,您也可以考虑使用choice
命令而不是set /p
,因为您可以使用单个键定义用户将只选择选项的确切选项,并将设置变量%ERRORLEVEL%
为特定值(基于所做的选择),然后您可以像这样进行比较IF "%ERRORLEVEL%" EQU "3" goto east
利用choice
命令的好处是,只接受已定义的选项,而用户将执行的任何其他非定义选项,只会让说话者发出哔哔声。多亏了你不需要再次将脚本重定向到同一个提示“重绘”内容等......但只是一个建议
希望这有帮助... Ricky