找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 33622|回复: 10

[游戏娱乐] 新推箱子bat,升级至3.0版

[复制链接]
发表于 2016-9-5 00:01:31 | 显示全部楼层 |阅读模式
[2016/9/11]升级Version3.0
新版推箱子升级Version3.0。集成了超难度的50多关,采用动态显示压缩算法,绘图性能是首版的5倍。增加非常多的辅助按键功能,增加自动化脚本。F键定义为保存用户自动化按键并退出;Q为退一步;R重置;M为设置一个记录点,然后当你走死后,直接按E键退回到M记录的锚点,非常有助于冲破难关。G为自动化脚本,按G后,自动推箱子。模块重复利用率极高,逻辑度非常复杂,已经无法继续增加新功能了。

  1. WSAD 上下左右
  2. Q退步,M设置锚点,E恢复至锚点,R重置
  3. N下一关,F保存用户数据,G开启自动化脚本
复制代码
-----------------------------------------------------------------------------------------------------------------------------------------
[2016/9/5]首版Version1.0
研究了下推箱子,我用大量if取代for去完成运算和构图,将其分解为模块化的单元任务,逐个构造,最后融成一个可用的批处理。考虑了很多情况,所以既可单文件运行,也可读取同目录下的MapData.box文件运行。数千关,随机挑选。还有很多隐藏功能,比如可以设置F1=1,开启防闪显示。WSAD上下左右,N下一关,R重走。时间仓促,漏洞以后完善。当然此脚本稍加修改基本可以实现走迷宫、俄罗斯方块、贪吃蛇等的实现,只要替换数据处理部分即可。想玩特殊关卡的请下载地图附件
链接: https://pan.baidu.com/s/1QoICjZX_XkxFa7CILHw_gw?pwd=nk8q

兼容标准box地图文件,自动生成地图,机选可能会眼花。
  1. ::**************推箱子使用说明**************
  2. REM WSAD 上下左右
  3. REM Q退步,M设置锚点,E恢复至锚点
  4. REM R重置,N下一关,F保存用户数据
  5. REM G开启自动推演
  6. cls

  7. ::**************Happy's 推箱子**************
  8. @echo off&title
  9. mode con cols=80 lines=22
  10. REM 窗体配色
  11.   color 0F
  12. ::color F0

  13. REM 默认皮肤
  14. ::set "ELEMENTS=○□○╳▓▓我踩"
  15.   set "ELEMENTS=○□○╳▓■我踩"
  16. ::set "ELEMENTS=○■○╳▓◆我★"
  17. ::set "ELEMENTS=○■○╳箱◆大踩"
  18. ::set "ELEMENTS=○■○╳▓□我踩"

  19. REM 防闪开关
  20.   set F1=0
  21. ::set F1=1
  22. REM 自动脚本
  23. set AUTO=0
  24. ::set AUTO=1

  25. REM 计数面板
  26. set "READM1=POSITION:"
  27. set "READM3=STEPS:"
  28. set "READM5=ANCHOR:"
  29. set "READM7=MADE BY HAPPY"
  30. set "READM8=  Version3.0"

  31. ::****************先导程序******************
  32. setlocal enabledelayedexpansion
  33. for /l %%i in (1,1,365) do (
  34.         set "SPACE=!SPACE!"
  35. )
  36. for /l %%N in (0,1,7) do (
  37.         set P%%N=!ELEMENTS:~%%N,1!
  38. )
  39. if exist "%~dp0UserData.ini" (
  40.         set/a "AUTO=1,Mark8=1"
  41.         set "ReadFile=%~dp0UserData.ini"
  42. ) else (
  43.         set "ReadFile=%~f0"
  44. )
  45. for /f "tokens=1-5" %%A in ('findstr /rc:"^ *[0-9][0-9]* *[0-9][0-9]* *[0-7][0-7].*" "%ReadFile%"') do (
  46.         set "LINES="
  47.         for /l %%i in (1,1,%%A) do (set "LINES=!LINES!--")
  48.         set/a "MapWidth=%%A,MapHeight=%%B,n+=1"
  49.         if not "%%E"=="" (set/a n=%%E)
  50.         set "HEAD=!LINES![LEVEL !n!]"
  51.         set "MapData=%%C"
  52.         set "MapDataBak=%%C"
  53.         set "StepBak=%%D"
  54.         call :MAIN
  55. )
  56. exit


  57. ::****************主体程序******************
  58. :MAIN
  59. setlocal
  60. if !n! leq 2 (set "AUTO=1") else (set "AUTO=0")
  61. if defined Mark8 (set "AUTO=1")
  62. if !AUTO! equ 1 (set "StepStr=!StepBak!")
  63. set/a "Check1=0,Mark2=0"
  64. if !F1! equ 1 cls

  65. REM 构建显存
  66. :DISRAM
  67. for /l %%j in (1,1,%MapHeight%) do (
  68.         set "DISPLAY[%%j]="
  69.         set "tmp=!MapData:~0,%MapWidth%!"
  70.         for /l %%i in (1,1,%MapWidth%) do (
  71.                 set "POINT[%%i][%%j]=!tmp:~0,1!"
  72.                 set tmp=!tmp:~1!
  73.                 if !POINT[%%i][%%j]! equ 6 (set/a "X=%%i,Y=%%j")
  74.                 for %%P in (!POINT[%%i][%%j]!) do (
  75.                         set "DISPLAY[%%j]=!DISPLAY[%%j]!!P%%P!"
  76.                 )
  77.         )
  78.         set "MapData=!MapData:~%MapWidth%!"
  79. )

  80. :ANCHOR
  81. set "READM2=  (!X!,!Y!)  !AUTO!"
  82. set "READM4=  !steps!  "
  83. set "READM6=  [!MarkSteps!]  "
  84. if !F1! equ 1 (2>nul echo         !SPACE!) else cls

  85. REM 绘图引擎
  86. echo;!HEAD!
  87. for /l %%j in (1,1,%MapHeight%) do (
  88.         echo;!DISPLAY[%%j]:○= !│!READM%%j!
  89. )
  90. echo;!LINES!

  91. REM 检查过关
  92. if not defined Mark2 (
  93.         if !POINT[%X%][%Y%]! neq 7 (
  94.                 for /l %%j in (1,1,%MapHeight%) do (
  95.                         for %%P in (!P3!) do (
  96.                                 if not "!DISPLAY[%%j]:%%P=!"=="!DISPLAY[%%j]!" (set Check1=1)
  97.                         )
  98.                 )
  99.                 if not defined Check1 (       
  100.                         echo 恭喜过关!
  101.                         choice /t 1 /d y /n >NUL
  102.                         goto NEXT
  103.                 ) else (
  104.                         set "Check1="
  105.                 )
  106.         )
  107. )

  108. REM 按键反馈
  109. :CHOISE
  110. set Xp=!X!
  111. set Yp=!Y!
  112. if !AUTO! equ 1 (
  113.         if "!StepStr:~%steps%,1!"=="1" (set/a Y-=1)
  114.         if "!StepStr:~%steps%,1!"=="2" (set/a Y+=1)
  115.         if "!StepStr:~%steps%,1!"=="3" (set/a X-=1)
  116.         if "!StepStr:~%steps%,1!"=="4" (set/a X+=1)
  117.         if "!StepStr:~%steps%,1!"=="D" (
  118.                 if defined Mark6 (set "Mark6=")
  119.                 for /f "tokens=1 delims=D" %%a in ("!StepStr!") do (
  120.                         set "StepStr=%%a"
  121.                 )
  122.                 set/a AUTO=0
  123.                 goto CHOISE
  124.         )
  125.         if defined Mark6 (choice /t 1 /d y /n >NUL)
  126.         goto ANCHOR2
  127. )
  128. choice /C WSADRNQMEFG >NUL
  129. if %errorlevel% equ 1 (set/a Y-=1)
  130. if %errorlevel% equ 2 (set/a Y+=1)
  131. if %errorlevel% equ 3 (set/a X-=1)
  132. if %errorlevel% equ 4 (set/a X+=1)
  133. if %errorlevel% equ 5 (
  134.         endlocal
  135.         goto MAIN
  136. )
  137. if %errorlevel% equ 6 (
  138.         goto NEXT
  139. )
  140. if %errorlevel% equ 7 (
  141.         set/a Mark4+=1
  142.         if !Mark4! equ 2 (
  143.                 set/a "X=Xp,Y=Yp"
  144.                 set "Mark4=1"               
  145.                 goto CHOISE
  146.         )
  147.         set/a "Xp=X-dx,Yp=Y-dy,1/(dx+dy)" 2>NUL||goto CHOISE
  148.         set/a "POINT[!Xp!][!Yp!]=POINTv0,POINT[!X!][!Y!]=POINTv1,POINT[!Xf!][!Yf!]=POINTv2"
  149.         set/a "Mark3=1,steps-=1,Mark7=1"
  150.         set "StepStr=!StepStr:~0,-1!"
  151.         goto DISGPU
  152. )
  153. if %errorlevel% equ 8 (
  154.         set/a "Mark5=1,MarkSteps=steps"
  155.         for /l %%j in (1,1,%MapHeight%) do (
  156.                 for /l %%i in (1,1,%MapWidth%) do (
  157.                         set "POINT_M[%%i][%%j]=!POINT[%%i][%%j]!"
  158.                 )
  159.         )
  160.         goto CHOISE
  161. )
  162. if %errorlevel% equ 9 (
  163.         if not defined Mark5 (goto CHOISE)
  164.         for /l %%j in (1,1,%MapHeight%) do (
  165.                 set "tmp="
  166.                 for /l %%i in (1,1,%MapWidth%) do (
  167.                         set "tmp=!tmp!!POINT_M[%%i][%%j]!"
  168.                 )
  169.                 set "MapData=!MapData!!tmp!"
  170.         )
  171.         set/a "steps=MarkSteps.Mark7=1"
  172.         set "StepStr=!StepStr:~0,%steps%!"
  173.         goto DISRAM
  174. )
  175. if %errorlevel% equ 10 (
  176.         echo %MapWidth% %MapHeight% %MapDataBak% %StepStr%D !n!>"%~dp0UserData.ini"
  177.         exit
  178. )
  179. if %errorlevel% equ 11 (
  180.         if defined Mark8 (
  181.                 echo 没有演示文件!
  182.                 choice /t 1 /d y /n >NUL
  183.                 set "Mark8="
  184.                 goto CHOISE
  185.         )
  186.         if "!StepBak!"=="" (
  187.                 echo 没有演示文件!
  188.                 choice /t 1 /d y /n >NUL
  189.                 goto CHOISE
  190.         )
  191.         set "MapData=!MapDataBak!"
  192.         set "StepStr=!StepBak!"
  193.         set/a "AUTO=1,Mark6=1,steps=0"
  194.         goto DISRAM
  195. )

  196. :ANCHOR2
  197. REM 增量坐标
  198. set/a "dx=X-Xp,dy=Y-Yp,Xf=X+dx,Yf=Y+dy"
  199. set POINTv0=!POINT[%Xp%][%Yp%]!
  200. set POINTv1=!POINT[%X%][%Y%]!
  201. set POINTv2=!POINT[%Xf%][%Yf%]!
  202. set "Mark4="

  203. REM 数据一次处理
  204. if !POINTv1! equ 1 (
  205.                 set "Mark1=1"               
  206. )
  207. if !POINTv1! equ 2 (
  208.                 set/a "POINT[!X!][!Y!]=6
  209.                 set "Mark2=1"               
  210. )
  211. if !POINTv1! equ 3 (
  212.                 set/a "POINT[!X!][!Y!]=7"
  213.                 set "Mark2=1"               
  214. )
  215. if !POINTv1! equ 4 (
  216.                 if !POINTv2! equ 1 (set "Mark1=1")
  217.                 if !POINTv2! equ 2 (
  218.                         set "Mark2=1"
  219.                         set/a "POINT[!X!][!Y!]=6,POINT[!Xf!][!Yf!]=4"
  220.                 )
  221.                 if !POINTv2! equ 3 (
  222.                         set "Mark2=1"
  223.                         set/a "POINT[!X!][!Y!]=6,POINT[!Xf!][!Yf!]=5"               
  224.                 )
  225.                 if !POINTv2! equ 4 (set "Mark1=1")
  226.                 if !POINTv2! equ 5 (set "Mark1=1")       
  227. )
  228. if !POINTv1! equ 5 (
  229.                 if !POINTv2! equ 1 (set "Mark1=1")
  230.                 if !POINTv2! equ 2 (
  231.                         set "Mark2=1"
  232.                         set/a "POINT[!X!][!Y!]=7,POINT[!Xf!][!Yf!]=4"
  233.                 )
  234.                 if !POINTv2! equ 3 (
  235.                         set "Mark2=1"
  236.                         set/a "POINT[!X!][!Y!]=7,POINT[!Xf!][!Yf!]=5"
  237.                        
  238.                 )
  239.                 if !POINTv2! equ 4 (set "Mark1=1")
  240.                 if !POINTv2! equ 5 (set "Mark1=1")
  241. )
  242.        
  243. REM 数据二次处理
  244. if defined Mark1 (
  245.         set/a "X=Xp,Y=Yp,Mark4=1"
  246.         set "Mark1="
  247.         goto CHOISE
  248. )
  249. set/a steps+=1
  250. if defined Mark2 (
  251.         if !POINTv0! equ 7 (
  252.                 set/a "POINT[!Xp!][!Yp!]=3"
  253.         ) else (
  254.                 set "POINT[!Xp!][!Yp!]=2"
  255.         )
  256.         set "Mark2="
  257. )

  258. REM 绘图加速引擎
  259. :DISGPU
  260. if !dy! equ 0 (
  261.         if not defined Mark7 (
  262.                 if !dx! gtr 0 (
  263.                         set "StepStr=!StepStr!4"
  264.                 ) else (
  265.                         set "StepStr=!StepStr!3"
  266.                 )
  267.         ) else (set "Mark7=")
  268.        
  269.         set "DISPLAY[%Yp%]="
  270.         for /l %%i in (1,1,%MapWidth%) do (
  271.                 for %%P in (!POINT[%%i][%Y%]!) do (
  272.                         set DISPLAY[%Y%]=!DISPLAY[%Y%]!!P%%P!
  273.                 )
  274.         )
  275. ) else (
  276.         if not defined Mark7 (
  277.                 if !dy! gtr 0 (
  278.                         set "StepStr=!StepStr!2"
  279.                 ) else (
  280.                         set "StepStr=!StepStr!1"
  281.                 )
  282.         ) else (set "Mark7=")
  283.         for /l %%j in (!Yp!,!dy!,!Yf!) do (
  284.                 set "DISPLAY[%%j]="
  285.                 for /l %%i in (1,1,%MapWidth%) do (
  286.                         for %%P in (!POINT[%%i][%%j]!) do (
  287.                                 set DISPLAY[%%j]=!DISPLAY[%%j]!!P%%P!
  288.                         )
  289.                 )
  290.         )
  291. )
  292. if defined Mark3 (
  293.         set/a "X=Xp,Y=Yp,Mark4=1"
  294.         set "Mark3="
  295. )
  296. goto ANCHOR

  297. :NEXT
  298. endlocal
  299. goto :EOF

  300. REM 测试地图
  301. 8 8 0011111011122210124212111212232112222121112122210162211101111100 113114322441444311332213322443224411314D
  302. 8 8 0011111011122210124212111212232112322121114134210162211101111100 43441133311432244422331244111411332332244331144213322422441131114422422341131133224D
  303. 8 8 0111110001222100114121111222462112122121121323211222111111111000 422333114113321442232223311144311442212334224441122333214441133234144223344113311332243114433223222441233111411442221113322322244141132D
  304. 19 14 00000000000111111110000000000012233331111111111111223333112222122424222333311244414224212233331122422222421223333112442142424111111111224212222210000000112111111111000000012222122221100000001222224222110000000122441442261000000012222122221100000001111111111100000000
  305. 16 16 0011110000000000001221111111111100122224222424210012412421224221001224242212222111124121221111211614242422112221122224214122212112224222242424211111122111111111001222222100000000122222210000000013333331000000001333333100000000133333310000000011111111000000
  306. 17 14 0000000000111111100000000001223331000000111112233310000001222222323100000012211223331000000112112233310000011121111111100000124442110000011111224242111111122214242221222116242242222422421111111244242111110000012222221000000000111111110000
  307. 19 16 0111001111111111111116111122222221222112442224422424233311224441222242213331124222124424421333111122212242222133311222221242424213331122221111112111333111212212242422133311221121244242411331123312122422222213112331212444244421311111121222222212131000012111111111213100001222222222221310000111111111111111
  308. 19 15 000000000011110000000000111101221000000001112611142100000001122222242210000001122424411211000000122141122222100000012124244212111000001222421221242111111111222212244212221111121124222222222113222211122111111111332331011110000000133313100000000000013333310000000000001111111000000000000
  309. 17 13 11111111111111110122222222222222101212111111222221012122424242412210121222464222112111212242424111333112122242422113331121114442421133311222221211211333111111222112113331000011111222221110000000012222210000000000111111100
  310. 19 13 0001111111110000000001122211221111100011122222122122221111224214212212233321121241641121213132112212142212222323211242222421212131321122211221142423232112421222122141313211124224222422433321014211111122221122101221000011111111110111100000000000000
  311. 18 16 000000011111110000011111112222210000012222212464210000014421222111111111012111333333112221012224333333112121012111333333222221112221111211121411122142221224221210122424442212411210122242421114421210111112222242221210000011121112221210000000122222122210000000111111112210000000000000011110
  312. 17 16 00011111111000000000122212210000000001224222100000001112142221111000012242211422210000122126242124100001221222222421111011211114112222210124133333121222101224335532412111112213333312221001222111211111110012442212210000000122122222100000001111112221000000000000111110000000
  313. 14 15 111110000000001222110000000012222100111100124221111221001224424222410011162142222110012211224242110124221121123101221411422131011122243311310012222135333100124421333331001221111111110012210000000000111100000000
  314. 16 14 00011111111110000001332212221000000133222222100000013322122111100011111112212211001222222222222100122122112212211111211221111211122422111112122112124224221242211264224222122211111121121111111000012222100000000001111110000000
  315. 19 13 0000011111111111000000001223221222100000000121322226210000111112113312111100112212331112222211112421333222421224211222233211221121121111141141242122212100112122221424421210012242121221241121001222222222222222100122111111111112210011110000000001111
  316. 19 16 0011111100000000000001222611110000000011111242221000000001222112222111100000124212211222210000012421221111121000001124224222212100000112424211121210000011212242212121000001121214122212100000112111222121211111112242211112121333311222242222422233131111142241242223333112222222122112333311111111111111111111
  317. 19 16 0000111111111100000111112222222211110012222212224221621001211111114111122111121222211212214233112124222221221221311212422122222142331121221112112222213112111221221221423311212222122111122131121422242242214233112222421242421221311111241112222142331000122224421113333100012222221101111110001111111100000000
  318. 15 15 111111111000000122222221000000122222221111000112111121221000112161122221000124442422441000122121124221000122121122421111111122444241221012221122233331012122212133231012221212113331011111242213331000001122211111000000111110000
  319. 19 16 1111110000011110000122221111111221111112224122122422122211224224224212424221114242221261242222112242111111111112111212221333333312410121122123333331221012122243333333342101212421333323312210122424111141111241012422211124222422111242222242422422221112111111242111112112222222221222222211111111111111111111
  320. 19 14 00001111111000000000000122122111100000111112414212211000013321221221222100001332124142122411110132212222214221221013322241221242222101336122142142212210133212412222241221013321221441422122111332124122122414221133212212212221222111321111221111122210111100111100011111
  321. 19 16 1111111111111110000133333333332231111013333333333443122101111111111142122211122222242242222242111211112221224212211222222122211221211122412212112211121112421411122221112111112242122122111211111222242112122121101242212242242422210122422414442212221012212242222221111101261122122122100000111111111111110000
  322. 19 16 1111000000000000000122111111111111110012212223313333331001221212111112333100114122223333333310012221141111112211111242122222111111621114212422211111122112242144411222222211222222122221414111121111214444422221012122224222221222101212221122222222111121111114111111242112222222210000122211111111111000011111
  323. 15 12 011111110000000012212211111000112212213331110122412213332210124214423332210122412213332310122212411111111114222222242421112212244212221011111122114461000000122222211000000111111110
  324. 19 13 0111111111111111110013332221222212221111333332241121214211333333122422122221133333312212212122111111111124224242210012222214114211411011222422221242222101221121112122114210124244222224224221012422224114211111101111111226211000000000000111111000000
  325. 17 15 000000000111110000000011111222100000001124224221111111112422424211311222222244221133112211111121113321112122122221333211242221222213332116214211211113331111122424422113310001122424224333100001244224212231000012224242211110000111111222100000000000011111000
  326. 19 13 1111100000000000000122211000000000000012422111111111000001121212222222111111112122241416221222112212222224212224211221112111111111211122112335333332121111211253533535212111241111111111211421122422242242222422112212221222122212211111111111111111111
  327. 19 14 00000001111111111100000000122212222210111110012222242421012221111124112121101242112221211242210124226442121144421011211122212112222101121222111211111410112122222422133331012211121124213333111242224212221334321122112421221133332111111222111111333110000111110000111110
  328. 18 16 001111000000000000001221111111110000011221122122210000012241246422211110014224221242412211112241121424222221122122121222444221124222242241121111124242141221221000112211122111421000012213333222221000011113333331111000000133331111000000000133311000000000000133310000000000000111110000000000
  329. 13 15 000000111100000111112210000112222241000112422112111016424212422101111211222410013333142421001333312224100133332244211013332124222101111114242210000001222111000000142111000000012210000000001111000
  330. 12 15 111111111111112222211221112224222421111121124421122242122221124442121111122212124211122122122421124124122221122233121111111133242161133333124121113333122421111331122221111111111111
  331. 14 15 011111111100000133332221100001313122421100113333121261101233331221221112222214211421112111224222210142242424122101212242421121012211122112210122221121121101224212242210011142422211100001221111100000011110000000
  332. 19 16 1111111111110111111122212222121113333112224412226223333311222121112221233331112112111221223333101242422222121211110122424112212222221111121221111212112112212142221121222211242242212112122211121242422221212221012242112112121111101244222224422100000112112111242210000001222210122221000000111111011111100000
  333. 19 16 0000000000001111100111110011111122210012221111224242421001242221121121122110122242422222422421011124221121122222110012111112111114421011411111261122222101242211141112422110124221222111221110012442421222442100001222221222112210000111111133231110000000013333333331000000001333333333100000000111111111110000
  334. 19 15 111111111110000000013333332221111111111333333222122112221133111242222422222113332424212221122211333141111122221221111222212221422142100122442424224112210012242221414211421001112112122221122100012242421121111110001222242242210000000112221212221000000001111161111100000000000011100000000
  335. 19 16 0000000000000111111011111111111113333111222112222211333311224411224261133331122222244241223333112242112442121233311224211242212233331112111112111211311111222422421122232211241112212111112111122242221222222210012242142424111221001244412422210111100122221224421000000011111122211100000000000011111000000000
  336. 17 16 00001111111111110000012222222222110000122121442422100001421412211261000112112124212110001222421422121000012221242221210000112424222112100001221221122421000012222112441210111111442221222101333312211111111013133321100000000133332221000000001333322210000000011111111100000000
  337. 19 15 000000000001111100000000000001122211000000000001122222100000000001122442210000000001124422421000000000124222242100111100012224421111112211111111211222211322222222222244461131211111112112221113121111111321424111333333333332122221111111111111112242100000000000001122110000000000000011110
  338. 18 13 000001111111100000001111222222111111001222211242422261001211211414242411111233333312244211122233333312212221121233333314224221121433333324412421122211121114224211111224224224224210001224224224224210001111112221111110000000011111000000
  339. 19 11 00000000111111100000000111112212211110000012221222422221001111214421121122101122222212122112111122111241422422422113332222121122122211333122226212111211133312211122422422111111111011222122210000000000111111111
  340. 19 15 011111000000000000001222100000000000000121211111110000000012222224611111100001242114211122210000121111242222421000012111112122142111111221111211422222211224122422121121121122222222212133312111111122111223332210000011110121333121000000000012111212100000000001222222210000000000111111111
  341. 16 14 11111011110000001333101221111000133311122422100013333112422411101133331122242210111333211242421012112222122422101221121211121111124212142242222112242624222242211222124244242111122111111221110012110000111100001110000000000000
  342. 14 16 11111111110000122222222111101211111121221112124242422421122222221422211114224412211100122112124110001141222426100001224242111000012122242210000121122212100011221111121000122222222210001333333311100013333333100000111111111000
  343. 18 11 000000000111100000011111111122110000112242222224211111122211211222113331121442424414113331121222622212223331122412111442223331124224422421133331111422222221111111001221111111000000001111000000000000
  344. 13 16 0011111111100001535153510000135353531000015353535100001353535310000153535351000011122211100000012221000011111121111111222222222221124242424242111242424242110142424242410012224642221001221111122100111100011110
  345. 16 15 000000011110000000000001221100000000000122211000000000012442110000000111422421100011112222422210111221211111221012222121333342101212224233331210122421213533121011122111121112100011112642211411000001112422222100000001221122210000000111111111
  346. 19 16 0000001111111111110000001133222212221000001133524222242100001133531212124110000133531212124221011113331221222212101221121222222222210126424211122122211012422242221212221001114422212121212100001222422212121111100124121111122222210014222100012222121001221110001122222100122100000012222110011110000001111110
  347. 14 12 011111111100000122222221000001242442410000111212242100001312224421100013111222421000131324211211111333224112422113334222422221133111411121611331012222211111110111111100
  348. 20 15 111111111111111111111222211222122221222112242242222211242221112111112231111112110121122113333111121111211421113311222221122222213332312424211242112112321112111112124222213112121000124242122231111211001212211212112212211011111112241142224210000000112222224216100000000122112111111000000001111111000000
  349. 20 12 111111111111111111111222122221222122216112422222242224222121112111331121112222211222133331412241112112421333312242242421122213333121212424211222113311222141222111411222211221221411122242242222212212211222122221222122222111111111111111111111
  350. 20 12 111111111111111111111222261122222212221112222112222422224211122111333312121221111222133331212124222111121333122122222221112211312222242224211122424211122121211111242222222121242221111124224121212124211111222222222121221111111111111111111111
  351. 20 12 111111111111111111111221221122221222611111222242222124111221114124211412424222211222412222422222211112112224211122133331121241212121213333111222242421221333311111421112242133331111122124222222221111111222222121222211111111111111111111111111
  352. 20 12 111111111111111111111622222111222122122112121221224224222221111112222212424141211313312222114242222113333322224222122211133333222211141141111313312222422221222111111222221221422421111112212242222424211111122122122122122111111111111111111111
  353. 20 12 111111111111111111111133322211212222122113333222222222421121133331212141114222211333122221222222212111312214212222241121122122124242111224211222224224212212112111212112144124122121122122242421222222111222212222212212226111111111111111111111
  354. 20 12 111111111111111111111222122161211221111112121224222242211111121222211111124221111222122133331224422111411411333312222221122222213333114114111224422133331222222112422422122122111221111112242224222242211111121222212212221111111111111111111111
  355. 20 12 111111111111111111111212222212222222222112222222422112111211111112211222422422211133112212124212122113333224222221141211133332241111122214111133121221222122422111131212242224221261112242242122212211111122222221111111111111111111111111111111
  356. 20 12 111111111111111111111222221113311122222112442211133111224621122121133333312242211222221333333122422111112211133111111421122244421331222212211241222422422442142112212211242211221221124222242112422224211221221122221122122111111111111111111111
  357. 20 12 111111111111111111111222212212122122122112612121124222422211111121222212212422211222212112142112112112222224222422242221133111441124114211211331312212422242122113333124422211421111133331221111122222211333111222222221122111111111111111111111
  358. 20 12 111111111111111111111333312222222122122113333121242242222221133332112241212414211333122242224122422113311112212422244221122222211112111121111222222221222122222112112221222421242421121122224211242242211222226122222122212111111111111111111111
  359. 20 12 111111111111111111111333311122222222222113333111112122141211133331112221422422211333311122224221441111221111241221424221112211112242242212211622111141114112422111222222221221224221112221112212242211111111111122122122222111111111111111111111
  360. 20 12 111111111111111111111222221222226133311112222212222221133311121212114112112333311222421222444223333111141112442211121131122222422122221211111224221221112212122111214112222422442221122242112221221212211222221222212212222111111111111111111111
  361. 20 12 111111111111111111111222221221333162222112122222223333122221122422122213333122211211411112113333122112422242212213331221124421222122212442211112244412224422422112422122122221241221122241221222222242211221222212222122122111111111111111111111
  362. 20 12 111111111111111111111111161113113331122111111422331333122221111122223333331224211112242133333112121111224412111112242421112412422221122442211122122122221242242111222442111214112221112412222224242242111112222122221222211111111111111111111111
复制代码

评分

参与人数 4PB +12 技术 +4 收起 理由
pcl_test + 1 体验较好
523066680 + 12 + 1 用户体验、模块化都很好
codegay + 1 1
xxpinqz + 1 严禁灌水~~~~~厉害

查看全部评分

发表于 2016-9-5 04:48:07 | 显示全部楼层
加个重玩本关
发表于 2016-9-5 08:33:15 | 显示全部楼层
本帖最后由 523066680 于 2016-9-5 08:54 编辑

第一感觉,好久没看到有人用批处理做游戏啦,
打开一用,咦,用了什么黑科技,可以直接wasd而不用回车。
原来是choice,刚好我把choice放进环境变量的目录了所以直接见效。

加个信息:显示当前移动的步数
发表于 2016-9-5 14:09:23 | 显示全部楼层
每一次移动用字母记录下来, u d l r 表示 上 下 左 右, 如果推了箱子, 则用大写字母表示 U D L R

建立堆栈(每一次移动都只用一个字符位), 把所有的移动都记录下来, 就可以做任意步 (若堆栈是一个变量, 步数不超出字符容纳上限)  的回退了

关卡数据可以用 Run length encoding 方式来压缩, 从而可以用很节省的方式直接保存在 CMD 文件内部

Run length encoding

http://www.sokobano.de/wiki/index.php?title=Level_format
发表于 2016-9-5 14:17:17 | 显示全部楼层
回复 4# aa77dd@163.com


    每个箱子也要记录
发表于 2016-9-5 15:03:15 | 显示全部楼层
回复 5# CrLf

不需要记录箱子位置,

定义坐标系
(x, y) x 正向右, y 正向下

比如 player 在 (x, y) 右移 并推动了箱子, 记录为 R, 移动后, player 的位置到了 (x+1, y), 也必有一个箱子从 (x+1, y) 被推动到了(x+2, y)

要回退这一次移动时, player  位置必在 (x+1, y), 需要把  player 回退到 (x, y),  因为记录是大写字母, 所以知道肯定有箱子被推动过了, 因为是向右推的, 所以那个箱子一定在 (x+2, y), 就把它还原到 (x+1, y) 即可

而如果 记录是 r 时, 小写字母表示没有推动过箱子, 那么只把 player 位置 回退到 (x, y) 即可.

评分

参与人数 1技术 +1 收起 理由
CrLf + 1 有道理

查看全部评分

发表于 2016-9-5 15:24:42 | 显示全部楼层
本帖最后由 aa77dd@163.com 于 2016-9-5 19:25 编辑

不用字母而用数字 0 1 2 3 表示 上 下 左 右
如果推动了箱子, 就把数值 加上 4, 即, 4 5 6 7

在分析 记录 时, 设 t 为记录值 ,
t & 3 就得到方向,  
t & 2 == 0 是纵向, 否则是横向
t & 1 == 1 是正向(右或者下), 否则是负向(左或者上)
t & 4 == 0 表示没有动箱子, 否则是动了箱子的

换言之, 就是用三个二进制位表示三种信息, 是否有动箱子, 是纵向还是横向, 是正向还是负向
  1. @echo off
  2. <nul set /p "=[]"
  3. echo;
  4. pause

复制代码
 楼主| 发表于 2016-9-5 16:35:22 | 显示全部楼层
回复 7# aa77dd@163.com
多谢大师指点。但是我觉得其实只用u d l r 这个四个表示 上 下 左 右就足够了,没必要U,DLR大写或正负步的支援。因为我可以用提前保存之前的地图数据。

比如我先保留了某刻的地图数据MapDataTemp,之后我又走了10步,这10步只用u d l r四个表示即可,因为这10步完全可以由先前的地图数据MapDataTemp只经过上、下、左、右、重现出来。

也就是说我没有必要根据现在的情况去推断上一步的情况,我可以提前保留之前的整张图数据,然后根据记录下的上、下、左、右交给批处理的数据处理部分(而不是choice.exe)重新走出来这几步,因此这几步仅仅只需二进制的00,01,10,11这四种表示,我选择0到F的16进制,那么一个16进制有4位,就可以表示两个走步,就实现了一个字符表示两步。txt一行能容纳1000多字符,也就是一行就能存下2000多步。比用大小写最少要节约30%~50%,而且还实现了走步回放。
 楼主| 发表于 2016-9-11 22:18:28 | 显示全部楼层
回复 3# 523066680
感谢建议,已加入计步器
 楼主| 发表于 2016-9-11 22:19:31 | 显示全部楼层
回复 2# codegay
3.0版已加入重玩本关。还有自动化脚本。

评分

参与人数 1技术 +1 收起 理由
codegay + 1 1

查看全部评分

发表于 2020-1-18 14:26:15 | 显示全部楼层
前两关为何自动?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-16 23:02 , Processed in 0.027685 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表