![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-12 11:05 |
共 47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,256 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » [原创]推箱子批处理游戏 |
| 可打印版本 12,796 / 63 |
| 第16楼 netbenton | 发表于 2009-09-05 23:51 |
| 银牌会员 发帖 752 积分 1,916 来自 广西 | |
|
回 exist:
你是说要从易到难,让玩家在不知不觉中就成了推箱子高手是吗? 做完善这些并不难,只不过是不知大家是否会认可这个游戏,完善后没有意义的话,就不会再做了。 其实做起来简单,完全都是体力活了: 1,难易先后顺序,只要把关级数据换个顺序就可以了; 2,增加关级,只要把地图做好,经附加的那个程序转换后,把关级数贴进去就可以了。 |
|
| 第17楼 523066680 | 发表于 2009-09-06 01:24 |
| 银牌会员 发帖 1,133 积分 2,362 | |
|
哈哈 没想到这个建议的。
本来的难度跳跃很不错的。我是说玩智力休闲游戏,不能心急, 游戏是放松的,如果玩到某关卡住了,可以先休息一下,有空再来。 反正也是记录了关卡的嘛. 其他的话就没什么了,唯一的是很难改的刷屏闪。 我觉得批处理能够写出适合批处理的游戏是很好的。 应该是有一部分人挺喜欢这个。 更新的事情,空闲的时候弄也行的啊,灵感不能用硬抽的吧? 不过玩家的回馈仍然是编写者最大的动力…… |
|
| 第18楼 slore | 发表于 2009-09-06 02:08 |
| 铂金会员 发帖 2,478 积分 5,212 | |
|
刚玩了下,很不错呵呵。
就是P处理的闪烁...不完美。。。 |
|
| 第19楼 netbenton | 发表于 2009-09-06 03:24 |
| 银牌会员 发帖 752 积分 1,916 来自 广西 | |
|
谢谢楼上slore意见,已经消除了屏幕闪烁的问题。
欢迎大家的使用,和提出宝贵意见。 |
|
| 第20楼 523066680 | 发表于 2009-09-06 03:50 |
| 银牌会员 发帖 1,133 积分 2,362 | |
|
我在cn-dos群里说回了你的帖子,他们说不知道,要我发链接。。。
看来是“推销”策略没做好…… 谦虚的帅哥如果不推销的话,很多人就看不到了。 |
|
| 第21楼 wangfangjian | 发表于 2009-09-06 09:12 |
| 中级用户 发帖 192 积分 274 | |
|
你太厉害 佩服
|
|
| 第22楼 lotus516 | 发表于 2009-09-06 10:56 |
| 高级用户 发帖 246 积分 551 | |
|
不兼容windows7 x64位,还有请吧第一次的代码放出,现在精简的实在难读!!
|
|
| 第23楼 523066680 | 发表于 2009-09-06 10:57 |
| 银牌会员 发帖 1,133 积分 2,362 | |
|
楼上的前辈 我刚在精华帖看到你…… 你就出现了
http://www.cn-dos.net/forum/viewthread.php?tid=25517 netbenton如果不介意的话 整理个个模块化的上来咯,我等擦亮眼睛…… 话说看官们如果真的想了解代码的话慢慢切也可以啊。 [ Last edited by 523066680 on 2009-9-6 at 11:00 ] |
|
| 第24楼 lotus516 | 发表于 2009-09-06 12:02 |
| 高级用户 发帖 246 积分 551 | |
Originally posted by 523066680 at 2009-9-6 10:57: 现在是没有那个时间哪! |
|
| 第25楼 523066680 | 发表于 2009-09-06 12:07 |
| 银牌会员 发帖 1,133 积分 2,362 | |
|
这个代码估计让人感兴趣的地方很多吧
楼主要解释也不是一时半会儿可以的啊 告知下是哪个部分的,看楼主能不能讲一下。 (顺便广告。我有些作品有解释,在签名的索引里面。) |
|
| 第26楼 5566ljlj | 发表于 2009-09-08 12:23 |
| 初级用户 发帖 27 积分 42 | |
|
真厉害!
|
|
| 第27楼 ldr2zjj | 发表于 2009-09-09 11:46 |
| 初级用户 发帖 95 积分 167 | |
|
太强大了~~今天在后面加一张超强的图~~结果显示不了~~好郁闷~~哪个设置了显示的行数的~我想改一下~
|
|
| 第28楼 ldr2zjj | 发表于 2009-09-09 12:53 |
| 初级用户 发帖 95 积分 167 | |
|
谁帮我把这个图加进去~~~我改好了~但是加进去显示不了全部~~~~
:囧g9g7a4 g5a5g3a4b2a a4gab3a6b4a9a ab2a3bab8ab9b2a abcd5ababcbabad2ab4c2aba ab2a2d3cb2abcabad2b2a2b3cba3 ab4ca2cabacbcbad2ab2a2cabcb2a abcacb3cb2abcb2ad2b3ab2cbcb2a a2b3a3cabad3a2d2ab2abcacb3a ga2ba2bab3ad2a3bdb3abcbcba3 a3bab2a9ab2ab2ab3a4 ab7a2b6ab2ab4a6 abcacacbab3cbcb2a9ab2a adcdb2cbab2cbcbcb7bcb3ca ad3a2b2a5ca9b2dadba a4b3a6bdbd2ab3a2ba3ba2 g3ab2db2cbab2dab2adaca2bdadb2a g3a3d2bcbabdb3dab4acb3cba g3a3c22bcbaba2b2a2dacbab2a4a ga3bdcdbab3a6b3a2ba2 gab2cd3ca5g4adacab2a gab3a2dcbag6a2b5a2 ga6b3ag6abdaca3 g6a5g6ab4a g9g8afba3 g9g8a4 |
|
| 第29楼 netbenton | 发表于 2009-09-09 12:57 |
| 银牌会员 发帖 752 积分 1,916 来自 广西 | |
|
批处理推箱子源码解释:
1、数据定义的紧凑格式的使用 先把变量定义集放到变量:(要注意分隔符是唯一的,这里用“;”号) set a=a=i75;b=i79;str=abc 这样变量a的值为:a=i75;b=i79;str=abc 利用预处理时变量值替换: set %a:;=&set % 相当于以下语句被执行: set a=i75&set b=i79&set str=abc 或者: set a=i75 set b=i79 set str=abc 如果要定义的变量很多,综合从占用空间和可读性上看,此法有明显的优势。 2、”推箱子“程序实现算法 1). 读取关级数据放到数组:lev(n) 改变n的值,即为改变关级,这里 n=%lev% 2). 把当前关地图数据还原并存到二维数组:r(n).(m), (一) 把值为坑“☆”的变量名r(n).(m),集放到变量ke,并把“☆”的个数存到变量ji,同时转为“★”; %ke%扩展后就是源值为坑“☆”的所有二维变量的实时的值了;只要%ke% 等于 !ji! 表明过关了 (二) 按行把二维变量名存为数组:r(n) %r(n)%扩展后即为第n行的所有二维数组的实时值 3). 变量ebuf作为显示缓存,所有要显示的内容全部存到ebuf,一次性用echo !ebuf!全部显示完成。 因为for 变更 %%a 在扩展后,会再次扩展!号变量,所以: for /l %%a in (1,1,!r!) do for %%b in ("!r%%a!") do set ebuf=!ebuf! %%~b!cr! 上面依次把:1到!r!行的变量名数组r(n)扩展后的值,全部存到显示缓存ebuf内,并且加上了换行符!cr! 4).首先定义好按上下左右所进行的操作: "c1=n-;c2=m-;c3=n+;c4=m+" 这样就可以通过下面代码: set/a sm=m,sn=n,!c%in%!=1,bm=m,bn=n,!c%in%!=1 分别取得按了 上/下/左/右 后,源点:sm.sn,步进一:bm.bn,步进二:m.n,三个坐标的值 for /f "tokens=1,2" %%a in ("!r%bn%.%bm%! !r%bn%.%bm%!!r%n%.%m%!") do ( 取出三个坐标的值并摆开为:(步进一 => %%a) (步进一+步进二 =>%%b) 例如:%%a=▓ %%b=▓∷ for %%c in ("!%%a!!%%b!") do ( %%a %%b 经再扩展后,组后到%%c, 接上例:!▓! =>空, !▓∷! =>▓-∷ 则: ▓-∷ => %%c for /f "tokens=1,2 delims=-" %%1 in (%%c) do ( 摆开为:%%1=▓,%%2=∷ 接下来就 if 判断了,根据各种情况把三个点和一个“大”站的!源!点的值重新调整 注意:有一点,如果%%c的值为空,如 %%b=▓■ 为时,则这个for将是空转,即连里面的if语句也不会被执行, 使得后面的 set/a m=sm,n=sn 被执行了 3、关级数据压缩与还原 1).压缩,因全角为双字节,用单字转换后可以少一半,如果 ▓=a,zf=▓,则:set zf=!%af%! 就可转过来了 如果不只一个连续的则在字母后跟个数字表示个数,超过9则另起一组,如:a11,则拆为a9a2 2).还原,引用:囧开头的好处, for /f "tokens=2* delims=囧" %%a in (%~nx0) do (set lev!n!=%%a&set/a n+=1) 这样在读取时可以减去了对其它非数据行的读取,加快了速度 同样的方法把字符转换回来,再把搂字作为for /l 计数重复即可全部转换 if "!tn:%%2=!" neq "!tn!" (set k=%%2) else (set k=1) for /l %%k in (1,1,!k!) do ( 上面的!k!即为字符个数 4、摆脱choice.exe 和 刷屏不闪 就是用debug.exe 来替了,但是这个是通常所有dos系统都会自带的,所以。。三方。。。 debug <%~nx0>nul 调用自身作为管道输入,第一行是出错的,真正有用的只有两行 e 100 cd 16 86 c4 b4 02 cd 10 b4 4C CD 21 写入代码 g 执行 这里面进行了键读取,把当前光标位置设为第一行,第一列,并把按键数据作为返回码到:%errorlevel% 定义:"a=i83=10;i1=7;i72=1;i80=3;i75=2;i77=4;i73=8;i81=9;i57=5;i79=6" 执行:set in=!i%errorlevel%! 就根据定义得到按键情况,如果示定义的则为空 平时写批处理要回到第一行显示时,只有用cls,然后再显示,显然速度也很快,还是觉得有点闪。 直接把光标重置到第一行,第一列,并没有清屏,再次显示时是在原来的基础上的,所以少了闪的感觉 如果看汇编源码,很简单,把debug <%~nx0>nul后面的>nul去掉,再在e 行和g 行间加入一行u 就可以了 5、玩家记录保存,与读取 这里是把记录存在批处理的第一行, 1).读取 set/p yg=< %~nx0 >nul 取第一行到变量 yg set yg=!yg:~13,52! set lev=%yg:@=&rem % 因为当前关记录和已过关的记录是以@为分隔的,这样可以只所@前面的给lev,@后面的被rem 掉了 set yg= !yg:* =! 只取已过关的数据,并且保持前后必须有空格 这样已经所当前关,及已过经过了的关的数据全部读取到变量了 2).保存 set a=a 10d`db "!lev!@!yg! "``w`q (echo %a:`=&echo;%)|debug %~nx0 >nul 经扩展为: (echo a 10d&echo;db "!lev!@!yg! "&echo;&echo;w&echo;q)|debug %~nx0 >nul 实际上是把以下命令行递给debug 去执行: a 10d db "!lev!@!yg! " w q 利用了debug 的a命令输入汇编指令时,可以用db 定义字符串,然后直接用W命令可以写打开的文件 并且批处理程序在执行过程中,是可以修改自身的 [ Last edited by netbenton on 2009-9-9 at 10:58 ] |
|
| 第30楼 netbenton | 发表于 2009-09-09 13:08 |
| 银牌会员 发帖 752 积分 1,916 来自 广西 | |
|
回28楼 地图的第一行必须是最多字符的
我又调试了一下,确实是支持不起这个超大地图,还有是显示不了那么宽, 是程序的一个Bug,有空再改进了。 谢谢你的测试 [ Last edited by netbenton on 2009-9-9 at 11:49 ] |
|
| 上一页 1 2 3 4 5 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |