Board logo

标题: 批处理猜数字游戏(共享版) [打印本页]

作者: 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
真的不错!