Board logo

标题: [特效代码] 批处理游戏:Rush To Tolite(纯批实现) [打印本页]

作者: dengyuli    时间: 2014-11-16 12:26     标题: 批处理游戏:Rush To Tolite(纯批实现)

之前看过一个老贴,那上面做了一个动画,说是什么“人有仨急,狂奔厕所中……”,我看那个动画做得挺不错的,于是想把它做成游戏,
没想到真做成了,还挺难的,我自己稍不注意就会Game Over,现在我把这个游戏发给大家分享,也欢迎大家提出修改建议。(我一般在周六下午至周末中午在线。)
三方工具Ckey.exe是为了增加游戏体验,删除它也不要紧,只不过人物奔跑的速度会变快,每按一次方向操纵键都要按一次回车才会生效。
这个游戏小bug很多,也请大家注意。
下面是主程序代码(代码可能有点乱):
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. title Rush To Tolite
  4. mode con lines=21 cols=80
  5. set fx=q
  6. set ljq=0
  7. echo u>b
  8. if not exist ckey.exe start controlp.bat & goto:main
  9. start control.bat
  10. :main
  11. cls
  12. for /l %%a in (1,1,9) do (echo=)
  13. echo                      ●       Rush To Tolite       ●
  14. echo                     -│-                          -│-
  15. echo                      │/                          \│
  16. echo                     /      Press any key to play     \
  17. pause>nul
  18. echo=
  19. set /p level=1                         please select the level:
  20. goto:begin
  21. :begin
  22. set bgbl=1
  23. set bgbc=1
  24. :load
  25. cls
  26. echo p>a
  27. set x=4
  28. set y=1
  29. for /f "delims= tokens=* eol=; usebackq" %%a in ("data\map\level!level!_!bgbl!,!bgbc!.txt") do (
  30. set %%a
  31. )
  32. set "lft1= "
  33. set "rt1=/"
  34. set "lft2=/"
  35. set "rt2= "
  36. set ctr=1
  37. :start
  38. set /a bex=x-2
  39. set /a bx=x-1
  40. set /a rfx=x+1
  41. set /a afx=x+2
  42. set /a abx=x+3
  43. set /a fhx=x+4
  44. set /a rststr=70-afx
  45. set /a brststr=70-abx
  46. set /a ty=y-1
  47. set /a by=y+1
  48. set /a fy=y+2
  49. set /a gy=y+3
  50. if !fx!==q (
  51. set "lft1= "
  52. set "rt1=/"
  53. set "lft2=/"
  54. set "rt2= "
  55. ) else (
  56. set "lft1= "
  57. set "rt1=\"
  58. set "lft2=\"
  59. set "rt2= "
  60. )
  61. for /f "delims= tokens=* eol=y usebackq" %%a in ("data\map\level!level!_!bgbl!,!bgbc!.txt") do (
  62. set %%a
  63. )
  64. set /p ufx=<a
  65. if !ufx!==a set fx=h
  66. if !ufx!==d set fx=q
  67. if !ufx!==w goto :jump
  68. if !ufx!==r goto:load
  69. if !fx!==q (
  70. set /a x+=1
  71. ) else (
  72. set /a x-=1
  73. )
  74. if !fx!==q (
  75. if "!ln%fy%:~%abx%,1!" == "|" set /a x-=1
  76. if "!ln%by%:~%abx%,1!" == "|" set /a x-=1
  77. if "!ln%y%:~%abx%,1!" == "|" set /a x-=1
  78. ) else (
  79. if "!ln%fy%:~%bx%,1!" == "|" set /a x+=1
  80. if "!ln%by%:~%bx%,1!" == "|" set /a x+=1
  81. if "!ln%y%:~%bx%,1!" == "|" set /a x+=1
  82. )
  83. set ln=!ln%y%!
  84. set ln=!ln%y%:~0,%bx%! ●!ln:~%afx%,%rststr%!
  85. set ln%y%=!ln!
  86. set ln=!ln%by%!
  87. set ln=!ln%by%:~0,%bx%!^!lft%ctr%!│^!rt%ctr%!!ln:~%abx%,%brststr%!
  88. set ln%by%=!ln!
  89. set ln=!ln%fy%!
  90. set ln=!ln%fy%:~0,%bx%!^!rt%ctr%!  ^!lft%ctr%!!ln:~%abx%,%brststr%!
  91. set ln%fy%=!ln!
  92. for /l %%a in (1,1,20) do (
  93. echo ^!ln%%a!
  94. )
  95. for /l %%a in (1,1,300) do (ver>nul)
  96. if !fx!==q (
  97. if "!ln%gy%:~%bx%,1!" neq "-" (
  98.           goto :fall
  99.         ) else (
  100.           if !ctr!==1 (
  101.           set ctr=2
  102.           ) else (
  103.           set ctr=1
  104.           )
  105.         )
  106. ) else (
  107. if "!ln%gy%:~%rfx%,1!" neq "-" (
  108.           goto :fall
  109.         ) else (
  110.           if !ctr!==1 (
  111.           set ctr=2
  112.           ) else (
  113.           set ctr=1
  114.           )
  115.         )
  116. )
  117. if !fx!==q (
  118. if "!ln%gy%:~%rfx%,1!"=="]" set /a bgbl+=1 & set x=1 & goto:asd
  119. if "!ln%by%:~%afx%,1!"=="]" set /a bgbl+=1 & set x=1 & goto:asd
  120. if "!ln%y%:~%afx%,1!"=="]" set /a bgbl+=1 & set x=1 & goto:asd
  121. ) else (
  122. break
  123. )
  124. :asd
  125. if !fx!==h (
  126. if "!ln%gy%:~%bx%,1!"=="[" set /a bgbl-=1 & set x=68 & goto:fgh
  127. if "!ln%by%:~%bex%,1!"=="[" set /a bgbl-=1 & set x=68 & goto:fgh
  128. if "!ln%y%:~%bex%,1!"=="[" set /a bgbl-=1 & set x=68 & goto:fgh
  129. ) else (
  130. break
  131. )
  132. :fgh
  133. if "!ln%gy%:~%rfx%,1!"==" " goto:win
  134. if "!ln%by%:~%afx%,1!"==" " goto:win
  135. if "!ln%y%:~%afx%,1!"==" " goto:win
  136. if "!ln%by%:~%x%,1!"==" " goto:win
  137. if "!ln%y%:~%x%,1!"==" " goto:win
  138. if !y! geq 16 if "!ln%gy%:~%x%,1!"=="#" set y=1 & set /a bgbc+=1
  139. if !y! leq 3 if "!ln%ty%:~%x%,1!"=="#" set y=17 & set /a bgbc-=1
  140. goto:start
  141. :fall
  142. if "!ln%gy%:~%rfx%,1!"=="-" goto:start
  143. if "!ln%gy%:~%x%,1!"=="-" goto:start
  144. if "!ln%gy%:~%bx%,1!"=="-" goto:start
  145. if !y! geq 16 if "!ln%gy%:~%x%,1!"=="#" set y=1 & set /a bgbc+=1
  146. if "!ln%gy%:~%x%,1!"=="M" goto:die
  147. if !y! geq 20 goto:die
  148. set /a y+=1
  149. set /p ufx=<a
  150. set /a bex=x-2
  151. set /a bx=x-1
  152. set /a rfx=x+1
  153. set /a afx=x+2
  154. set /a abx=x+3
  155. set /a rststr=70-afx
  156. set /a brststr=70-abx
  157. set /a ty=y-1
  158. set /a by=y+1
  159. set /a fy=y+2
  160. set /a gy=y+3
  161. for /f "delims= tokens=* eol=y usebackq" %%a in ("data\map\level!level!_!bgbl!,!bgbc!.txt") do (
  162. set %%a
  163. )
  164. if !ufx!==d (
  165. if "!ln%fy%:~%rfx%,1!" neq "|" set /a x+=1 & set fx=q & goto:e
  166. if "!ln%by%:~%rfx%,1!" neq "|" set /a x+=1 & set fx=q & goto:e
  167. if "!ln%y%:~%x%,1!" neq "|" set /a x+=1 & set fx=q & goto:e
  168. ) else (
  169. break
  170. )
  171. if !ufx!==a (
  172. if "!ln%fy%:~%bx%,1!" neq "|" set /a x-=1 & set fx=h & goto:e
  173. if "!ln%by%:~%bx%,1!" neq "|" set /a x-=1 & set fx=h & goto:e
  174. if "!ln%y%:~%bx%,1!" neq "|" set /a x-=1 & set fx=h & goto:e
  175. ) else (
  176. break
  177. )
  178. :e
  179. if !fx!==q (
  180. if "!ln%gy%:~%rfx%,1!"=="]" set /a bgbl+=1 & set x=1 & goto:asdf
  181. if "!ln%by%:~%afx%,1!"=="]" set /a bgbl+=1 & set x=1 & goto:asdf
  182. if "!ln%y%:~%afx%,1!"=="]" set /a bgbl+=1 & set x=1 & goto:asdf
  183. ) else (
  184. break
  185. )
  186. :asdf
  187. if !fx!==h (
  188. if "!ln%gy%:~%bx%,1!"=="[" set /a bgbl-=1 & set x=68
  189. if "!ln%by%:~%bex%,1!"=="[" set /a bgbl-=1 & set x=68
  190. if "!ln%y%:~%bex%,1!"=="[" set /a bgbl-=1 & set x=68
  191. ) else (
  192. break
  193. )
  194. set ln=!ln%y%!
  195. set ln=!ln%y%:~0,%x%!●!ln:~%afx%,%rststr%!
  196. set ln%y%=!ln!
  197. set ln=!ln%by%!
  198. set ln=!ln%by%:~0,%bx%!^!lft%ctr%!│^!rt%ctr%!!ln:~%abx%,%brststr%!
  199. set ln%by%=!ln!
  200. set ln=!ln%fy%!
  201. set ln=!ln%fy%:~0,%bx%!^!rt%ctr%!  ^!lft%ctr%!!ln:~%abx%,%brststr%!
  202. set ln%fy%=!ln!
  203. for /l %%a in (1,1,20) do (
  204. echo ^!ln%%a!
  205. )
  206. for /l %%a in (1,1,400) do (ver>nul)
  207. goto:fall
  208. :jump
  209. echo p>a
  210. set /a ljq+=1
  211. if !y! leq 2 if "!ln%ty%:~%x%,1!"=="#" set y=17 & set /a bgbc-=1
  212. if "!ln%ty%:~%x%,1!" neq "-" if "!ln%ty%:~%x%,1!" neq "|" if "!ln%ty%:~%x%,1!" neq "M" set /a y-=1
  213. if "!ln%ty%:~%x%,1!"=="W" goto:die
  214. set /a bex=x-2
  215. set /a bx=x-1
  216. set /a rfx=x+1
  217. set /a afx=x+2
  218. set /a abx=x+3
  219. set /a rststr=70-afx
  220. set /a brststr=70-abx
  221. set /a ty=y-1
  222. set /a by=y+1
  223. set /a fy=y+2
  224. set /a gy=y+3
  225. for /f "delims= tokens=* eol=y usebackq" %%a in ("data\map\level!level!_!bgbl!,!bgbc!.txt") do (
  226. set %%a
  227. )
  228. set ln=!ln%y%!
  229. set ln=!ln%y%:~0,%x%!●!ln:~%afx%,%rststr%!
  230. set ln%y%=!ln!
  231. set ln=!ln%by%!
  232. set ln=!ln%by%:~0,%bx%!^!lft%ctr%!│^!rt%ctr%!!ln:~%abx%,%brststr%!
  233. set ln%by%=!ln!
  234. set ln=!ln%fy%!
  235. set ln=!ln%fy%:~0,%bx%!^!rt%ctr%!  ^!lft%ctr%!!ln:~%abx%,%brststr%!
  236. set ln%fy%=!ln!
  237. for /l %%a in (1,1,20) do (
  238. echo ^!ln%%a!
  239. )
  240. if !ljq! geq 7 set ljq=0 & goto:start
  241. for /l %%a in (1,1,400) do (ver>nul)
  242. goto:jump
  243. :die
  244. color 0c
  245. ping 127.1 -n 1 >nul
  246. color 0f
  247. for /f "delims= tokens=* eol=y usebackq" %%a in ("data\map\level!level!_!bgbl!,!bgbc!.txt") do (
  248. set %%a
  249. )
  250. for /l %%a in (1,1,20) do (
  251. echo ^!ln%%a!
  252. )
  253. ping 127.1 -n 3 >nul
  254. cls
  255. set x=4
  256. set y=1
  257. set fx=q
  258. echo p>a
  259. goto:start
  260. :win
  261. echo 终于找到厕所了……
  262. ping 127.1 -n 4 >nul
  263. cls
  264. for /l %%a in (1,1,9) do (echo=)
  265. echo                         恭喜过关!
  266. pause>nul
  267. echo e>b
  268. exit
复制代码
游戏的全部内容在附件里
游戏分3关,其中第1关是演示关卡
作者: bjc5233    时间: 2014-11-16 13:39

支持支持,好有创意啊,这是个好游戏啊!!!!
我试玩了会,虽然bug有一些,不过很有意思啊。
我都想也做个跑酷啦,哈哈O(∩_∩)O
作者: 0000    时间: 2016-11-4 20:21

可以使用choice.exe
代码有很大的优化空间。
作者: a2002    时间: 2017-6-29 15:51

可以不用control的,start /b就可以。。。
不过游戏思路非常好




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2