中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 批处理猜数字游戏(共享版)
作者:
标题: 批处理猜数字游戏(共享版) 上一主题 | 下一主题
youxi01
高级用户




积分 846
发帖 247
注册 2006-10-27
来自 湖南==》广东
状态 离线
『楼 主』:  批处理猜数字游戏(共享版)

周末,忙里偷闲,抽了点时间写了以下代码,当练手了。
欢迎各路朋友测试,指正
@echo off
::code by youxi01@cmd_xp
::由原作品修改而来(http://post.baidu.com/f?kz=137898059),优化了部分代码。

REM 定义屏幕显示方式
title 猜数字游戏(共享版)
color 1f
mode con: cols=50 lines=25

:start
cls
echo    ╔----------------------------------------╗  
echo    ┆             猜数字游戏共享版           ┆
echo    ┆                                        ┆
echo    ┆        说明:猜一个四位的随机数        ┆
echo    ┆                                        ┆
echo    ┆    优化了部分代码,并对输入进行了过滤  ┆
echo    ╚----------------------------------------╝  
echo.
echo          请选择游戏难度
echo     ------------------------------------------
echo        1、最低难度
echo        2、中等难度
echo        3、最高难度

REM 生成系统数字,默认为四位数。采用这种方式,是为了增加随机性。
set/a rnd=%random% %% 8+1          %=设置系统数字的第一位=%
set Snum=%rnd%%random:~-1%%random:~-1%%random:~-1%
set/a flag=20                       %=初始化猜数的次数=%

call :check 1 3 start

REM 初始显示内容;
set SS=1%time:~6,2%
set MM=1%time:~3,2%
set /a Min=1000,Max=9999,flag=20,stime=60,MM=%MM%-100,SS=%SS%-100

set TipInfo=未定
set life=%flag%
goto :%input%

:1 %=========容易等级==============%
cls
echo    ╔----------------------------------------╗  
echo    ┆             猜数字游戏共享版           ┆
echo    ┆                                        ┆
echo    ┆              难度等级:容易            ┆
echo    ┆                                        ┆
echo    ┆        数值在:%Min% - %Max%之间         ┆
echo    ┆                                        ┆
echo    ┆     提示:%TipInfo%      剩余生命:%life%       ┆
echo    ╚----------------------------------------╝
call :check %Min% %Max% 1
call :CheckNum
goto :1

:2 %==============中等难度======%
cls
echo    ╔----------------------------------------╗  
echo    ┆             猜数字游戏共享版           ┆
echo    ┆                                        ┆
echo    ┆              难度等级:中等            ┆
echo    ┆                                        ┆
echo    ┆      提示:%TipInfo%        生命:%life%        ┆
echo    ╚----------------------------------------╝  
call :check 1000 9999 2
call :CheckNum
goto :2

:3 %============最高难度,有时间限制===============%
cls
echo    ╔----------------------------------------╗  
echo    ┆             猜数字游戏共享版           ┆
echo    ┆                                        ┆
echo    ┆              难度等级:困难            ┆
echo    ┆                                        ┆
echo    ┆    提示:%TipInfo%        生命:%life%          ┆
echo    ┆                                        ┆
echo    ┆             还剩下%stime%秒                 ┆
echo    ╚----------------------------------------╝  
call :check 1000 9999 3
call :CheckNum

set SS_=1%time:~6,2%
set MM_=1%time:~3,2%
set/a MM_=%MM_%-100-%MM%,SS_=%SS_%-100-%SS%
set/a stime=60-%MM_%*60-%SS_%
if %stime% LEQ 0 echo 超时 & pause>nul & goto :start
set stime=0%stime% & set stime=%stime:~-2%%=============补齐对象=================%
goto :3

pause>nul

:check MinNum MaxNum Tag1
   set "input=" & echo.
   set /p input=请输入一个[ %1-%2 ]的数字:
   Rem ==============过滤特殊字符===============================
   echo "%input%" |findstr "[<>&~`@#$%^*()-+=_,.?/\|':;]" >nul && (
         echo 请输入 %1 到 %2 的纯数字 & pause>nul & goto :%3)
   Rem ==============验证是否是指定区间的纯数字=================
   set var=0
   set /a var=%input% >nul 2>nul
   if "%var%"=="0" echo 请输入 %1 到 %2 的纯数字 & pause>nul & goto :%3

   Rem ==========以上利用了set /a 的特殊性======================
   if %input% LSS %1 echo 请输入 %1 到 %2 的纯数字 & pause>nul & goto :%3
   if %input% GTR %2 echo 请输入 %1 到 %2 的纯数字 & pause>nul & goto :%3
   set/a flag-=1
   if %flag% LSS 1 echo 超出生命限制! & pause>nul & goto :start
   goto :eof

:CheckNum
   if %input% EQU %Snum% echo. & echo 恭喜你,猜中了!& pause>nul & exit
   if %input% GTR %Snum% (
      set TipInfo=大了
      if %input% LSS %Max% set Max=%input%)
   if %input% LSS %Snum% (
      set TipInfo=小了
      if %input% GTR %Min% set Min=%input%)
   set life=0%flag%
   set life=%life:~-2%
[ Last edited by youxi01 on 2007-6-18 at 12:41 AM ]

2007-6-18 00:04
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 2 楼』:  

测试了一下,有点问题。

提示输入 2087-2089 之间的数字,然后输入2088 ,却还是提示输入错误,要重新输入。

2007-6-18 00:27
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 3 楼』:  

测试:
   
数值在:4281 - 4283之间

输入几次4282

提示:大了



2007-6-18 00:32
查看资料  发短消息 网志   编辑帖子  回复  引用回复
youxi01
高级用户




积分 846
发帖 247
注册 2006-10-27
来自 湖南==》广东
状态 离线
『第 4 楼』:  

不好意思,忘记设置猜中时的 提示 信息了,疏忽!

2007-6-18 00:35
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 5 楼』:  



  Quote:
Originally posted by youxi01 at 2007-6-18 00:35:
不好意思,忘记设置猜中时的 提示 信息了,疏忽!

怪不得我直接输入正确数字还是提示大了



2007-6-18 00:39
查看资料  发短消息 网志   编辑帖子  回复  引用回复
luowei14
初级用户




积分 193
发帖 98
注册 2007-1-17
状态 离线
『第 6 楼』:  

呵呵////



这家伙很聪明 什么都没留下
2007-6-18 16:34
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
youxi01
高级用户




积分 846
发帖 247
注册 2006-10-27
来自 湖南==》广东
状态 离线
『第 7 楼』:  

谢谢指正,已经修正.

2007-6-18 17:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
clian76
中级用户





积分 363
发帖 162
注册 2007-4-22
状态 离线
『第 8 楼』:  

真的不错!

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

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


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



论坛跳转: