Batch file 创建几何衰减的暂停循环

Batch file 创建几何衰减的暂停循环,batch-file,delay,Batch File,Delay,所以我正在创建一个类似于“记忆”游戏的批处理文件游戏。(即,玩家在短时间内收到一份物品清单,然后被要求重复该模式) 我的问题在于如何随着回合数的增加减少模式暴露给玩家的时间 这是我目前的代码: @echo off set /a y=50 set /a x=1000 :foo set /a y=%y% + %y% set /a x= %x% - %y% echo %y% echo %x% ping -n 10 -w %x% 127.0.0.1 > nul goto foo 当运行时,上面

所以我正在创建一个类似于“记忆”游戏的批处理文件游戏。(即,玩家在短时间内收到一份物品清单,然后被要求重复该模式)

我的问题在于如何随着回合数的增加减少模式暴露给玩家的时间

这是我目前的代码:

@echo off
set /a y=50
set /a x=1000

:foo
set /a y=%y% + %y%
set /a x= %x% - %y%
echo %y%
echo %x%
ping -n 10 -w %x% 127.0.0.1 > nul
goto foo
当运行时,上面的代码显示的x和y值会按预期变化,但是等待时间总是相同的。这是为什么?我如何修复它


感谢您抽出时间。

要使ping/wait技巧发挥作用,ip地址必须不存在。127.0.0.1是您自己的计算机,因此它没有机会超时,因为ping响应是成功且立即的


相反,选择一个不存在的ip地址。例如10.20.30.40(假设不存在)。

首先,为什么不使用
睡眠
?它可以正常工作(有关详细信息,请键入
sleep/?
) 但是,这里有另一种方法可以通过
for/l
循环实现这一点

@echo off
setlocal enabledelayedexpansion
set score=0
title Memory Test : Current Score = !score!

for /l %%a in (0,1,20) do (
Rem In the above sequence, increase 20 to the amount of times you want the test to be performed
set number[%%a] = !random!!random!
echo Number: !number[%%a]!
set /a wait=21-%%a
set /a wait=!wait!*1000/4
sleep -m !wait!
cls
set /p "input=What was the last number youy saw? "
if !number[%%a]! equ "!input!" (
set /a score=!score!+1
Echo Correct !
title Memory Test : Current Score = !score!
)else(
Echo Incorrect! Coreect Answer = !number[%%a]!
)
)
echo Calculating score...
pause
cls
echo.
if %score% leq 14 set msg="Nice Try! But you can do better!"
if %score% geq 15 set msg="Good Job! Your on your way to the top!"
if %score% equ 20 set msg="Your So Close! Almost a perfect socre!"
if %score% equ 21 set msg="You got a perfect score! Woderful!"
Echo %score%/21 : %msg%
echo.
pause    
这应该很好。请注意,你可以更改测试的持续时间,但在第一场比赛中,他们将有5秒多一点的时间来研究问题,而在最后一轮比赛中,他们将有四分之一秒的时间


蒙纳

您可以调整其中的10,以获得大约2秒的分辨率。这对你的代码来说足够了吗

ping -n 10 127.0.0.1 > nul
这是以后windows的另一个选项

timeout /t 10 >nul

如果你发现任何问题,告诉我,我没有机会测试这个。此外,我还将添加提供空白答案的功能。如果你没有给出答案,程序将结束。修复了没有答案的问题。非常感谢你的深度回复!我真的解决了我的问题。(我不理解ping格式,duh!)我使用我的方法的主要原因是因为我希望每轮之间的时间减少随着轮数的增加而增加。(这就是我选择几何级数的原因)。但是我也发现我需要一个终止条件,所以我添加了一个除法。这是我现在的代码:echo off set/a y=5005 set/a x=5000 set/a z=75:a set/a y=(%y%+%y%)/4 set/a x=%x%-%y%echo%y%echo%x%PING 1.1.1-n1-w%x%>NUL goto a
sleep
实际上不是微软的命令。您可能已将其添加到系统中,但它不是任何Microsoft操作系统中的默认值。