2013-09-27 39 views
0

我創建了一個批處理文件,使用變量%random%選擇一張隨機紙牌。批處理腳本不斷循環,直到%random%介於1和13之間,然後再次執行該處理。然後我將設置爲數字的變量轉換爲文本,因此批處理文件會這樣說:四顆心或黑桃王。唯一的問題是,它需要永遠!如果您在批處理文件 - 選取卡

Echo %random% 

打開的CMD.exe和類型,並做到這一點,直到數爲1至四個,你會永遠存在。即使你把它放到一個批處理文件並使用一個循環,它仍然需要大約二十秒。有沒有辦法縮短時間,或者縮小搜索前的隨機數生成?我真的不確定。如果有幫助,或者你可以不理解我,這裏是代碼:

@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 

回答

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 

祝你好運!

+1

那麼,那肯定比你的第一個答案要好。 –

+0

謝謝!寫完之後不久,我意識到它實際上偏向於生成兩位數字(10,11,12),所以我尋找更好的方法...... – urish

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? - 非常相似你要問什麼