- @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.&echo 0-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
复制代码 上面是源代码,- :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
复制代码 这段代码我看不懂、、、
第一行应该是去随机数然后除10取余数,
第二行是不是如果重复了就重新随机取数?
第三行是不是把随机数加进去?
第四行是不是就是说第八个字符以后的字符不是
空就继续随机取?但是如果取了4个随机数,那么var=0 1 2 3那么第八个字符是空啊,难道继续取?
第五行,是不是一共取了5个数字?然后舍弃了第一个数字?
那个取随机能不能set /a RandomNumber=%random%%%9+0,即0到9之间取随机、 |