中国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
来自 湖南==》广东
状态 离线
『楼 主』:  批处理猜数字游戏(共享版) 使用 LLM 解释/回答一下

周末,忙里偷闲,抽了点时间写了以下代码,当练手了。
欢迎各路朋友测试,指正

@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=请输入一个的数字:
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 楼』:   使用 LLM 解释/回答一下

测试了一下,有点问题。

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


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




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 3 楼』:   使用 LLM 解释/回答一下

测试:

数值在:4281 - 4283之间

输入几次4282

提示:大了




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




积分 846
发帖 247
注册 2006-10-27
来自 湖南==》广东
状态 离线
『第 4 楼』:   使用 LLM 解释/回答一下

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


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




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 5 楼』:   使用 LLM 解释/回答一下

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

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




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




积分 193
发帖 98
注册 2007-1-17
状态 离线
『第 6 楼』:   使用 LLM 解释/回答一下

呵呵////




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




积分 846
发帖 247
注册 2006-10-27
来自 湖南==》广东
状态 离线
『第 7 楼』:   使用 LLM 解释/回答一下

谢谢指正,已经修正.


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





积分 363
发帖 162
注册 2007-4-22
状态 离线
『第 8 楼』:   使用 LLM 解释/回答一下

真的不错!


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

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


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



论坛跳转: