中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-05 22:23
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 刚学BAT - 猜数小游戏 查看 911 回复 8
楼 主 刚学BAT - 猜数小游戏 发表于 2007-09-29 10:47 ·  中国 浙江 宁波 鄞州区 电信
初级用户
积分 23
发帖 3
注册 2007-09-29 09:41
18年会员
UID 98537
性别 男
状态 离线
刚学批处理3天,不过幸好有点C的基础,学会了一些基本的东西。写了一个小游戏,请大家批评,呵呵。



@echo off
mode con: cols=50 lines=11
title 猜数字小游戏---by joppY
color 0a
setlocal enabledelayedexpansion

REM 初始界面
:begin
cls
echo.
echo ╭─────────────────╮
echo │ │
echo │ 猜 数 字 小 游 戏 │
echo │ │
echo │ By joppY │
echo │ │
echo ╰─────────────────╯
echo.

REM 产生随机数,并控制在0~100之间
set /a PUZZLE=%random%%%100
REM 初始化变量
set UserInput=""
set /a TIMES=0


REM 游戏例程
:game
set /p UserInput=请输入0~100之间的一个数字:
set /a TIMES+=1
REM 简单检测用户输入是否合法
echo %UserInput% | findstr "" || goto error
echo %UserInput% | findstr /I "" && goto error
if %UserInput% GTR 100 goto overflow
if %UserInput% LSS 0 goto underflow

REM echo %PUZZLE%

REM 判断用户输入
if %UserInput% GTR %PUZZLE% goto toobig
if %UserInput% LSS %PUZZLE% goto toosmall
if %UserInput% EQU %PUZZLE% goto bingo

:toobig
cls
echo.
echo 第【!TIMES!】次
echo ╭─────────────────╮
echo │ │
echo │ ∶( 太大了! │
echo │ │
echo ╰─────────────────╯
echo.
goto game

:toosmall
cls
echo.
echo 第【!TIMES!】次
echo ╭─────────────────╮
echo │ │
echo │ ∶( 太小了! │
echo │ │
echo ╰─────────────────╯
echo.
goto game

:bingo
cls
echo.
echo 第【!TIMES!】次
echo ╭─────────────────╮
echo │ │
echo │ ∶〕Bingo! 你猜中了! │
echo │ │
echo ╰─────────────────╯
echo.
color cf
ping -n 1 127.1>nul
color fc
ping -n 1 127.1>nul
color cf
ping -n 1 127.1>nul
color fc
ping -n 1 127.1>nul
color 0a
echo.
set /p UserChoice=退出请按q,继续请按其他键...
if /I %UserChoice%==q goto end
goto begin

REM 处理异常
:error
cls
echo.
echo 第【!TIMES!】次
echo ╭─────────────────╮
echo │ │
echo │ ∶( 拜托,请输入数字! │
echo │ │
echo ╰─────────────────╯
echo.
goto game
:overflow
cls
echo.
echo 第【!TIMES!】次
echo ╭─────────────────╮
echo │ │
echo │ ∶( 你给的数>100了! │
echo │ │
echo ╰─────────────────╯
echo.
goto game
:underflow
cls
echo.
echo 第【!TIMES!】次
echo ╭─────────────────╮
echo │ │
echo │ ∶( 你给的数<0了! │
echo │ │
echo ╰─────────────────╯
echo.
goto game

REM 退出
:end
cls
echo.
echo.
echo ╭─────────────────╮
echo │ │
echo │ 欢迎下次来玩,Bye Bye~ │
echo │ │
echo ╰─────────────────╯
echo.
ping -n 2 127.1>nul
exit



[ Last edited by joppy on 2007-9-29 at 10:50 AM ]
本帖最近评分记录 (共 3 条) 点击查看详情
评分人分数时间
wudixin96 +5 2007-09-29 10:48
lxmxn +8 2007-09-29 12:04
yoyodos +2 2007-09-29 22:41
2 发表于 2007-09-29 12:05 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
20年会员
UID 59080
状态 离线
牛人.

加分.
3 发表于 2007-09-29 19:49 ·  中国 浙江 宁波 鄞州区 电信
初级用户
积分 23
发帖 3
注册 2007-09-29 09:41
18年会员
UID 98537
性别 男
状态 离线
Originally posted by lxmxn at 2007-9-29 12:05 PM:
牛人.

加分.



多谢斑竹对新人的鼓励 :)
以后请多指教!
4 发表于 2007-09-29 20:59 ·  中国 广东 广州 白云区 电信
初级用户
★★
积分 132
发帖 59
注册 2007-08-23 21:24
18年会员
UID 95705
性别 男
来自 GuangZhou
状态 离线
joppy
可否这样
例如:
第一次猜 50 太大
第二次猜 30 太少
提示:数字介乎 30~50 之间
第三次猜40 太大
提示:数字介乎 30~40 之间
... ...
...
5 发表于 2007-09-29 21:48 ·  中国 广东 广州 白云区 电信
初级用户
★★
积分 132
发帖 59
注册 2007-08-23 21:24
18年会员
UID 95705
性别 男
来自 GuangZhou
状态 离线
实现方法
echo %TIMES% %UserInput%>>Temp.txt
太大
echo 数字介乎!From!~%UserInput%之间
太少
echo 数字介乎%UserInput%~!To!之间
问题就是这个 Form 跟 To 怎么在 Temp.txt 里面提取
这个我不懂
请高手接招
6 发表于 2007-09-29 22:48 ·  中国 北京 网联光通
初级用户
★★
积分 128
发帖 59
注册 2007-09-15 23:03
18年会员
UID 97496
性别 男
状态 离线
楼主你很棒!!
7 发表于 2007-09-29 22:53 ·  中国 广东 广州 白云区 电信
初级用户
★★
积分 132
发帖 59
注册 2007-08-23 21:24
18年会员
UID 95705
性别 男
来自 GuangZhou
状态 离线
那位高手可以完成这个问题
提示:答案在Form~To之间



@echo off
mode con: cols=50 lines=15
title 猜数字小游戏---by joppY
color 0a
setlocal enabledelayedexpansion
del Temp.txt

REM 初始界面
:begin
cls
echo.
echo ╭─────────────────╮
echo │ │
echo │ 猜 数 字 小 游 戏 │
echo │ │
echo │ By joppY │
echo │ │
echo ╰─────────────────╯
echo.

REM 产生随机数,并控制在0~100之间
set /a PUZZLE=%random%%%100
REM 初始化变量
set UserInput=""
set /a TIMES=0


REM 游戏例程
:game
set /p UserInput=请输入0~100之间的一个数字:
set /a TIMES+=1
echo 第%TIMES%次猜%UserInput%>>Temp.txt
for /f %%i in (Temp.txt) do set To=%%i
REM 简单检测用户输入是否合法
echo %UserInput% | findstr "[0-9]" || goto error
echo %UserInput% | findstr /I "[a-z]" && goto error
if %UserInput% GTR 100 goto overflow
if %UserInput% LSS 0 goto underflow
REM echo %PUZZLE%

REM 判断用户输入
if %UserInput% GTR %PUZZLE% goto toobig
if %UserInput% LSS %PUZZLE% goto toosmall
if %UserInput% EQU %PUZZLE% goto bingo

:toobig
cls
echo.
echo 第【!TIMES!】次
echo ╭─────────────────╮
echo │ │
echo │ ∶( 太大了! │
echo │ │
echo │ │
echo ╰─────────────────╯
echo 数字介乎 %To% ~ %UserInput% 之间
echo.
goto game

:toosmall
cls
echo.
echo 第【!TIMES!】次
echo ╭─────────────────╮
echo │ │
echo │ ∶( 太小了! │
echo │ │
echo │ │
echo ╰─────────────────╯
echo 数字介乎 %UserInput% ~ %To% 之间
echo.
goto game

:bingo
cls
echo.
echo 第【!TIMES!】次
echo ╭─────────────────╮
echo │ │
echo │ ∶〕Bingo! 你猜中了! │
echo │ │
echo │ │
echo ╰─────────────────╯
echo.
color cf
ping -n 1 127.1>nul
color fc
ping -n 1 127.1>nul
color cf
ping -n 1 127.1>nul
color fc
ping -n 1 127.1>nul
color 0a
echo.
set /p UserChoice=退出请按q,继续请按其他键...
if /I %UserChoice%==q del Temp.txt goto end
goto begin

REM 处理异常
:error
cls
echo.
echo 第【!TIMES!】次
echo ╭─────────────────╮
echo │ │
echo │ ∶( 拜托,请输入数字! │
echo │ │
echo │ │
echo ╰─────────────────╯
echo.
goto game
:overflow
cls
echo.
echo 第【!TIMES!】次
echo ╭─────────────────╮
echo │ │
echo │ ∶( 你给的数>100了! │
echo │ │
echo │ │
echo ╰─────────────────╯
echo.
goto game
:underflow
cls
echo.
echo 第【!TIMES!】次
echo ╭─────────────────╮
echo │ │
echo │ ∶( 你给的数<0了! │
echo │ │
echo │ │
echo ╰─────────────────╯
echo.
goto game

REM 退出
:end
cls
echo.
echo.
echo ╭─────────────────╮
echo │ │
echo │ 欢迎下次来玩,Bye Bye~ │
echo │ │
echo │ │
echo ╰─────────────────╯
echo.
del Temp.txt
ping -n 2 127.1>nul
exit
8 发表于 2007-10-01 15:52 ·  中国 浙江 宁波 鄞州区 电信
初级用户
积分 23
发帖 3
注册 2007-09-29 09:41
18年会员
UID 98537
性别 男
状态 离线
Originally posted by Nickey at 2007-9-29 08:59 PM:
joppy
可否这样
例如:
第一次猜 50 太大
第二次猜 30 太少
提示:数字介乎 30~50 之间
第三次猜40 太大
提示:数字介乎 30~40 之间
... ...
...


Nickey, 我今天上来看到你的回复,很感谢:)
然后改了一下代码,你看看是不是满足你的要求了:



@echo off
mode con: cols=50 lines=13
title 猜数字小游戏---by joppY
color 0a
setlocal enabledelayedexpansion

REM 初始界面
:begin
cls
echo.
echo ╭─────────────────╮
echo │ │
echo │ 猜数字小游戏 - 提示版 │
echo │ │
echo │ By joppY │
echo │ │
echo ╰─────────────────╯
echo.

REM 产生随机数,并控制在0~100之间
set /a PUZZLE=%random%%%100
REM 初始化变量
set UserInput=""
set /a TIMES=0
set /a TIPA=0
set /a TIPB=100


REM 游戏例程
:game
REM 提示用户输入
echo 请输入一个数字(TIPS:介于!TIPA! - !TIPB!之间哦):
set /p UserInput=
set /a TIMES+=1

REM 简单检测用户输入是否合法
echo %UserInput% | findstr "" || goto error
echo %UserInput% | findstr /I "" && goto error
if %UserInput% GTR 100 goto overflow
if %UserInput% LSS 0 goto underflow

REM echo %PUZZLE%

REM 判断用户输入
if %UserInput% GTR %PUZZLE% goto toobig
if %UserInput% LSS %PUZZLE% goto toosmall
if %UserInput% EQU %PUZZLE% goto bingo

:toobig
REM 产生输入提示的上限
if %UserInput% LSS %TIPB% set /a TIPB=%UserInput%
cls
echo.
echo 第【!TIMES!】次
echo ╭─────────────────╮
echo │ │
echo │ ∶( 太大了! │
echo │ │
echo ╰─────────────────╯
echo.
goto game

:toosmall
REM 产生输入提示的下限
if %UserInput% GTR %TIPA% set /a TIPA=%UserInput%
cls
echo.
echo 第【!TIMES!】次
echo ╭─────────────────╮
echo │ │
echo │ ∶( 太小了! │
echo │ │
echo ╰─────────────────╯
echo.
goto game

:bingo
cls
echo.
echo 第【!TIMES!】次
echo ╭─────────────────╮
echo │ │
echo │ ∶〕Bingo! 你猜中了! │
echo │ │
echo ╰─────────────────╯
echo.
color cf
ping -n 1 127.1>nul
color fc
ping -n 1 127.1>nul
color cf
ping -n 1 127.1>nul
color fc
ping -n 1 127.1>nul
color 0a
echo.
set /p UserChoice=退出请按q,继续请按其他键...
if /I %UserChoice%==q goto end
goto begin

REM 处理异常
:error
cls
echo.
echo 第【!TIMES!】次
echo ╭─────────────────╮
echo │ │
echo │ ∶( 拜托,请输入数字! │
echo │ │
echo ╰─────────────────╯
echo.
goto game
:overflow
cls
echo.
echo 第【!TIMES!】次
echo ╭─────────────────╮
echo │ │
echo │ ∶( 你给的数>100了! │
echo │ │
echo ╰─────────────────╯
echo.
goto game
:underflow
cls
echo.
echo 第【!TIMES!】次
echo ╭─────────────────╮
echo │ │
echo │ ∶( 你给的数<0了! │
echo │ │
echo ╰─────────────────╯
echo.
goto game

REM 退出
:end
cls
echo.
echo.
echo ╭─────────────────╮
echo │ │
echo │ 欢迎下次来玩,Bye Bye~ │
echo │ │
echo ╰─────────────────╯
echo.
ping -n 2 127.1>nul
exit



[ Last edited by joppy on 2007-10-1 at 03:54 PM ]
9 发表于 2007-10-01 18:15 ·  中国 广东 广州 白云区 电信
初级用户
★★
积分 132
发帖 59
注册 2007-08-23 21:24
18年会员
UID 95705
性别 男
来自 GuangZhou
状态 离线
呵呵 你做到了 蛮好
又学习了
不耻下问
我都会成为大鸟
论坛跳转: