| @echo off&color 1f&mode con cols=55 lines=30 |
| setlocal enabledelayedexpansion |
| title 猜数字游戏 batman |
| 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>nulCOPY |