中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: [原创]猜数字游戏 上一主题 | 下一主题
Evangel
初级用户





积分 145
发帖 95
注册 2008-4-12
状态 离线
『楼 主』:  [原创]猜数字游戏

不知道是不是有人写过猜数字的游戏,反正一时兴起,就写了,同时祝大家小光棍节快乐……
@echo off
setlocal enabledelayedexpansion
title 猜数字游戏 By cn-DOS ev4n
cls
echo ^|^|^|^|^|^|^|^|^|^|^|^|^|^|^|^|^|^|^|^|^|^|^|^|^|^|^|^|^|^|^|^|
echo  ^| 猜数字游戏之小光棍节版    ^|
echo  ^|使用/?或者/hlp获得帮助信息 ^|
echo ^|^|^|^|^|^|^|^|^|^|^|^|^|^|^|^|^|^|^|^|^|^|^|^|^|^|^|^|^|^|^|^|
:again1
set "Number="
for /l %%n in (0,1,3) do (
set /a Num%%n=0
)
set check=0
set seeAns=0
::生成数字
set /a nn=0
:again
:failgen
set /a num=!random!%%9+1
set /a n_n=!nn!-1
for /l %%m in (0,1,!n_n!) do (
set /a mm=%%m
call set tmp_=%%Num!mm!%%
if "!tmp_!" equ "!num!" set check=1
)
if "!check!" equ "1" (
set check=0
goto failgen
)
set /a Num!nn!=!num!
call set tmp_=%%Num!nn!%%
set "Number=%Number%!tmp_!"
set /a nn=!nn!+1
if !nn! leq 3 (
goto again
)else goto out
:out
::生成字符串保存在Number中,数组Num[0-3]
set "history="
set /a count=0
set /a seeAns=0
:try
set /p GuessNum=输入相应您猜的字符串(1-9)(例如1234):
::特殊功能(看答案,查看历史,退出,帮助)
if "!GuessNum:~0,1!"=="/" (
if /I "!GuessNum:~1,1!"=="?" goto help
if /I "!GuessNum:~1,1!"=="r" goto restart
if /I "!GuessNum:~1,1!"=="e" goto exit
if /I "!GuessNum:~1,1!"=="a" goto answer
::历史记录
if /I "!GuessNum:~1,3!"=="his" (
set /a beg=0
set /a start=0
:start
call set his=%%history:~!start!,9%%
for /f "tokens=1,2 delims=," %%j in ("!his!") do (
echo   历史!beg! 输入%%j--^>输出%%k
)
set /a beg=!beg!+1
set /a start=!start!+10
if !beg! lss !count! goto start
goto try
)
::End历史记录
::答案
if /I "!GuessNum:~1,3!"=="ans" (
:answer
echo %Number%
set /a seeAns=1
goto try
)
::End答案
::退出
if /I "!GuessNum:~1,3!"=="ext" (
:exit
goto eof
)
if /I "!GuessNum:~1,3!"=="ret" (
:restart
goto again1
)
if /I "!GuessNum:~1,3!"=="hlp" (
:help
cls
echo 这里是帮助内容
echo 猜数字的小游戏已经被时代所掩盖,但是其在智力开发方面有很大的作用。可以促进逻辑思考能力的提高……好处多多
echo ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
echo                          帮助内容(2009.11.1)
echo ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫
echo      使用方法:
echo    每局程序会自动生成4个不重复的数字(1-9之间),
echo    无顺序排列玩家在提示输入信息出现后,
echo    输入自己猜测的四个数字(要求无重复,不要输入
echo    其他字符和0),程序会自动产生结果,例如:
echo    2A3B,则表示在玩家给出的数字钟有2个数字正确且位置
echo    正确,有3个数字猜测正确(包括2个位置正确的)
echo    假设程序生成的为2384,而玩家给出的是1234,则会表示为
echo    1A3B
echo    其他问题可使用下面的功能显示     
echo ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫                              
echo      功能键为:
echo        "/"+相应的内容,如:                  
echo    /ext,/e          退出(exit)                                 
echo    /his          查看历史输入内容,仅限当前一局  
echo    /?,/hlp      显示本帮助内容(help)
echo    /ans,/a          查看实际数字(answer)
echo    /ret,/r          重新开始一局游戏(确定放弃该局,不会问的)
echo ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛   
pause
goto try
)
)
::End特殊功能
set /a aa=0,bb=0
set /a count=!count!+1
::aa为位置正确的数量,bb为包含的数量
for /l %%q in (0,1,3) do (
set /a qq=%%q
call set TmpNum=%%GuessNum:~!qq!,1%%
call set qnum=%%Number:~!qq!,1%%
if "!TmpNum!" equ "!qnum!" set /a aa=!aa!+1
for /l %%p in (0,1,3) do (
set /a pp =%%p
call set pnum=%%Number:~!pp!,1%%
if "!TmpNum!" equ "!pnum!"  set /a bb=!bb!+1
)
)
if "!history!"=="" (
set history=!GuessNum!,!aa!A!bb!B
)else set history=!history!:!GuessNum!,!aa!A!bb!B
echo !aa!A!bb!B
if !aa! neq 4  (
if !bb! neq 4  goto try
)else (
if !bb! equ 4 (
if "!seeAns!"=="1" (
echo 切!看了答案的,不光彩
)else echo 恭喜啦!全猜对了!
)
)
set /p goon=是否继续(y/n)
if /I "!goon!"=="y" goto again1 else
goto eof
:eof
pause > nul


附件 1: GuessNumber.rar (2009-11-1 15:56, 1.76 K,下载次数: 3)
2009-11-1 15:56
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Evangel
初级用户





积分 145
发帖 95
注册 2008-4-12
状态 离线
『第 2 楼』:  

搜了一圈,才发现已经有好多个版本了……那就算是给论坛占点空间吧……

2009-11-1 16:03
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: