[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

批处理实现文曲星上猜数字游戏

代码做得相当粗糙,如果按规则输入便没问题,但是一但不按规则输出问题就多了,比如要是输入空值是,常常会退出或是运行不下去了,要么也会提示输入相同数字.另外若是输入相同的数字时,有时也会出现运行不下去的情况.希望帮忙多精简一下.

@ECHO off
cls
color 4a
ECHO                        猜数字游戏
ECHO ==========================================================
echo .     规则:系统随机生成4个不同的数字,然后进行猜解.   
echo .     若猜对1个数字,并且位置也正确,刚显示A
echo .      若猜对1个数字,但是位置不正确,刚显示B
echo .     例如,系统给出数字为6 8 2 4,若猜测为 6 2 1 4,则结果显示为2A1B.
echo .     另外若设置第一个数字为9999,刚显示答案,希望大家喜欢这个游戏^^_^^
pause
:loop
set /a a=%random%%%10
rem 设置第一个数字

rem 设置第二个数字
:b
set  /a b=%random%%%10
if %b%==%a% (goto b) else (goto c1)

rem 设置第三个数字
:c1
set /a c=%random%%%10
if %c%==%a%  (goto c1) else (goto c2)
:c2
if %c%==%b% (goto c1) else (goto d1)

rem 设置第四个数字
:d1
set /a d=%random%%%10
if %d%==%a%  (goto d1) else (goto d2)
:d2
if %d%==%b% (goto d1) else (goto d3)
:d3
if %d%==%c% (goto d1) else (goto next1)
:next1
echo 随机四位数已生成^^_^^请进行猜解

set k=1
:reset
:inputx1
set /p x1=请输入第一个数字:
rem x1的要求
rem 暗码 可得答案
if %x1%==9999 (goto anma) else (goto checkx1_00)
:checkx1_00
if %x1%==0 (goto rightx1) else (goto checkx1_0)
:checkx1_0
if %x1%==1 (goto rightx1) else (goto checkx1_1)
:checkx1_1
if %x1%==2 (goto rightx1) else (goto checkx1_2)
:checkx1_2
if %x1%==3 (goto rightx1) else (goto checkx1_3)
:checkx1_3
if %x1%==4 (goto rightx1) else (goto checkx1_4)
:checkx1_4
if %x1%==5 (goto rightx1) else (goto checkx1_5)
:checkx1_5
if %x1%==6 (goto rightx1) else (goto checkx1_6)
:checkx1_6
if %x1%==7 (goto rightx1) else (goto checkx1_7)
:checkx1_7
if %x1%==8 (goto rightx1) else (goto checkx1_8)
:checkx1_8
if %x1%==9 (goto rightx1) else (goto wrongx1)
:wrongx1
echo 数值输入错误,请重新输入 & goto inputx1

:rightx1
:inputx2
set /p x2=请输入第二个数字:
rem x2的要求
if %x2%==0 (goto rightx2) else (goto checkx2_0)
:checkx2_0
if %x2%==1 (goto rightx2) else (goto checkx2_1)
:checkx2_1
if %x2%==2 (goto rightx2) else (goto checkx2_2)
:checkx2_2
if %x2%==3 (goto rightx2) else (goto checkx2_3)
:checkx2_3
if %x2%==4 (goto rightx2) else (goto checkx2_4)
:checkx2_4
if %x2%==5 (goto rightx2) else (goto checkx2_5)
:checkx2_5
if %x2%==6 (goto rightx2) else (goto checkx2_6)
:checkx2_6
if %x2%==7 (goto rightx2) else (goto checkx2_7)
:checkx2_7
if %x2%==8 (goto rightx2) else (goto checkx2_8)
:checkx2_8
if %x2%==9 (goto rightx2) else (goto wrongx2)
:wrongx2
echo 数值输入错误,请重新输入 & goto inputx2

:rightx2
:inputx3
set /p x3=请输入第三个数字:
rem x2的要求
if %x3%==0 (goto rightx3) else (goto checkx3_0)
:checkx3_0
if %x3%==1 (goto rightx3) else (goto checkx3_1)
:checkx3_1
if %x3%==2 (goto rightx3) else (goto checkx3_2)
:checkx3_2
if %x3%==3 (goto rightx3) else (goto checkx3_3)
:checkx3_3
if %x3%==4 (goto rightx3) else (goto checkx3_4)
:checkx3_4
if %x3%==5 (goto rightx3) else (goto checkx3_5)
:checkx3_5
if %x3%==6 (goto rightx3) else (goto checkx3_6)
:checkx3_6
if %x3%==7 (goto rightx3) else (goto checkx3_7)
:checkx3_7
if %x3%==8 (goto rightx3) else (goto checkx3_8)
:checkx3_8
if %x3%==9 (goto rightx3) else (goto x3nul)
:x3nul
if %x3%=="" (goto wrongx3) else (goto rightx3)
:wrongx3
echo 数值输入错误,请重新输入 & goto inputx3

:rightx3
:inputx4
set /p x4=请输入第四个数字:
rem x4的要求
if %x4%==0 (goto inputright) else (goto checkx4_0)
:checkx4_0
if %x4%==1 (goto inputright) else (goto checkx4_1)
:checkx4_1
if %x4%==2 (goto inputright) else (goto checkx4_2)
:checkx4_2
if %x4%==3 (goto inputright) else (goto checkx4_3)
:checkx4_3
if %x4%==4 (goto inputright) else (goto checkx4_4)
:checkx4_4
if %x4%==5 (goto inputright) else (goto checkx4_5)
:checkx4_5
if %x4%==6 (goto inputright) else (goto checkx4_6)
:checkx4_6
if %x4%==7 (goto inputright) else (goto checkx4_7)
:checkx4_7
if %x4%==8 (goto inputright) else (goto checkx4_8)
:checkx4_8
if %x4%==9 (goto inputright) else (goto wrongx4)
:wrongx4
echo 数值输入错误,请重新输入 & goto inputx4


:inputright
rem 设置第二个数字
:x2
if %x2%==%x1% (goto x2) else (goto x3)

rem 设置第三个数字
:x3
if %x3%==%x1%  (goto error) else (goto x3_x2)
:x3_x2
if %x3%==%x2% (goto error) else (goto x4)

rem 设置第四个数字
:x4
if %x4%==%x1%  (goto error) else (goto x4_x2)
:x4_x2
if %x4%==%x2% (goto error) else (goto x4_x3)
:x4_x3
if %x4%==%x3% (goto error) else (goto next2)
:error
echo 输入数字有重复,请重新设置
goto reset
:next2
echo 你输入的数字是:%x1% %x2% %x3% %x4%
pause>nul

;rem 数据处理
set m=0
set n=0
if %x1%==%a% (set /a m+=1) else (goto checkx1_b)
:checkx1_b
if %x1%==%b% (set /a n+=1) else (goto checkx1_c)
:checkx1_c
if %x1%==%c% (set /a n+=1) else (goto checkx1_d)
:checkx1_d
if %x1%==%d% (set /a n+=1) else (goto check_x2)

:check_x2
if %x2%==%a% (set /a n+=1) else (goto checkx2_b)
:checkx2_b
if %x2%==%b% (set /a m+=1) else (goto checkx2_c)
:checkx2_c
if %x2%==%c% (set /a n+=1) else (goto checkx2_d)
:checkx2_d
if %x2%==%d% (set /a n+=1) else (goto check_x3)

:check_x3
if %x3%==%a% (set /a n+=1) else (goto checkx3_b)
:checkx3_b
if %x3%==%b% (set /a n+=1) else (goto checkx3_c)
:checkx3_c
if %x3%==%c% (set /a m+=1) else (goto checkx3_d)
:checkx3_d
if %x3%==%d% (set /a n+=1) else (goto check_x4)

:check_x4
if %x4%==%a% (set /a n+=1) else (goto checkx4_b)
:checkx4_b
if %x4%==%b% (set /a n+=1) else (goto checkx4_c)
:checkx4_c
if %x4%==%c% (set /a n+=1) else (goto checkx4_d)
:checkx4_d
if %x4%==%d% (set /a m+=1) else (goto result)
:result
if %m%==4 (goto allright) else (goto comeon)
:allright
echo 恭喜你猜对了^^_^^ 再来一把吧! 这是第%K%进行猜解
pause>nul
goto loop
:comeon
echo 你的成绩是:%m%A%n%B 要继续加油噢^^_^^ 这是第%k%次进行猜解
set /a k+=1
goto reset

rem 显示答案
:anma
echo 答案为:%a% %b% %c% %d%
goto reset

返回列表