我认为有人问过类似的问题,但我的情况有点不同。我有这段代码:
@echo off
title Game
set time=1 am
timeout 10 /nobreak >nul & goto game
set time=2 am
:game
如何制作
timeout 5 /nobreak >nul
和
goto game
同时工作?如果你还没有得到它,我就是这样想的。 超时开始,你在超时结束后玩游戏,它将时间改为凌晨2点。我怎么能同时做到这一点并且玩游戏而不会受到干扰?请帮忙。谢谢!
答案 0 :(得分:1)
time
没有任何意见,那么你就是谁。它是由系统设置的保留变量,但可以由用户脚本覆盖。实际上,您可以使用任何其他变量名称 - 不是time
,date
,path
,random
和其他几个。
关于你的问题,
set "mytime=1 am"
call :starttimer
:game
... whatever
:getinput
set "response="
set /p "response=%~1"
if not exist timerfinished.txt goto :eof
:: here change "mytime"
set "mytime=2 am"
:starttimer
start /min "" timer.bat 10
goto :eof
其中timer.bat
是
@echo off
del timerfinished.txt 2>nul
timeout %1 /nobreak>nul
echo.>timerfinished.txt
exit
timer.bat
文件只删除了标志文件timerfinished.txt
,延迟了它收到的第一个参数设置的时间(%1
- 在主代码中设置为10)然后创建档案和退出。
主代码最初使用:starttimer
启动计时器,然后每当您想要提示并等待响应时,执行
call :getinput "Prompt for input "
,响应将显示在%response%
。
请注意,如果用户只需按 Enter
,则此例程中最初将response
设置为 nothing 可确保响应为空
好的 - 所以在您输入响应之前,使用此方案实际上没有发生 ,只有这样才会增加时间并且游戏会以更新的时间继续。如果您期望超时结束实际上做了某些事情,那真的 - 这不会发生 - 除非您使用choice
输入带有超时选项的回复。
答案 1 :(得分:0)
我认为你正在寻找一个游戏时间",比实时跑得快。
最佳方式:使用另一个脚本在单独(最小化)窗口中设置游戏时间变量(如下所示)。每当你需要访问当前的游戏时间&#34;在主脚本中,使用<gametime.dat set /p "gametime="
GAMETIME.BAT:
@echo off
set gametime=10:00
for /f "tokens=1,2 delims=:" %%a in ("%gametime%") do (
set hours=%%a
set mins=%%b
)
:loop
call :increase_gametime
timeout 5 >nul
goto :loop
:increase_gametime
set /a mins+=10
set /a hours=hours+mins/60
set /a mins=mins%%60
set gametime=%hours%:%mins%
title %gametime%
>gametime.dat echo %hours%:%mins%