批处理文件 - 选择一张卡片

时间:2013-09-27 22:30:27

标签: batch-file

我创建了一个批处理文件,使用变量%random%选择随机游戏卡。批处理脚本保持循环,直到%random%介于1和13之间,并再次为该套装执行循环。然后我将设置为数字的变量转换为文本,因此批处理文件会这样说:四个心脏,或黑桃之王。唯一的问题是,它需要永远!如果您打开CMD.exe并键入

Echo %random%

并且直到数字在1到4之间,你会永远在那里。即使您将其放入批处理文件并使用循环,它仍然需要大约20秒。有没有办法减少时间,也许是在随机数生成之前缩小搜索范围?我真的不确定。如果有帮助,或者你无法理解我,这里是代码:

@echo off
:loop
cls
echo generating card...
set num=%random%
if /i %num% GTR 13 goto loop
if /i %num% LSS 1 goto loop
goto next
:next
set suit=%random%
if /i %suit% GTR 4 goto next
if /i %suit% LSS 1 goto next
goto next2
:next2
if %num%==11 set num=jack
if %num%==12 set num=queen
if %num%==13 set num=king
goto next3
:next3
if %suit%==1 set suiter=Hearts
if %suit%==2 set suiter=Diamonds
if %suit%==3 set suiter=Clubs
if %suit%==4 set suiter=Spades
goto ech
:ech
echo %num% of %suiter%
echo.
echo.
echo.
echo press any key to choose again
pause >nul
goto loop

2 个答案:

答案 0 :(得分:2)

第一次尝试时,您可以使用一点数学来获得1到13之间的数字:

set /a num=13*%random%/32768+1 

和1和4相同的事情

set /a suit=4*%random%/32768+1

请参阅How to use random in BATCH script? - 与您提出的问题非常相似

答案 1 :(得分:1)

您可以使用简单的余数运算完全消除搜索,从而将生成的随机数限制在[1,13]和[1,4]范围内。这也将简化代码。您可以使用可用于算术的'set / a'命令来实现此目的。 只需将脚本更改为:

@echo off
:loop
cls
echo generating card...
set /a num=%random% %% 13 + 1
set /a suit=%random% %% 4 + 1
if %num%==11 set num=jack
if %num%==12 set num=queen
if %num%==13 set num=king
if %suit%==1 set suiter=Hearts
if %suit%==2 set suiter=Diamonds
if %suit%==3 set suiter=Clubs
if %suit%==4 set suiter=Spades
goto ech
:ech
echo %num% of %suiter%
echo.
echo.
echo.
echo press any key to choose again
pause >nul
goto loop
祝你好运!