标题: 批处理猜数字游戏(共享版)
[打印本页]
作者: youxi01
时间: 2007-6-18 00:04
标题: 批处理猜数字游戏(共享版)
周末,忙里偷闲,抽了点时间写了以下代码,当练手了。
欢迎各路朋友测试,指正
@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 ]
作者: lxmxn
时间: 2007-6-18 00:27
测试了一下,有点问题。
提示输入 2087-2089 之间的数字,然后输入2088 ,却还是提示输入错误,要重新输入。
作者: zh159
时间: 2007-6-18 00:32
测试:
数值在:4281 - 4283之间
输入几次4282
提示:大了
作者: youxi01
时间: 2007-6-18 00:35
不好意思,忘记设置猜中时的 提示 信息了,疏忽!
作者: zh159
时间: 2007-6-18 00:39
Quote: |
Originally posted by youxi01 at 2007-6-18 00:35:
不好意思,忘记设置猜中时的 提示 信息了,疏忽! |
|

怪不得我直接输入正确数字还是提示大了
作者: luowei14
时间: 2007-6-18 16:34
呵呵////
作者: youxi01
时间: 2007-6-18 17:00
谢谢指正,已经修正.
作者: clian76
时间: 2008-5-16 11:30
真的不错!