中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-15 13:49
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [原创]纯批处理版贪吃蛇 查看 7,759 回复 34
楼 主 [原创]纯批处理版贪吃蛇 发表于 2008-10-02 09:40 ·  中国 广东 揭阳 电信
银牌会员
★★★★
SuperCleaner
积分 2,362
发帖 1,133
注册 2008-02-02 21:36
UID 110072
性别 男
状态 离线
在bathome发的帖子:
http://bbs.bathome.cn/viewthread.php?tid=2038&extra=page%3D1&frombbs=1有待完善,直接打开open.bat
运行时直接打开open.bat
控制说明:wasd分别为方向,一开始是默认暂停(p),按任意键开始游戏
当按p暂停的时候 也是按任意键开始游戏的。



对思路进行了分析 见23楼
----------------open.bat--------------

@echo off
start direction.bat
title made by 523066680
:action
setlocal enabledelayedexpansion
mode con cols=65 lines=35
for /l %%a in (1,1,60) do (set space= !space!)
for /l %%a in (1,1,30) do (set L%%a=%space%)
set /a line=15,col=29,i=0,long=9
:loop
:::::::::::::::控制蛇长,判断是否建立食物部分
if %i% lss %long% (set /a i+=1) else (set i=1)
if defined cut%i% (
if not defined dot (call :dot)
!cut%i%:"=!
set "L%a%=!L%a%:~0,%b%! !L%a%:~%c%!"
set "%a%_%b%="
)
:::::::显示
cls
echo, %space: =_%__
for /l %%a in (1,1,30) do echo,│!L%%a!│
echo, %space: =-%--
echo,- 分数:%fen%00
for /l %%a in (1,1,3) do (ping -n 1 127.0>nul)
::::::::::::::::读取数据,分析部分
:typex
set /p way=<x
if %way%==r (endlocal &goto :action)
if %way%==q (exit)
if %way%==p (ping -n 2 127.0>nul&goto :loop)
if %way%==w (set /a line-=1)
if %way%==s (set /a line+=1)
if %way%==a (set /a col-=1)
if %way%==d (set /a col+=1)
if defined %line%_%col% (goto :gameover)
if %line% equ 31 (goto :gameover)
if %line% equ 0 (goto :gameover)
if %col% equ -1 (goto :gameover)
if %col% equ 60 (goto :gameover)
:::::::::::::::设置部分,描点,记录点坐标。
set /a C2=col+1
set "L%line%=!L%line%:~0,%col%!*!L%line%:~%C2%!"
set cut%i%="set /a a=%line%,b=%col%,c=%C2%"
set "%line%_%col%=exist"
if "%line%_%col%"=="%dotl%_%dotc%" (set /a long+=1,fen+=1 &set dot=)
goto :loop
::::::::::::建立食物O的调用部分
:dot
set /a dotl=%random%%%28+2,dotc=%random%%%58+1
if defined %dotl%_%dotc% (goto :dot)
set dot=%dotl%_%dotc%
set /a dotc2=dotc+1
set "L%dotl%=!L%dotl%:~0,%dotc%!O!L%dotl%:~%dotc2%!"
goto :eof
:gameover
color 0a
ping -n 2 127.0>nul
cls
echo,game over 在控制台按q结束游戏,r再玩一次
ping -n 3 127.0>nul
echo,p>x
endlocal
goto :action

--------------------------direction.bat------------------

@echo off &mode con cols=35 lines=8
setlocal enabledelayedexpansion
echo,p>x
for %%a in (w a s d p q) do (set de%%a=defined)
set _w=s
set _s=w
set _a=d
set _d=a
set notequ=have
:a
cls
set /p input="w a s d q(退出) r(重来) p(暂停):"
if "%input%"=="q" (
echo,q>x
exit
)
if "%input%"=="r" (
echo,r>x
)
if "%input%"=="%notequ%" (goto :a)
if not defined de%input% (goto :a)
set notequ=!_%input%!
echo %input%>x
goto :a


[ Last edited by 523066680 on 2009-1-10 at 11:22 ]
本帖最近评分记录 (共 9 条) 点击查看详情
评分人分数时间
BC +4 2008-10-02 09:46
everest79 +15 2008-10-02 10:06
slore +16 2008-10-02 11:26
bat-zw +20 2008-10-02 11:39
moniuming +8 2008-10-02 15:15
pusofalse +15 2008-10-02 15:31
s11ss +11 2008-10-02 19:59
huahua0919 +15 2008-10-07 17:57
wxcute +4 2008-10-11 09:41
附件
GreedSnake.rar (1.46 KiB, 下载次数: 161)
2 发表于 2008-10-02 09:43 ·  中国 广东 江门 电信
中级用户
★★
积分 338
发帖 175
注册 2007-10-21 15:30
UID 100351
性别 男
状态 离线
SF....
真强大,有点回到红白机的感觉了...一个控制台,一个演示,要是能将wasd做到通过键盘的上下左右来实时控制就好了.

[ Last edited by BC on 2008-10-2 at 09:46 ]
3 发表于 2008-10-02 09:50 ·  中国 广东 江门 电信
中级用户
★★
积分 338
发帖 175
注册 2007-10-21 15:30
UID 100351
性别 男
状态 离线
好像有点问题,如果初始化的时候食物在蛇的正明就会直接game over...
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
523066680 +5 2008-10-03 13:21
4 创意不错~ 发表于 2008-10-02 11:31 ·  中国 陕西 西安 电信
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
UID 79003
性别 男
状态 离线
choice能识别字符麽?

不能的话的那段DEBUG了
S smile 微笑,L love 爱,O optimism 乐观,R relax 放松,E enthusiasm 热情...Slore
5 发表于 2008-10-02 16:16 ·  中国 广东 佛山 电信
初级用户
★★
积分 193
发帖 98
注册 2007-01-17 11:56
UID 76803
性别 男
状态 离线
嘿嘿..有意思..学习了
这家伙很聪明 什么都没留下
6 发表于 2008-10-02 17:06 ·  中国 广东 佛山 电信
初级用户
积分 46
发帖 21
注册 2006-12-25 14:28
UID 74536
性别 男
来自 西安
状态 离线
强贴
7 发表于 2008-10-03 12:35 ·  中国 广东 揭阳 电信
银牌会员
★★★★
SuperCleaner
积分 2,362
发帖 1,133
注册 2008-02-02 21:36
UID 110072
性别 男
状态 离线
哈 我再多十分就餐1000分了
8 发表于 2008-10-03 12:56 ·  中国 陕西 西安 电信
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
UID 79003
性别 男
状态 离线
高兴的……1000还早呢
S smile 微笑,L love 爱,O optimism 乐观,R relax 放松,E enthusiasm 热情...Slore
9 发表于 2008-10-03 13:01 ·  中国 广东 揭阳 电信
银牌会员
★★★★
SuperCleaner
积分 2,362
发帖 1,133
注册 2008-02-02 21:36
UID 110072
性别 男
状态 离线
嘿嘿 灌水不就可以拉 哦对了 1楼的代码有更新。

关于提出的问题暂时解决。 控制速度部分
查找这句 for /l %%a in (1,1,3) do (ping -n 1 127.0>nul)可自己调试速度

[ Last edited by 523066680 on 2008-10-3 at 13:26 ]
10 发表于 2008-10-03 15:23 ·  中国 福建 泉州 电信
银牌会员
★★★
积分 1,276
发帖 469
注册 2002-12-23 13:00
UID 586
性别 男
来自 福建泉州
状态 离线
用SET /P反应速度慢了些不好玩.
用choice玩起来更爽

@echo off &mode con cols=35 lines=8
setlocal enabledelayedexpansion
echo,p>x
for %%a in (w a s d p q) do (set de%%a=defined)
set _w=s
set _s=w
set _a=d
set _d=a
set notequ=have
:a
cls
choice /c wasdqr /n /m "w a s d q(退出) r(重来):"
if errorlevel 1 set input=w
if errorlevel 2 set input=a
if errorlevel 3 set input=s
if errorlevel 4 set input=d
if errorlevel 5 set input=q
if errorlevel 6 set input=r
if "%input%"=="q" (
echo,q>x
exit
)
if "%input%"=="r" (
echo,q>x
ping -n 2 127.0>nul
echo,p>x
call open.bat
)
if "%input%"=="%notequ%" (goto :a)
if not defined de%input% (goto :a)
set notequ=!_%input%!
echo %input%>x
goto :a
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
523066680 +8 2008-10-07 17:24
QQ:366840202
http://chenall.net
11 发表于 2008-10-07 17:24 ·  中国 广东 揭阳 电信
银牌会员
★★★★
SuperCleaner
积分 2,362
发帖 1,133
注册 2008-02-02 21:36
UID 110072
性别 男
状态 离线
大哥顺便把choice发上来哈 感谢您的支持
12 Re 11楼 发表于 2008-10-07 17:54 ·  中国 重庆 九龙坡区 电信
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
UID 89899
性别 男
状态 离线
13 发表于 2008-10-09 23:53 ·  中国 陕西 安康 电信
新手上路
积分 10
发帖 5
注册 2008-10-09 23:11
UID 127932
性别 男
状态 离线
..有意思..学习了
14 发表于 2008-10-10 18:26 ·  中国 北京 电信
新手上路
积分 2
发帖 1
注册 2008-10-07 17:10
UID 127673
性别 男
状态 离线
真有意思,学习了
15 发表于 2008-10-10 18:53 ·  中国 福建 福州 电信
初级用户
积分 52
发帖 36
注册 2008-10-10 18:24
UID 128013
性别 男
状态 离线
为什么我一运行就是提示“r(从来)”?
论坛跳转: