Day6 左邊,指令太少了!搞什麼東西!


大家好,今天過得還好嗎?
相信看完Day5的你已經能捏出一個簡單的批次檔了
在今天Day6我會介紹一個我在高中的時候用批次檔寫的終極密碼猜數字小遊戲
(就是那種會告訴玩家範圍像是500~1500那種)

OK,在我把批次檔的東西丟上來前我會先講解這個批次檔的基本運作概念
這樣你等會在看的時候會比較有頭緒

終極密碼:
變數設置
這遊戲的玩法是會有最大最小值
所以很明顯地我們會需要兩個變數去紀錄"最大"和"最小"
然後我們還需要"要給人猜的數字"和"每次使用者猜的數字"
最後,如果你有需要的話還可以加上"使用者遊玩的次數"來計次
基本運作邏輯
當使用者輸入數字時會需要和最大最小值比較
如果輸入的數字超過最大值 → 回報錯誤
如果輸入的數字小於最小值 → 回報錯誤
(這樣就可以很快速地檢測出是不是在範圍內)
而如果使用者輸入的數字沒有問題的話
猜數字的次數+1
然後重新給定最新的最大或是最小值
(以1~10然後答案是數字8的例子為例)
1~10 猜5 → 5~10(最小值更新)
5~10 猜9 → 5~9 (最大值更新)

好...接下來是我批次檔的內容

@ECHO OFF
@TITLE 終極密碼
set /a T=0
set /a MIN=1
set /a MX=10000

:GNRNUM
set /a RND=%random%
if /i %RND% GTR 9999 goto GNRNUM
if /i %RND% LSS 2 goto GNRNUM

:ENTER
echo %MIN%~%MX%
set /p INPUT=猜數字:

:COMPARE
if /i %INPUT% GEQ %MX% goto ERROR
if /i %INPUT% LEQ %MIN% goto ERROR
set /a T=%T%+1
if /i %INPUT% EQU %RND% goto BANG
if /i %INPUT% GTR %RND% set /a MX=%INPUT%
if /i %INPUT% LSS %RND% set /a MIN=%INPUT%
CLS
goto ENTER

:ERROR
echo 不在範圍內的數值
goto ENTER

:BANG
CLS
echo %RND%
echo 共猜了%T%次
echo 恭喜過關!BANG!
pause

批次檔解釋:
(前面解釋過的語法這裡就不會再重複說明了)

一開始初始化:
設定遊玩次數(T)為0次
設定最小值(MIN為1)
設定最大值為10000

產生隨機要猜的數字
設定要猜的隨機數字(RND)
這裡會用到叫做%RANDOM%的環境變數,它會產生一個0到32767之間的十整數亂數
(把由%RANDOM%產生的值丟給RND變數)
如果不符合設定條件的話就跳回自己(GNRNUM標籤)重新產生一個數字
(goto的用法會在後面說明)

使用者輸入要猜的數字
給使用者看目前的最小最大值
把使用者輸入的東西丟給INPUT變數

比較
這裡會用到一個神奇的東西"goto"
簡單地說下goto的語法
goto 你要去的地方(標籤名稱)
好比說我需要去A這個地方的話你會需要這樣寫

rem 你會需要先建立一個叫做A的標籤(建立標籤的語法 → ":標籤名稱")
:A
rem 然後指定你要去的標籤名稱
goto A

註:不過使用goto時要特別注意執行的順序
因為批次檔的執行順序都是"由上往下",所以一定要記得可能會重複執行(回到剛剛執行的地方)
所以要記得設一個退出條件或是把這樣的情況考慮進去

好,了解了goto的語法後再來看這段會輕鬆很多
如果輸入的內容不在最大最小值的時候

跳到"錯誤"標籤並產生錯誤訊息後再跳回"輸入"標籤讓使用者重新輸入

如果沒這問題

猜數字次數+1

如果"輸入的數字"和"隨機產生要猜的數字"相同的話就跳去結束(BANG)標籤,然後遊戲結束
↓(如果不同)
重新給定最大最小值後跳回"輸入"標籤讓使用者重新輸入

好,相信看完Day6的你已經學會"條件處理、標籤的使用方法和一些基本的處理邏輯"了
那麼我們Day7見啦








你可能感興趣的文章

[day 03] Function & Object: 關於Prototype Chain繼承

[day 03] Function & Object: 關於Prototype Chain繼承

MTR04_0923

MTR04_0923

if condition ! falsy value

if condition ! falsy value






留言討論