我目前正在开发一款具有说服系统的游戏。我已经设置了其中一个系统的所有代码,但随后又设置了2个,并且它开始给我一个错误,表示“(数字)此时未被预期”。当我选择2作为第二选择,3作为第3选择时。
代码是这样的。
@echo off
SETLOCAL EnableDelayedExpansion
for /F "tokens=1,2 delims=#" %%a in ('"prompt #$H#$E# & echo on & for %%b in (1) do rem"') do (
set "DEL=%%a"
)
set name=Quantum
cls
color 0a
Echo King Redwood: So 2000?
pause >nul
echo.
call :colorText 09 "1. 2500"
echo.
call :colorText 0e "2. 3000"
echo.
call :colorText 0c "3. 4000"
echo.
echo 4. 2000
echo.
set /p "purs=Enter:"
if /i %purs% == 1 (
goto CheckB )
if /i %purs% == 2 (
goto CheckY )
if /i %purs% == 3 (
goto CheckR )
if /i %purs% == 4 (
goto Convo )
:CheckB
set bleu=%random:~-2,1%
if %bleu% GTR 10 (
goto CheckB )
if %bleu% LSS 0 (
goto CheckB )
set /a num = 3
set /a reward = 2500
goto Res
:CheckY
set Yel=%random:~-2,1%
if %Yel% GTR 10 (
goto CheckY )
if %Yel% LSS 0 (
goto CheckY )
set /a num = 5
set reward = 3000
goto Res
:CheckR
set red=%random:~-2,1%
if %red% GTR 10 (
goto CheckB )
if %red% LSS 0 (
goto CheckB )
set /a num = 7
set /a reward = 4000
goto Res
:Convo
set /a reward = 2000
Echo %name%: I think that is a reasonable price.
Echo King Redwood: Very well.
Echo King Redwood: We will now take you to make sure you are
echo ready.
pause >nul
:Res
if %bleu% GEQ %num% goto Succeed
if NOT %bleu% GEQ %num% goto Fail
:Succeed
Echo %name%: I think that the struggles for such a long trip will be more then that
Echo %name%: How about %reward%?
Echo King Redwod: OK %reward% will work.
pause >nul
goto end
:Fail
Echo %name%: I think that you can give me %reward%.
Echo %name%: You know, for the struggles that there will be along the way.
echo If 2000 isn't good enough for you, I'll just have someone else do it.
pause >nul
:end
exit
:colorText
echo off
<nul set /p ".=%DEL%" > "%~2"
findstr /v /a:%1 /R "^$" "%~2" nul
del "%~2" > nul 2>&1i
答案 0 :(得分:1)
首先,确保在以下之前放置a)来关闭FOR循环:CheckB。
对于“此时未预料到”错误,您有时会将空变量与某些变量进行比较。例如,通过跟踪CheckY,您设置Yel,然后继续Res并检查Bleu,它是空的,因为它尚未设置。你没有在二进制GEQ运算符旁边放任何东西,这就是它抱怨的原因。
提示:要进行调试,请尝试插入如下的ECHO语句:
:Res
echo bleu=%bleu%,num=%num%
另一个问题:使用SET时,不要用空格包围=。 SET /a
将使用=周围的空格,只是因为/ a的性质,但普通的SET不会。好吧,它会在你的变量名后附加一个空格,并在前面添加一个空格,这不是你想要的。
另一个提示:你可以通过SET / a和模数运算符约束RANDOM返回的内容,就像这样。
SET /a red=%random% %% 11
这会将红色设置为0到10之间的数字,因此在选择随机数后,您不需要使用子字符串和goto例程。
另外,请考虑使用EXIT /b
退出批处理文件而不是整个CMD环境。