中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-08 13:24
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 批处理猜数字游戏(共享版) 查看 844 回复 7
楼 主 批处理猜数字游戏(共享版) 发表于 2007-06-18 00:04 ·  中国 广东 清远 联通
高级用户
★★
积分 846
发帖 247
注册 2006-10-27 12:03
19年会员
UID 68504
性别 男
来自 湖南==》广东
状态 离线
周末,忙里偷闲,抽了点时间写了以下代码,当练手了。
欢迎各路朋友测试,指正

@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 ]
2 发表于 2007-06-18 00:27 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
20年会员
UID 59080
状态 离线
测试了一下,有点问题。

提示输入 2087-2089 之间的数字,然后输入2088 ,却还是提示输入错误,要重新输入。
3 发表于 2007-06-18 00:32 ·  中国 广西 玉林 博白县 电信
金牌会员
★★★★
积分 3,687
发帖 1,467
注册 2005-08-08 12:00
20年会员
UID 44210
状态 离线
测试:

数值在:4281 - 4283之间

输入几次4282

提示:大了
4 发表于 2007-06-18 00:35 ·  中国 广东 清远 联通
高级用户
★★
积分 846
发帖 247
注册 2006-10-27 12:03
19年会员
UID 68504
性别 男
来自 湖南==》广东
状态 离线
不好意思,忘记设置猜中时的 提示 信息了,疏忽!
5 发表于 2007-06-18 00:39 ·  中国 广西 玉林 博白县 电信
金牌会员
★★★★
积分 3,687
发帖 1,467
注册 2005-08-08 12:00
20年会员
UID 44210
状态 离线
Originally posted by youxi01 at 2007-6-18 00:35:
不好意思,忘记设置猜中时的 提示 信息了,疏忽!

怪不得我直接输入正确数字还是提示大了
6 发表于 2007-06-18 16:34 ·  中国 江西 南昌 电信
初级用户
★★
积分 193
发帖 98
注册 2007-01-17 11:56
19年会员
UID 76803
性别 男
状态 离线
呵呵////
这家伙很聪明 什么都没留下
7 发表于 2007-06-18 17:00 ·  中国 广东 清远 电信
高级用户
★★
积分 846
发帖 247
注册 2006-10-27 12:03
19年会员
UID 68504
性别 男
来自 湖南==》广东
状态 离线
谢谢指正,已经修正.
8 发表于 2008-05-16 11:30 ·  中国 重庆 奉节县 电信
中级用户
★★
积分 363
发帖 162
注册 2007-04-22 21:31
19年会员
UID 86104
性别 男
状态 离线
真的不错!
论坛跳转: