
[已解決]文曲星上猜字游戲的批處理如何理解
上面是源代碼,nclick="copycode($('code0'));">復制代碼
- @echo off&color 1f&mode con cols=55 lines=30
- setlocal enabledelayedexpansion
- title 猜數字游戲 by zw19750516
- echo.&echo.
- echo.&echo ***** 游戲規則 *****
- echo.&echo程序會自動生成一組四個互不相同的0-9內的整數,
- echo.&echo請你根據猜測和判斷,每次輸入一組四個互不相同
- echo.&echo0-9內的整數,中間請用空格格開,如:1 2 3 4,
- echo.&echo程序會將你每次輸入的數組與其生成的數組進行比
- echo.&echo較,并將比較的結果輸出屏幕上以幫助你進一步的
- echo.&echo判斷,直到你所輸入的數組與其生成的數組的數值
- echo.&echo和次序完全相同,或你已用完了所有的猜測機會。
- echo.&echo如果你已經看懂了規則,請按任意鍵開始本次游戲。
- set var=A&pause>nul
- :begin
- set /a a=%random%%%10
- for %%a in (%var%) do if %%a equ %a% goto begin
- set var=%var% %a%
- if %var:~8% equ goto begin
- set var=%var:~2%&set m=0
- :again
- set /a n=0,v=0,ws=0,s=0,t=10-m
- if %t% equ 0 goto end
- cls&echo.&echo請注意你總共只有10次機會,現在還剩下%t%次機會
- if %m% neq 0 for /l %%i in (1,1,%m%) do echo.&echo !_%%i!
- set codes=A
- echo.&set /p code= 請在此輸入:
- echo %code: =%|findstr [^0-9]&&goto wrong
- for %%a in (%code%) do (
- for %%i in (!codes!) do if %%i equ %%a goto wrong
- set codes=!codes! %%a
- set /a n+=1
- )
- if %n% neq 4 goto wrong
- set codes=%codes:~2%
- for %%i in (%codes%) do (
- set str=%%i
- if !str:~1! neq goto wrong
- )
- for %%a in (%var%) do (
- set /a v+=1,x=0
- for %%i in (%codes%) do (
- set /a x+=1
- if %%a equ %%i if !x! equ !v! (
- set /a ws+=1,s+=1
- ) else (
- set /a s+=1
- )
- )
- )
- set /a m+=1
- if %var% equ %codes% goto suc
- set _%m%=%codes%中數值正確的有%s%個,其中位置數值都正確的有%ws%個&goto again
- :wrong
- cls
- echo.&echo 所輸入的非合法十進制整數,或數值不合要求,
- echo.&echo 或有重復數,或輸入的數值個數不是4個。
- ping /n 2 127.1>nul&goto again
- :suc
- if %m% equ 1 cls&echo.&echo 不會吧,1次就搞定了,你是不是神仙下凡啊?&goto select
- if %m% leq 3 cls&echo.&echo 你真是聰明絕頂啊,只用%m%次就猜中了。&goto select
- if %m% leq 5 cls&echo.&echo 看來你還是很厲害,用了%m%次就猜中了。&goto select
- if %m% leq 9 cls&echo.&echo 呵呵,猜了%m%次,勉強過關了。&goto select
- if %m% equ 10 cls&echo.&echo 你太精明了,硬是把機會給用完成功過關。
- :select
- ping /n 3 127.1>nul
- cls&echo.&set select=&set /p select=是否再來一次(是就輸入y/Y,其它任意鍵退出):
- if /i %select% equ y (goto begin) else (goto exit)
- :end
- cls&echo.&echo 對不起你已經用完了所有的機會了。正確答案是%var%&goto select
- :exit
- ping /n 3 127.1>nul
這段代碼我看不懂、、、第一行應該是去隨機數然后除10取余數,第二行是不是如果重復了就重新隨機取數?第三行是不是把隨機數加進去?第四行是不是就是說第八個字符以后的字符不是空就繼續隨機取?但是如果取了4個隨機數,那么var=0 1 2 3那么第八個字符是空啊,難道繼續取?第五行,是不是一共取了5個數字?然后舍棄了第一個數字?那個取隨機能不能set /a RandomNumber=%random%%%9+0,即0到9之間取隨機、nclick="copycode($('code1'));">復制代碼
- :begin
- set /a a=%random%%%10
- for %%a in (%var%) do if %%a equ %a% goto begin
- set var=%var% %a%
- if %var:~8% equ goto begin
- set var=%var:~2%&set m=0

