联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!
@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