我正在制作批处理文件游戏(我知道这不是真的用于游戏)。我需要运行set /p
,要求用户选择要执行的选项,同时它每秒会增加一定数量的游戏金钱,但我不知道如何同时运行。 / p>
我已经尝试过在for循环中使用它,但是我无法使其正常工作。
这里是一个例子:
:do
::echo choices and ask user which option to do
echo choice 1
echo choice 2
echo choice 3
set /p choice= what to do:
if "%choice%" == "1" goto c1
if "%choice%" == "2" goto c2
if "%choice%" == "3" goto c3
::add money
set /a "money=%money%+10"
::wait one second
ping localhost -n 2 >NUL
::do it all again
goto do
即使他们没有选择一个选项,我也希望它能给他们钱,所以他们每秒都会得到他们的钱。
答案 0 :(得分:1)
您可能必须使用CHOICE
,因为SET /P
会读取用户输入,直到您给它输入新行为止。
CHOICE
有一个参数/T
,它可以告诉您n秒后将选择默认选项(使用/D <default key>
来设置默认选项)。例如,choice /c 123y /t 1 /d y
将等待输入1秒钟,并且如果用户在1秒钟内未按任何键,则仅选择最后一个选项(y
)。您还可以通过添加/M "<message>"
来显示自定义提示消息,因此您的完整命令是:
choice /c 123y /t 1 /d y /m "what to do:"
%ERRORLEVEL%
是CHOICE
命令提供输出的地方。从1到最后一个字符索引(在这种情况下,y
将为4
):
if "%errorlevel%"=="1" goto c1
if "%errorlevel%"=="2" goto c2
if "%errorlevel%"=="3" goto c3
rem The last one, which is 4, but because it's the only last option, so you don't need another if statement
在循环的最后,您可能要加钱:
rem Instead of "set /a money=%money% + 10", why you don't use += instead?
set /a money+=10
goto theBeginOfTheLoop
将这些语句组合在一起,我们将有一个简单的goto
循环:
:theBeginOfTheLoop
echo money: %money%
echo choice 1 [1]
echo choice 2 [2]
echo choice 3 [3]
choice /c 123y /t 1 /d y /m "what to do: "
if "%errorlevel%"=="1" goto c1
if "%errorlevel%"=="2" goto c2
if "%errorlevel%"=="3" goto c3
set /a money+=10
goto theBeginOfTheLoop
与Batch在一起度过愉快的一天:)