Board logo

标题: [游戏娱乐] 批处理游戏:推箱子 [打印本页]

作者: aa77dd@163.com    时间: 2016-9-12 01:23     标题: 批处理游戏:推箱子

本帖最后由 aa77dd@163.com 于 2016-9-12 13:51 编辑


版本
20160912_094502

新增了 自动前进(P 键) 和 自动回退(Y 键)
运用示例: 先按 F1 键, 再按 P 键, 就可以自动运行解答了, 中途可以随时打断接管控制, 比如中途按下 U 键

代码中输出文件并没有用 WIN XP 系统没有的 certutil.exe, 而是用的 XP 都有的 makecab.exe 和 expand.exe
我暂未在 XP 系统测试, 请用 XP 系统的道友反馈正常否.

按键响应工具 neoGetKey.exe 用 C 语言编写, 详见 4 楼
http://bbs.bathome.net/redirect. ... id=41685&pid=190471

如果不能正常解码输出内嵌文件, 请下载包含 neoGetKey.exe 和 Holland.sok 独立文件的包
链接: http://pan.baidu.com/s/1kUSWh9d 密码: c527

某些系统中可能不存在 makecab.exe 或者 expand.exe 生成文件 或者 ASCII 特殊字符过程中如果始终卡壳, 请下载只用普通字符显示的版本
neo_SOKOBAN_20160912_094502_普通字符显示.zip
链接: http://pan.baidu.com/s/1pLMsDar 密码: 7ska
  1. 普通字符显示方式, 效果上不如 ASCII 特殊字符显示
  2. M   人
  3. #   墙
  4. $   未到达目标位置的箱子
  5. +   已到达目标位置的箱子
  6. .   空的目标位置
  7. 要改变以上字符设置, 修改 (过程 :PRINT_BOARD 中) 第 394 行即可
复制代码
  1. 操作说明:
  2.     方向控制
  3.    
  4.             自动回退    回退     向上    前进   自动前进
  5.                 |       |       |       |       |
  6.                 Y       U       I       O       P
  7.                      
  8.                    向左- J       K       L  -向右            
  9.                                 |
  10.                                向下
  11.     杂项控制
  12.         U           -- 回退一步 (用来撤销错误的移动)
  13.         O (字母"欧")-- 前进一步 (在移动记录中前进一步)
  14.         
  15.         Y           -- 自动回退 (如果不被用户操作中断, 会一直回退到 移动记录 中不能再退)
  16.         P           -- 自动前进 (如果不被用户操作中断, 会一直前进到 移动记录 中不能再进)
  17.         Ctrl + N    -- 重头开始玩当前关卡
  18.         F1          -- 载入当前关卡的解答(如果 .Sok 关卡文件中有包含当前关卡的解答)
  19.         鼠标任意一个键(左/右/中)单独被按下
  20.                     -- 暂停游戏(任意字符键可继续游戏)
  21.     关卡选择:
  22.         PageUp      -- 上一关
  23.         PageDown    -- 下一关
  24.         Ctrl + Q    -- 退出游戏
  25. 显示说明:
  26.     因使用了 ASCII(219) 显示墙, ASCII(178) 显示箱子,
  27.     请为 CMD 窗口 选择 TrueType Lucida Console 字体, 或者 点阵字体.
  28.     已知 中文 Win 7 64 位 下, TrueType Consolas 字体不能正常显示
  29. 代码说明:
  30.     代码中 用 BASE64 编码内嵌了两个文件
  31.     neoGetKey.exe   -- 按键响应工具
  32.     Holland.sok     -- .sok 格式关卡文件(含 126 个关卡)
  33.     .sok 格式关卡文件 请参阅
  34.     http://sokobano.de/wiki/index.php?title=Level_format
  35.     http://sokobano.de/wiki/index.php?title=Sok_format
  36. 运行说明:
  37.     程序首次运行时, 将会自行解码并导出内嵌的两个文件, 将耗时数秒, 以后如果这两个文件已经存在, 将跳过这个过程
  38.     按键响应工具 neoGetKey.exe 响应按键时, 不需要游戏窗口有焦点, 只要游戏没有被暂停, 即使焦点在其他窗口, 游戏仍会作出有效按键的响应
  39.     困难的关卡可以按下 F1 载入预存的 解答, 然后一直按住 O 键, 就能看到解答过程.
  40. 测试环境:
  41.     中文 Win 7 64 位
复制代码
  1. @echo off & >nul chcp 437 & mode 60,10 & REM neo_SOKOBAN.CMD aa77dd@163.com @ 20160912_094502
  2. set "LevelFile=Holland.sok"
  3. if not exist "%~dp0neoGetKey.exe" set "t=1"
  4. if not exist "%~dp0Holland.sok" set "t=1"
  5. if "%t%"=="1" (
  6.     2>nul md "%~dp0CHRs" & cd /d "%~dp0CHRs" & call :genAllChr & cd /d "%~dp0"
  7. )
  8. call :clearVars
  9. setlocal enabledelayedexpansion
  10. ::==================================== KEYBOARD SETTINGS ====================================
  11. set /a "KEY_REPEAT_DELAY = 5" & REM 按键重复延迟(单位 百分秒 范围[1,99]), 数值越小, 按键重复越快, 移动速度越快, 反之越慢
  12. set /a "command=wait=0"
  13. set /a "KEY_UP       =73"        & set /a "dirControl=1,  KV_!KEY_UP!       =1"          & REM                  键 I
  14. set /a "KEY_DOWN     =75"        & set /a "               KV_!KEY_DOWN!     =2"          & REM                  键 K
  15. set /a "KEY_LEFT     =74"        & set /a "               KV_!KEY_LEFT!     =3"          & REM                  键 J
  16. set /a "KEY_RIGHT    =76"        & set /a "               KV_!KEY_RIGHT!    =4"          & REM                  键 L
  17. set /a "KEY_UNDO     =85"        & set /a "undoMove  =5,  KV_!KEY_UNDO!     =undoMove"   & REM undo a move      键 U
  18. set /a "KEY_REDO     =79"        & set /a "redoMove  =6,  KV_!KEY_REDO!     =redoMove"   & REM redo a move      键 O
  19. set /a "KEY_MENU     =77"        & set /a "enterMenu =7,  KV_!KEY_MENU!     =enterMenu"  & REM enter menu       键 M
  20. set /a "KEY_REPLAY   =162<<8|78" & set /a "replay    =8,  KV_!KEY_REPLAY!   =replay"     & REM replay a level   键 LCtrl + N
  21. set /a "KEY_REPLAY_2 =163<<8|78" & set /a "               KV_!KEY_REPLAY_2! =replay"     & REM replay a level   键 RCtrl + N
  22. set /a "KEY_QUIT     =162<<8|81" & set /a "QuitGame  =9,  KV_!KEY_QUIT!     =QuitGame"   & REM quit the game    键 LCtrl + Q
  23. set /a "KEY_QUIT_2   =163<<8|81" & set /a "               KV_!KEY_QUIT_2!   =QuitGame"   & REM quit the game    键 RCtrl + Q
  24. set /a "KEY_PAUSE    =1"         & set /a "pauseGame =10, KV_!KEY_PAUSE!    =pauseGame"  & REM pause the game   键 Left mouse button
  25. set /a "KEY_PAUSE_2  =2"         & set /a "               KV_!KEY_PAUSE_2!  =pauseGame"  & REM pause the game   键 Right mouse button
  26. set /a "KEY_PAUSE_3  =4"         & set /a "               KV_!KEY_PAUSE_3!  =pauseGame"  & REM pause the game   键 Middle mouse button
  27. set /a "KEY_PRE_LVL  =33"        & set /a "preLVL    =11, KV_!KEY_PRE_LVL!  =preLVL"     & REM pre level        键 PageUp
  28. set /a "KEY_NEXT_LVL =34"        & set /a "nextLVL   =12, KV_!KEY_NEXT_LVL! =nextLVL"    & REM next level       键 PageDn
  29. set /a "KEY_LOAD_SOL =112"       & set /a "loadSol   =13, KV_!KEY_LOAD_SOL! =loadSol"    & REM load Solution    键 F1
  30. set /a "KEY_AUTO_UNDO=89"        & set /a "A_undoMove=14, KV_!KEY_AUTO_UNDO!=A_undoMove" & REM auto undo moves  键 Y
  31. set /a "KEY_AUTO_REDO=80"        & set /a "A_redoMove=15, KV_!KEY_AUTO_REDO!=A_redoMove" & REM auto redo moves  键 P
  32. ::===========================================================================================
  33. call :initGlobalVars
  34. set /a "marginH=10, marginV=6"
  35. REM 导出按键响应工具
  36. if not exist "%~dp0neoGetKey.exe" (
  37.     call :B64DECODE "%~f0" "neoGetKey.exe.B64" "neoGetKey_exe" 8000 5464
  38.     ren neoGetKey_exe neoGetKey.exe
  39. )
  40. REM 导出 sok 格式 关卡文件
  41. if not exist "%~dp0Holland.sok" (
  42.     call :B64DECODE "%~f0" "Holland.cab.B64" "Holland_cab" 8000 "(8000*5+4892)"
  43.     expand Holland_cab Holland.sok
  44. )
  45. REM 获取关卡总数 并 打开随机关卡
  46. call :readSokFile "%~dp0Holland.sok" 999999
  47. set /a "sumLevels=cntTitle, levelNum=!random! %% sumLevels + 1" & set sumLevels & set levelNum
  48. :restartLevel
  49. REM 清除关卡残留数据
  50. for %%h in (BLS boardlines SMS S_M titles BL) do for /f "delims==" %%a in ('2^>nul set %%h') do set "%%a="
  51. call :readSokFile "%~dp0Holland.sok" !levelNum!
  52. call :initBoard
  53. if !command! EQU !loadSol!  call :load_Solution
  54. call :autoResizeScr marginH marginV
  55. call :resetCursor
  56. REM clear screen
  57. for /L %%i in (2 1 !Lines!) do <nul set /p "=%BS%!tailSPS:~0,%Columns%!"
  58. <nul set /p "=%BS%!tailSPS:~0,%Columns_1%!"
  59. call :resetCursor
  60. call :run
  61. if !command! EQU !replay!   goto :restartLevel
  62. if !command! EQU !loadSol!  goto :restartLevel
  63. if !command! EQU !QuitGame! exit
  64. exit
  65. ::==================================== END MAIN PROGRAM ====================================
  66. :load_Solution
  67. set "Movs=" & set /a "p_Movs=0" &   rem 初始化步记录堆栈
  68. for /L %%L in (1 1 !SMS%levelNum%!) do (
  69.     set "Movs=!Movs!!S_M%levelNum%_%%L!"
  70. )
  71. setlocal enabledelayedexpansion
  72. if not "!Movs!"=="" (
  73.     call :strLen Movs len
  74.     set /a iM=len-1
  75.     set "t="
  76.     for /L %%i in (0 1 !iM!) do (
  77.         set "step=!Movs:~%%i,1!"
  78.         for /f "delims=ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" %%b in ("!step!") do (
  79.             for %%P in (u:0 d:1 l:2 r:3) do (
  80.                 for /f "tokens=1,2 delims=:" %%c in ("%%~P") do set "step=!step:%%c=%%d!"
  81.             )
  82.         )
  83.         for /f "delims=abcdefghijklmnopqrstuvwxyz0123456789" %%b in ("!step!") do (
  84.             for %%P in (U:4 D:5 L:6 R:7) do (
  85.                 for /f "tokens=1,2 delims=:" %%c in ("%%~P") do set "step=!step:%%c=%%d!"
  86.             )
  87.         )
  88.         set "t=!t!!step!"
  89.     )
  90. )
  91. (
  92. endlocal
  93. set "Movs=%t%"
  94. exit /b
  95. )
  96. :run
  97. call :PRINT_BOARD
  98. :run.loop
  99.     set /a "command=wait"
  100. :run.loop_retain_command
  101.     REM 按键重复延迟, 避免按键重复太快, 难以控制
  102.     set /a "told=1!time:~-2!"
  103. :keyRepeatDelayLoop
  104.     set /a "td=1!time:~-2!-told, td+=(td>>31)&100"
  105.     if !td! lss !KEY_REPEAT_DELAY! goto :keyRepeatDelayLoop
  106.     neoGetKey.exe 1
  107.     set "err=!errorlevel!"
  108.     if !err! equ 255 (  REM echo;   time out
  109.         if %command% EQU %A_redoMove%   set /a "err=KEY_AUTO_REDO"
  110.         if %command% EQU %A_undoMove%   set /a "err=KEY_AUTO_UNDO"
  111.         if %command% EQU %wait%         goto :run.loop
  112.     ) else (            REM for debug
  113.                         REM set /a "k1=err & 0xFF, k2=err>>8 & 0xFF, k3=err>>16 & 0xFF, k4=err>>24 & 0xFF"
  114.                         REM echo;   pressed key value is : !k4! + !k3! + !k2! + !k1!
  115.                         title err=[%err%]
  116.     )
  117.     set "BoardChanged=0"
  118.     if "!KV_%err%!"=="!loadSol!" (          REM load Solution
  119.         if !SMS%levelNum%! LEQ 0 (
  120.             <nul set /p "=No solution. any key continue.."
  121.             >nul pause
  122.             REM 清除暂停信息
  123.             set "BSS=%BS% %BS%" & for /L %%i in (1 1 6) do set "BSS=!BSS!!BSS!"
  124.             <nul set /p "=!BSS!"
  125.         ) else (
  126.             set /a "command=loadSol"
  127.             exit /b
  128.         )
  129.     ) else if "!KV_%err%!"=="!nextLVL!" (   REM next level
  130.         set /a "levelNum+=1, t=levelNum-sumLevels-1>>31,levelNum=t&levelNum|~t&1, command=replay"
  131.         <nul set /p "=Level !levelNum! is loading..."
  132.         exit /b
  133.     ) else if "!KV_%err%!"=="!preLVL!" (    REM pre level
  134.         set /a "levelNum-=1, t=levelNum-1>>31,levelNum=t&sumLevels|~t & levelNum, command=replay"
  135.         <nul set /p "=Level !levelNum! is loading..."
  136.         exit /b
  137.     ) else if "!KV_%err%!"=="!pauseGame!" ( REM pause the game
  138.         <nul set /p "=Paused. any key continue.."
  139.         >nul pause
  140.         REM 清除暂停信息
  141.         set "BSS=%BS% %BS%" & for /L %%i in (1 1 5) do set "BSS=!BSS!!BSS!"
  142.         <nul set /p "=!BSS!"
  143.     ) else if "!KV_%err%!"=="!QuitGame!" (  REM quit the game
  144.         set /a "command=QuitGame"
  145.         exit /b
  146.     ) else if "!KV_%err%!"=="!replay!" (    REM restart current level
  147.         set /a "command=replay"
  148.         exit /b
  149.     ) else if "!KV_%err%!"=="!enterMenu!" ( REM
  150.     ) else if "!KV_%err%!"=="!redoMove!" (  REM
  151.         if not "!Movs!"=="" (
  152.             for %%i in (!p_Movs!) do set "nextMov=!Movs:~%%i,1!"
  153.             if not "!nextMov!"=="" (
  154.                 call :doMove !nextMov!
  155.                 set /a "command=redoMove"
  156.             )
  157.         )
  158.     ) else if "!KV_%err%!"=="!A_redoMove!" (  REM
  159.         if not "!Movs!"=="" (
  160.             for %%i in (!p_Movs!) do set "nextMov=!Movs:~%%i,1!"
  161.             if not "!nextMov!"=="" (
  162.                 call :doMove !nextMov!
  163.                 set /a "command=A_redoMove"
  164.             )
  165.         )
  166.     ) else if "!KV_%err%!"=="!undoMove!" (  REM
  167.         call :undoMove
  168.         set /a "command=undoMove"
  169.     ) else if "!KV_%err%!"=="!A_undoMove!" (  REM
  170.         call :undoMove
  171.         set /a "command=A_undoMove"
  172.     ) else if not "!KV_%err%!"=="" if !KV_%err%! GTR 0 if !KV_%err%! LSS 5 (  REM 方向键
  173.         set /a "dir=KV_%err% - 1"
  174.         call :doMove !dir!
  175.         set /a "command=dirControl"
  176.     )
  177.     if !BoardChanged! equ 1 (
  178.         call :PRINT_BOARD
  179.     )
  180. if %command% EQU %A_redoMove% goto :run.loop_retain_command
  181. if %command% EQU %A_undoMove% goto :run.loop_retain_command
  182. goto :run.loop
  183. exit /b
  184. :undoMove
  185.     if !p_Movs! LEQ 0 exit /b
  186.     set /a t=p_Movs-1
  187.     for %%i in (!t!) do set "mov=!Movs:~%%i,1!"
  188.     REM PUSHER 要回退到 X_DEST Y_DEST
  189.     set /a "dir=mov&3, dir_type=(dir&2)>>1<<IMSB>>IMSB,dir_sign=1-(dir&1)*2, X_DEST=X+(dir_type & dir_sign), Y_DEST=Y+(~dir_type & dir_sign)"
  190.     call :getPos X_DEST Y_DEST STATE_DEST
  191.     set /a "STATE_DEST_NEW=STATE_DEST | PUSHER"
  192.     call :setPos X_DEST Y_DEST STATE_DEST_NEW
  193.     call :getPos X Y STATE
  194.     set /a "needMoveBox=(3 - mov)>>IMSB, STATE_NEW=(needMoveBox & (STATE & ~PUSHER | BOX)) | (~needMoveBox & (STATE & ~PUSHER))"
  195.     call :setPos X Y STATE_NEW
  196.     if !needMoveBox! LSS 0 (
  197.         set /a "X_BOX=X+X-X_DEST, Y_BOX=Y+Y-Y_DEST"
  198.         call :getPos X_BOX Y_BOX STATE_2
  199.         set /a "STATE_2_NEW=STATE_2 & ~BOX"
  200.         call :setPos X_BOX Y_BOX STATE_2_NEW
  201.         set /a "totalEmptyGoal += ^!^!(STATE_2 & GOAL) - ^!^!(STATE & GOAL)"
  202.     )
  203.     set /a "X=X_DEST, Y=Y_DEST, BoardChanged = 1"
  204.     set /a "p_Movs-=1"
  205.     REM set "Movs...."    & rem 保留堆栈数据以便可以 REDO
  206. exit /b
  207. :doMove dirChar
  208.     REM 不用字母而用数字 0 1 2 3 表示 上 下 左 右
  209.     if         /i "%~1"=="U"  (  set "dir=0"
  210.     ) else if  /i "%~1"=="D"  (  set "dir=1"
  211.     ) else if  /i "%~1"=="L"  (  set "dir=2"
  212.     ) else if  /i "%~1"=="R"  (  set "dir=3"
  213.     ) else                       set /a "dir=%~1 & 3"
  214.     set /a "MOVEABLE=0"
  215.     REM b <= a <= c  <===> ((b - 1) - a) & (a - (c + 1)) < 0
  216.     set /a "dir_type=(dir&2)>>1<<IMSB>>IMSB,dir_sign=(dir&1)*2-1, X_DEST=X+(dir_type & dir_sign), Y_DEST=Y+(~dir_type & dir_sign)"
  217.     set /a "inBoard = ((1 - 1) - X_DEST) & (X_DEST - (maxLineLen + 1)) & ((1 - 1) - Y_DEST) & (Y_DEST - (BLS%levelNum% + 1))"
  218.     if !inBoard! LSS 0 (
  219.         REM TITLE inBoard
  220.         call :getPos X_DEST Y_DEST STATE_DEST
  221.         if !STATE_DEST! LSS !WALL! (
  222.             set /a "needRemoveBoxFromBoxOriginPos=0"
  223.             if !STATE_DEST! LSS !BOX! (
  224.                 set "MOVEABLE=1"
  225.             ) else (
  226.                 set /a "exist_box=STATE_DEST & BOX"
  227.                 if !exist_box! neq 0 (
  228.                     set /a "X_DEST_BOX=X_DEST+(X_DEST-X), Y_DEST_BOX=Y_DEST+(Y_DEST-Y)"
  229.                     set /a "inBoard2 = ((1 - 1) - X_DEST_BOX) & (X_DEST_BOX - (maxLineLen + 1)) & ((1 - 1) - Y_DEST_BOX) & (Y_DEST_BOX - (BLS%levelNum% + 1))"
  230.                     if !inBoard2! LSS 0 (
  231.                         call :getPos X_DEST_BOX Y_DEST_BOX STATE_DEST_BOX
  232.                         if !STATE_DEST_BOX! LSS !BOX! (
  233.                             set /a "MOVEABLE=1, needRemoveBoxFromBoxOriginPos = ~ 0"
  234.                             REM 先移动箱子: 箱子先到目标位置, 然后从原位置移除, 箱子原位如果是球门, 空球门+1, 箱子新位置如果是球门, 空球门-1
  235.                             set /a "STATE_DEST_BOX_NEW= STATE_DEST_BOX | BOX, totalEmptyGoal += ^!^!(STATE_DEST & GOAL) - ^!^!(STATE_DEST_BOX & GOAL)"
  236.                             call :setPos X_DEST_BOX Y_DEST_BOX STATE_DEST_BOX_NEW
  237.                         )
  238.                     )
  239.                 )
  240.             )
  241.             if !MOVEABLE! equ 1 (
  242.                 set /a "STATE_DEST_NEW= ((needRemoveBoxFromBoxOriginPos & (STATE_DEST & ~BOX)) | (~needRemoveBoxFromBoxOriginPos & STATE_DEST)) | PUSHER"
  243.                 call :setPos X_DEST Y_DEST STATE_DEST_NEW
  244.                 call :getPos X Y STATE_SRC
  245.                 set /a "STATE_SRC_NEW= STATE_SRC & ~PUSHER"
  246.                 call :setPos X Y STATE_SRC_NEW
  247.                 set /a "X=X_DEST, Y=Y_DEST, BoardChanged = 1"
  248.                 set /a "mov=dir | (needRemoveBoxFromBoxOriginPos & BOX_MOVE_FLAG)"
  249.                 if not "!Movs!"=="" for %%i in (!p_Movs!) do set "nextRec=!Movs:~%%i,1!"
  250.                 set /a "same=0"
  251.                 if not "!Movs!"=="" if not "!nextRec!"=="" (
  252.                     set /a "same= ^! ((nextRec & 3) - (dir & 3)) "
  253.                 )
  254.                 if !same! EQU 0 (
  255.                     if !p_Movs! EQU 0 ( set "Movs=!mov!"
  256.                     ) else for %%i in (!p_Movs!) do set "Movs=!Movs:~0,%%i!!mov!"
  257.                 )
  258.                 set /a "p_Movs+=1"
  259.             )
  260.         )
  261.     )
  262. exit /b
  263. :setPos X Y STATE
  264. set /a "ind=%~1, lL=ind-1, lR=maxLineLen-ind"
  265. for /f "tokens=1-5" %%a in ("!lL! !ind! !lR! !%~2! !%~3!") do (set BL%%d=!BL%%d:~0,%%a!%%e!BL%%d:~%%b,%%c!)
  266. exit /b
  267. :getPos X Y STATE
  268. setlocal
  269. set /a "ind=%~1 -1"
  270. for /f "tokens=1-2" %%a in ("!ind! !%~2!") do (set STATE=!BL%%b:~%%a,1!)
  271. ( endlocal & set "%~3=%STATE%" & exit /b )
  272. :resetCursor
  273. setlocal
  274. set "BSS=%BS%" & for /L %%i in (1,1,12) do set "BSS=!BSS!!BSS!"
  275. (2>nul echo;!TAB!!BSS!)
  276. endlocal
  277. exit /b
  278. :PRINT_BOARD
  279. call :resetCursor
  280. call :strLen Movs SumMoves
  281. setlocal
  282. REM 居中显示 左边空白
  283. set /a "marginX=Columns-maxLineLen"
  284. set "SPS=" & for /L %%a in (1 2 !marginX!) do set "SPS=!SPS! "
  285. set "lvlDone="
  286. if %totalEmptyGoal% LEQ 0 (
  287.     set "lvlDone=  LEVEL %LEVELNUM% COMPLETED^^^! CONGRATULATIONS^^^!"
  288. )
  289. set "t=LEVEL %levelNum% !titles%levelNum%!         !tailSPS!"  & <nul set /p "=%BS%!t:~0,%Columns%!"
  290. for /L %%a in (1 1 !BLS%levelNum%!) do (
  291.     set "PL%%a=!BL%%a!"
  292.     for %%P in ("%ASCII219%:%WALL%" M:%PUSHER% M:%PUSHER_ON_GOAL% %ASCII178%:%BOX% #:%BOX_ON_GOAL% ".:%GOAL%" " :%FLOOR%") do (
  293.         for /f "tokens=1,2 delims=:" %%c in ("%%~P") do set "PL%%a=!PL%%a:%%d=%%c!"
  294.     )
  295.     set "t=!SPS!!PL%%a!                            !tailSPS!"  & <nul set /p "=%BS%!t:~0,%Columns%!"
  296. )
  297. set "t=Total empty goal: %totalEmptyGoal%%lvlDone% !tailSPS!"  & <nul set /p "=%BS%!t:~0,%Columns%!"
  298. set "t=      Move index: %p_Movs% / %SumMoves%     !tailSPS!"  & <nul set /p "=%BS%!t:~0,%Columns%!"
  299. set "t=        Key code: [!err!]                   !tailSPS!"  & <nul set /p "=%BS%!t:~0,%Columns%!"
  300. REM ----------------------------------------------  p_Movs -------------------------------------------- SumMoves
  301. REM                 x---------------------  (x+x+(Columns - 9))/2 ----------------- x+(Columns - 9)
  302. REM 行宽 - 6 >= SumMoves 时, Movs 完全显示, 否则让 p_Movs 指向的步居中显示
  303. REM "Movs:" 占 5 位, 行尾空 1 , [] 占 2 位, 最后一步 占 1 位, 共 9 位
  304. set /a "half=(Columns - 9)/2,lenLeft=half, iCS=p_Movs-1, ileft=iCS-half, t=ileft>>31, t1=iCS>>31"
  305. set /a "leftSPS=t & -ileft | ~t & 0, lenLeft=t & (lenLeft+ileft) | ~t & lenLeft"
  306. set /a "leftSPS=t1 & (leftSPS+iCS) | ~t1 & leftSPS, lenLeft=t1 & 0 | ~t1 & lenLeft"
  307. set /a "ileft=t & 0 | ~t & ileft"
  308. if "!Movs!"=="" (
  309.    set "t=Movs:                                 !tailSPS!"  & <nul set /p "=%BS%!t:~0,%Columns%!"
  310. ) else if !p_Movs! EQU 0 (
  311.     set "t=Movs:!tailSPS:~0,%leftSPS%![ ]!Movs:~%p_Movs%! !tailSPS!"  & <nul set /p "=%BS%!t:~0,%Columns%!"
  312. ) else (
  313.     set "t=Movs:!tailSPS:~0,%leftSPS%!!Movs:~%ileft%,%lenLeft%![!Movs:~%iCS%,1!]!Movs:~%p_Movs%! !tailSPS!"  & <nul set /p "=%BS%!t:~0,%Columns%!"
  314. )
  315. endlocal
  316. exit /b
  317. :initBoard
  318. set "Movs=" & set /a "p_Movs=0" &   REM 初始化步记录堆栈
  319. set /a "x=0, y=0, totalEmptyGoal=0"
  320. set "maxLineLen=0"
  321. for /L %%a in (1 1 !BLS%levelNum%!) do (
  322.     set "BL%%a=!boardlines%levelNum%_%%a!"
  323.     for %%P in (#:%WALL% @:%PUSHER% +:%PUSHER_ON_GOAL% $:%BOX% .:%GOAL% " :%FLOOR%" -:%FLOOR% _:%FLOOR%) do (
  324.         for /f "tokens=1,2 delims=:" %%c in ("%%~P") do set "BL%%a=!BL%%a:%%c=%%d!"
  325.     )
  326.     call :strLen BL%%a length
  327.     if !length! gtr !maxLineLen! set /a "maxLineLen=length"
  328.     set "t="
  329.     for /L %%i in (!length! -1 1) do (
  330.         set "c=!BL%%a:~-%%i,1!"
  331.         REM p P b B * 另行处理
  332.         if         "!c!"=="p" ( set "t=!t!%PUSHER%"         & set /a "X=length-%%i+1, Y=%%a"
  333.         ) else if  "!c!"=="P" ( set "t=!t!%PUSHER_ON_GOAL%" & set /a "X=length-%%i+1, Y=%%a, totalEmptyGoal+=1"
  334.         ) else if  "!c!"=="b" ( set "t=!t!%BOX%"
  335.         ) else if  "!c!"=="B" ( set "t=!t!%BOX_ON_GOAL%"
  336.         ) else if  "!c!"=="*" ( set "t=!t!%BOX_ON_GOAL%"
  337.         ) else                ( set "t=!t!!c!"
  338.             if         "!c!"=="%PUSHER%"            ( set /a "X=length-%%i+1, Y=%%a"
  339.             ) else if  "!c!"=="%PUSHER_ON_GOAL%"    ( set /a "X=length-%%i+1, Y=%%a, totalEmptyGoal+=1"
  340.             ) else if  "!c!"=="%GOAL%"              ( set /a "totalEmptyGoal+=1"
  341.             )
  342.         )
  343.     )
  344.     set "BL%%a=!t!"
  345. )
  346. REM 行长统一
  347. set "t=" & for /L %%i in (1 1 !maxLineLen!) do set "t=!t!0"
  348. for %%L in (!maxLineLen!) do for /L %%a in (1 1 !BLS%levelNum%!) do (
  349.     set "BL%%a=!BL%%a!!t!"
  350.     set "BL%%a=!BL%%a:~0,%%L!"
  351. )
  352. exit /b
  353. :readSokFile SokFile levelNum
  354. set /a "levelNum=%~2"
  355. set "state=fileHeader"
  356. set "lastline="
  357. set "thisline="
  358. set /a "cntTitle=0, cntboardLines=0, cntSolution_Moves=-1"
  359. for /f "usebackq eol=: delims=" %%l in ("%~1") do (
  360.     if !cntTitle! gtr !levelNum! (
  361.         exit /b
  362.     )
  363.     set "lastline=!thisline!"
  364.     set "thisline=%%l"
  365.     set /a "isBoardLine=0, isMoves=0"
  366.     for /f "tokens=* delims= " %%a in ("%%~l") do set str=%%a
  367.     if "!str:~0,1!"=="#" (                        set "isBoardLine=1"
  368.     ) else if "!str:~0,1!"=="*" (                 set "isBoardLine=1"
  369.     ) else if /i "!str:~0,8!"=="Solution"         set "isMoves=1"
  370.     if /i "!state!"=="fileHeader" (
  371.         if !isBoardLine! equ 1 (
  372.             if !cntTitle! EQU !levelNum! set /a BLS!cntTitle!=cntboardLines, SMS!cntTitle!=cntSolution_Moves
  373.                                          set /a cntTitle+=1, cntboardLines=0, cntSolution_Moves=-1
  374.             if !cntTitle! EQU !levelNum! set titles!cntTitle!=!lastline!
  375.             set "state=boardlines"
  376.         )
  377.     ) else if /i "!state!"=="boardlines" (
  378.         set /a "cntboardLines+=1"
  379.         if !cntTitle! EQU !levelNum! set "boardlines!cntTitle!_!cntboardLines!=!lastline!"
  380.         if !isBoardLine! neq 1 (
  381.             if !isMoves! equ 1 (    set "state=Solution_Moves"
  382.             ) else (                set "state=levelNotes"
  383.             )
  384.         )
  385.     ) else if /i "!state!"=="levelNotes" (
  386.         if !isBoardLine! equ 1 (
  387.             if !cntTitle! EQU !levelNum! set /a BLS!cntTitle!=cntboardLines, SMS!cntTitle!=cntSolution_Moves
  388.                                          set /a cntTitle+=1, cntboardLines=0, cntSolution_Moves=-1
  389.             if !cntTitle! EQU !levelNum! set titles!cntTitle!=!lastline!
  390.             set "state=boardlines"
  391.         ) else if !isMoves! equ 1     set "state=Solution_Moves"
  392.     ) else if /i "!state!"=="Solution_Moves" (
  393.         if !isBoardLine! equ 1 (
  394.             if !cntTitle! EQU !levelNum! set /a BLS!cntTitle!=cntboardLines, SMS!cntTitle!=cntSolution_Moves
  395.                                          set /a cntTitle+=1, cntboardLines=0, cntSolution_Moves=-1
  396.             if !cntTitle! EQU !levelNum! set titles!cntTitle!=!lastline!
  397.             set "state=boardlines"
  398.         ) else (
  399.             set /a "cntSolution_Moves+=1"
  400.             if !cntTitle! EQU !levelNum! if !cntSolution_Moves! geq 1 set "S_M!cntTitle!_!cntSolution_Moves!=!lastline!"
  401.         )
  402.     )
  403. )
  404. REM 选取最后一关时的必要设置
  405. if !cntTitle! EQU !levelNum! set /a BLS!cntTitle!=cntboardLines, SMS!cntTitle!=cntSolution_Moves
  406. exit /b
  407. :autoResizeScr marginH marginV
  408. setlocal
  409. for /f "tokens=1-2 delims=:" %%a in ('mode ^| find /i "s:" ^| find /i "n"') do set /a "%%a=%%b"
  410. set /a "sizeMinH = maxLineLen + %~1, sizeMinV = BLS%levelNum% + %~2"
  411. set /a "resize = Lines - sizeMinV | Columns - sizeMinH"
  412. set /a "Lines = (t = Lines - sizeMinV >> IMSB, t & sizeMinV | ~t & Lines)"
  413. set /a "Columns = (t = Columns - sizeMinH >> IMSB, t & sizeMinH | ~t & Columns)"
  414. if %resize% lss 0 mode %Columns%, %Lines%
  415. (
  416. endlocal
  417. REM 获取屏幕当前 Lines  Columns 变量
  418. for /f "tokens=1-2 delims=:" %%a in ('mode ^| find /i "s:" ^| find /i "n"') do set /a "%%a=%%b,%%a_1=%%b-1"
  419. exit /b
  420. )
  421. REM end of :autoResizeScr
  422. REM ***
  423. :getBackSpaceAndASCII219_178
  424. call :getASCII219_178
  425. for %%a in (219 178) do (
  426. >nul copy %%a.chr /b + 13.chr /b %%a_CR.chr /b
  427. <%%a_CR.chr set /p "ASCII%%a="
  428. )
  429. for %%a in (219 178) do for %%N in (13 %%a %%a_CR) do 2>nul del %%N.chr
  430. for /F %%a in ('"prompt $h&for %%b in (1) do rem"')do Set "BS=%%a"
  431. exit /b
  432. REM end of :getBackSpaceAndASCII219_178
  433. REM ***
  434. :getASCII219_178
  435. setlocal
  436. set ^"genchr=(^
  437.   for %%N in (13 219 178) do if not exist %%N.chr (^
  438.   makecab /d compress=off /d reserveperdatablocksize=26 /d reserveperfoldersize=%%N 0.tmp %%N.chr ^>nul^&^
  439.   type %%N.chr ^| ((for /l %%n in (1 1 38) do pause)^>nul^&findstr "^^" ^>%%N.temp)^&^
  440.   ^>nul copy /y %%N.temp /a %%N.chr /b^&^
  441.   del %%N.temp^
  442.   )^
  443. )^&^
  444. del 0.tmp^"
  445. for %%N in (13 219 178) do (del /f /q /a %%N.chr >nul 2>&1)
  446. type nul >0.tmp
  447. cmd /q /v:on /c "%genchr%"
  448. endlocal
  449. exit /b
  450. REM end of :getASCII219_178
  451. REM ***
  452. :strLen str len
  453. (
  454.   setlocal enabledelayedexpansion
  455.   set "len=0" & set "T=!%~1!#"
  456.   for %%i in (4096 2048 1024 512 256 128 64 32 16 8 4 2 1) do if "!T:~%%i!" neq "" set /a "len |= %%i" & set "T=!T:~%%i!"
  457. )
  458. (
  459.   endlocal
  460.   set "%~2=%len%"
  461.   exit /b
  462. )
  463. :initGlobalVars
  464. REM state constants, don't modify
  465. set /a           "FLOOR  =  0"
  466. set /a            "GOAL  =  1"
  467. set /a             "BOX  =  2"
  468. set /a     "BOX_ON_GOAL  =  BOX | GOAL"
  469. set /a          "PUSHER  =  4"
  470. set /a  "PUSHER_ON_GOAL  =  PUSHER | GOAL"
  471. set /a            "WALL  =  8"
  472. set /a   "BOX_MOVE_FLAG  =  4"
  473. set /a "p_Movs=0"
  474. for /l %%i in (7 8 127) do set /a "_=1<<%%i>>%%i>>1, IMSB=_&%%i|~_&IMSB"
  475. call :getBackSpaceAndASCII219_178
  476. set "TAB= "
  477. set "tailSPS= " & for /L %%i in (1,1,10) do set "tailSPS=!tailSPS!!tailSPS!"
  478. exit /b
  479. :B64DECODE "%~f0" "inFile.B64" "outFilePath" BaseLineLength Base64Size
  480. echo;&echo;making %~3...&echo;
  481. setlocal enabledelayedexpansion
  482. if "%~5"=="" (set /a "b64sz = 0"
  483. ) else set /a "b64sz = %~5 >> 2"
  484. set /a "cntQuad=0"
  485. >"%~3" cd.
  486. set "cs=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
  487. for /L %%i in (0 1 63) do (
  488.     if %%i geq 26 (         set "#!cs:~%%i,1!=%%i"
  489.     ) else (                set "_!cs:~%%i,1!=%%i"   ) )
  490. for /f "delims=:" %%a in ('findstr /n /i "^:BEGIN:%~2" "%~1"') do set "sk=%%a"
  491. for /f "useback skip=%sk% delims=" %%f in ("%~1") do (
  492.     if /i "%%f"==":END:%~2" (
  493.         echo;& endlocal & exit /b
  494.     ) else (
  495.         set "line=%%f"&set "line=!line: =!" & REM BASE64 代码中用插入空格规避了敏感字
  496.         set /a "I1=%~4 - 1"
  497.         for /L %%i in (0 1 !I1!) do (
  498.             set /a "j = %%i %% 4"
  499.             set "c=!line:~%%i,1!"
  500.             if "!c!"=="" (
  501.                 if !j! equ 0 (      echo;& endlocal & exit /b
  502.                 ) else (            set "t=-1"
  503.                 )
  504.             ) else (
  505.                 if "!c!"=="=" (     set "t=-1"
  506.                 ) else (
  507.                     for %%b in (!c!) do set "t=!_%%~b!"
  508.                     for /f "delims=ABCDEFGHIJKLMNOPQRSTUVWXYZ" %%b in ("!c!") do set "t=!#%%~b!"
  509.                 )
  510.             )
  511.             set "s!j!=!t!"
  512.             if !j! equ 3 (
  513.                 if !b64sz! neq 0 (
  514.                     set /a "cntQuad+=1, pct= cntQuad * 100 / b64sz"
  515.                     <nul set /p "=%BS%%BS%%BS%%BS%%BS%%BS%%BS%%BS%%BS%%BS%%BS%%BS%%BS%%BS%%BS%%BS%%BS%!pct!%% complete..."
  516.                 )
  517.                 set /a "B1 = (s0 << 2 | s1 >> 4) & 0xFF,  B2 = (s1 << 4 | s2 >> 2) & 0xFF, B3 = (s2 << 6 | s3) & 0xFF"
  518.                 if !s1! geq 0 (
  519.                     >nul copy /B "%~3" /B  + "CHRs\!B1!.chr" /B "%~3" /B
  520.                     if !s2! geq 0 (
  521.                         >nul copy /B "%~3" /B  + "CHRs\!B2!.chr" /B "%~3" /B
  522.                         if !s3! geq 0 (
  523.                             >nul copy /B "%~3" /B  + "CHRs\!B3!.chr" /B "%~3" /B
  524.                         )
  525.                     )
  526.                 )
  527.             )
  528.         )
  529.     )
  530. )
  531. endlocal & echo; & exit /b
  532. :genAllChr
  533. setlocal DISABLEDELAYEDEXPANSION
  534. >nul chcp 437
  535. echo;making all ASCII characters, please waiting...
  536. set ^"genchr=(^
  537. for /l %%N in (%%A !cnt! 255) do (^
  538.   if %%N equ 26 (^
  539.     copy /y nul + nul /a 26.chr /a ^>nul^
  540.   ) else (if %%N geq 35 if %%N leq 126 if %%N neq 61 (^
  541.     ^<nul set /p "=!ascii:~%%N,1!" ^>%%N.chr^
  542.   ))^&^
  543.   if not exist %%N.chr (^
  544.     makecab /d compress=off /d reserveperdatablocksize=26 /d reserveperfoldersize=%%N %%A.tmp %%N.chr ^>nul^&^
  545.     type %%N.chr ^| ((for /l %%n in (1 1 38) do pause)^>nul^&findstr "^^" ^>%%N.temp)^&^
  546.     ^>nul copy /y %%N.temp /a %%N.chr /b^&^
  547.     del %%N.temp^
  548.   )^
  549. ))^&^
  550. del %%A.tmp^"
  551. del /f /q /a *.chr >nul 2>&1
  552. set "ascii=                                   #$%%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~"
  553. set /a cnt=number_of_processors
  554. if %cnt% lss 1 set cnt=1
  555. if %cnt% gtr 256 set cnt=256
  556. set /a "end=cnt-1"
  557. for /l %%A in (0 1 %end%) do (
  558.   type nul >%%A.tmp
  559.   if %%A equ %end% (
  560.     cmd /q /v:on /c "%genchr%"
  561.   ) else (
  562.     start "" /b cmd /q /v:on /c "%genchr%"
  563.   )
  564. )
  565. :genAllChr.check
  566. for /l %%N in (0 1 %end%) do if exist %%N.tmp goto :genAllChr.check
  567. endlocal
  568. exit /b
  569. :clearVars
  570. set "Path=%SystemRoot%\system32"
  571. for /f "delims==" %%a in ('set') do (
  572.   if /i "%%a" neq "Path" set "%%a="
  573. )
  574. exit /b
  575. :BEGIN:neoGetKey.exe.B64
  576. TVqQAAMAAAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAA4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5vdCBiZSBydW4gaW4gRE9TIG1vZGUuDQ0KJAAAAAAAAABQRQAATAEDAOOM01cAAAAAAAAAAOAADwMLAQI4ABAAAAAQAAAAYAAAsHgAAABwAAAAgAAAAABAAAAQAAAAAgAABAAAAAEAAAAEAAAAAAAAAACQAAAAEAAAAAAAAAMAAAAAACAAABAAAAAAEAAAEAAAAAAAABAAAAAAAAAAAAAAAACAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFVQWDAAAAAAAGAAAAAQAAAAAAAAAAIAAAAAAAAAAAAAAAAAAIAAAOBVUFgxAAAAAAAQAAAAcAAAAAwAAAACAAAAAAAAAAAAAAAAAABAAADgVVBYMgAAAAAAEAAAAIAAAAACAAAADgAAAAAAAAAAAAAAAAAAQAAAwDMuOTEAVVBYIQ0JAgrCw18ftsEocflSAACOCAAAABgAAAAAAEz/////VYnlg+wYiV34i1UIMduJdfyLAjH2iwA9kQAAwHdDPY3/5pd3BnJbvgEAxwQkCDHAiUQkBOjk7oP9dwuD+AF0bIXAdCoa/9C7/wA322/uidiLRlGJ7F3CBEmTdL09zfbCvpQGuxuNdh4FdQZpfrroXAv2iXSHNBtsN2vNGlzroWe7js/9TfeJXChehfZ0iOiFAxZ8urM32OuBL7kkj0wpNHQD+23pYiANkAD/U/t+Vy4AJI03ABBAAOjKfOwx93ZzdzID80X4ALgAQBiNVfRzuvahfRCLDQAgDAOJVI1bDHdu0+w4BEABoRAJtVijEHeFu3clixUkUQ7SD4VRVPrgdP3/frEgID2LHRuLSzCJDCTotgcAGWubmywkPBsbJVxvs3ykDVFQiRSQ6Hsq3rvtax+DGP8CVuTw6EYU9u1e+4wIRauaBKGUiZstW/vh6Kktw+gSIw4c+mHfke8HgBVCECM1gHg3mIUkVZiNvCf63H0axh8IgwEVHCHoyP65ZMK+kI20Jh8CqP3NbAPBNCVd/+GNdCbhQRjyDyh/XemXahr+HoKPuBCu5VdWlhx92P02KQjetwX4UgKP7Og/3P3fKzH/g/sBxkXrAL74rA+P1V37An5vv/tvL00Mi0EID7YAHHg8WHQLiAc8RA+/sb3vhNwAO/CQIuzq7IXJD5Q/xsb/wDlV8A+cwgnQqGl9U+sKkEOBPrzx3fv+CX9CjUPwggJ27zKnBr/whTESZth534PGZ9iJ8dPgO7O1/wnHg/4Xfs+AfWlgoAlkdIPwf+NjjWUm+FteX13Dhf914jjo7wTWunXB/4B8dYNDizn32HR1Pz64/y9EQizcumdhDKAExECJ/ekVm+WufNB8WAAwQJzri4oFc3fuZOkbGhZEBjvmRqd8Hw3rqzYDSHO2eWXpUTADuvAlfc1US1DNH7nwMP2NEf6u6xSNtj5ROAGDwQgBgiC1360LF4H5HXLqqU/TMy472+MOkB+hIA00JDXaCPgBf/8vvXfPUBxXjUEEowovdenJesOxjMNfCMxAGkAwvlHuEv90Kct0E4n2n22z+3v/FJ0aS3X22mAUiv3V0Fpuw1tbOw1EGK50e3b3vtZAixSFDVr0673Jjb9fK3akAyC3dTZoYI8j3zsdE3MlD5C/1lFyZW8awW8rPcYToXBA/otIBAHGXtvHeFW6Qu9TD7fAh2RTdGgGtmioiQj3bcNquFH0UJ0f0CIM727/36UH60YByUp4DoB8KqhBYQnLDXnygzvDhQ20PBlgXfw9uTTUp+O5zuqhVRlhnl3z5IAwQJICrCa75ERLmnBpXOvXeP8a3sNPioHszPsNu8QIWu7SMJ9TmEEA1Djb2e5GjXWYDpwGoMnJ5t6uuKEUGBWkqHxyMvK8oRissMChHHkzn420DsShIAfIoSSFkUcezKEo0KEs1C9pWGrdBTAJZgqNNCfwV8EwgkMErXwX4J6m8oU7AYE8o+479m7px6tZFfyJx4skuQ8c5W3Cv/Orx0MEoBlAYwsIcBVvgde1oeuPAzwZRAttm9/MQyiDQxShMCBTGBc0DLav/QhDHKF8ECAiMHGHsc12QywaPKE4KDjAHVwodCc0758hyNoZWHB/4cAkILQEQYiEKkgwved0B7NFQ7hoNQpsz8gz8hhwHHQg4Yw8I3gkfCHvSwY5gISIjYVlrTPCGE/oJ/ifCe6r40Ix0qIe43P6SAqODS4dS+hf2jEtFTiUCPYPnWBbwTiPBwijgALs6FzrF7o4JjmF+nWx67E/RwO7HjDvUYnhLT0A1e/+/HtyEIHpB4MJAC3r6SnBC4ngicwwrKVbGotADuAvlmbruFhFFJAQBhAMDEfiY2kICLihJsBAHNiBAxWqD95zL8s96ckEXyUEHgcMyRZsAAAPHCCQDMmQFFDJkAzJGCwQDMmQDEw4RJAMyZBIMMmQDMk8QFyG5EIO+FDs9EKGZEjw6BBMjESvR3ZfpPlc3QAw6QD/ACUQiiizSckXNkAzUBpARhSFwO8goYjCFoD8VBElZAAleP7///8tTElCR0NDVzMyLUVILTItU0pMSi1HVEhSLU1JTkf//1tnI3cFX3NoYXJlZHB0ci0+c2l6ZSD9l+7vPT0gB29mKDpfX1NIQVJFRCn9f/u/XXM6JXU6IGZhaWwvIGFzc2VydGlvbiBgG7t7uxgnCksuLi8CZ2NjA2MYu5Puf2ZpZy9pMzg2L2UtLWYuY1v3/28rR2V0QXRvbU5hbWVBIChhCix0LCCw/WF3cykpICGFMDKKslQRJ1AVkCRcySt5wFIkU9QpbDKANANs0zTLZFFwgIycURvpmgG7vAvI2APo0zTLpvgMUhggLE3TNE04QExUYGy8bNM0dICMUn+YUoCwFYADHdlKJlAAFNiq7JATKFADACICqx48UCFQAYAtA03Ql8186EABQWRkXEFhb/9vCUV4aXRQcm9jZXNzDEZpbhcv3ZKgfg1TVW5oba0EtWEd1jEscM32zQTVLWx0ZXJViRC+b7ebQV9fZydtYURhcmdzDnD3g23fAmVudmlebg1mbW9kZSjX3tvLc19hcBF0eXAPUYabNbc5B1ViBS4OJb+3+9kwYWJvchBhdBgHb2nb3Tb/AAFmZmx1c2hwcnJ0ZghyZSs+rLWbgGxszwcVc2lnWhs525BspgRzxcH9f6fZEJRc63N5bmNLZXlTdF+CM8Bjf0X4AQUA4/nfAe+M01cPfeAADwMLAQI4AAy6twWdAwIsEv8hIHumO3tACwJrAHM872zPDmAMwNgPAzAhT3C+EAcQABBhKLJ3QCgALmQGNtiudAdUCpAMxNls4cnKYC5kKmHx+84eG9kCwBvALnIo8HhKBvknMBJALmJdIE/ngpuwQIAGG2HyT2kbUJsUxGDByncwLQAAACjYACQAAP8AAAAAAAAAAAAAAAAAYL4VcEAAjb7rn///V+sLkIoGRogHRwHbdQeLHoPu/BHbcu24AQAAAAHbdQeLHoPu/BHbEcAB23PvdQmLHoPu/BHbc+QxyYPoA3INweAIigZGg/D/dHSJxQHbdQeLHoPu/BHbEckB23UHix6D7vwR2xHJdSBBAdt1B4seg+78EdsRyQHbc+91CYseg+78Edtz5IPBAoH9APP//4PRAY0UL4P9/HYPigJCiAdHSXX36WP///+QiwKDwgSJB4PHBIPpBHfxAc/pTP///16NvgBQAACLBwnAdDyLXwSNhDAAcAAAAfNQg8cI/5ZQcAAAlYoHRwjAdNyJ+VdI8q5V/5ZUcAAACcB0B4kDg8ME6+H/lmRwAACLrlhwAACNvgDw//+7ABAAAFBUagRTV//VjYefAQAAgCB/gGAof1hQVFBTV//VWGGNRCSAagA5xHX6g+yA6RuY//8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8gAAAUIAAAAAAAAAAAAAAAAAAAImAAABsgAAAAAAAAAAAAAAAAAAAlIAAAHSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ6AAACsgAAAvIAAAMyAAADagAAA6IAAAAAAAAD2gAAAAAAAAPyAAAAAAAAAS0VSTkVMMzIuRExMAG1zdmNydC5kbGwAVVNFUjMyLmRsbAAATG9hZExpYnJhcnlBAABHZXRQcm9jQWRkcmVzcwAAVmlydHVhbFByb3RlY3QAAFZpcnR1YWxBbGxvYwAAVmlydHVhbEZyZWUAAABFeGl0UHJvY2VzcwAAAF9pb2IAAEdldEFzeW5jS2V5U3RhdGUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
  577. :END:neoGetKey.exe.B64
  578. :BEGIN:Holland.cab.B64
  579. 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
  580. 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
  581. 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
  582. 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
  583. 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
  584. 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
  585. :END:Holland.cab.B64
复制代码

作者: 523066680    时间: 2016-9-12 09:14

本帖最后由 523066680 于 2016-9-12 10:32 编辑
making all ASCII characters, please waiting...


每次打开脚本都显示这个,然后不知道怎么开始玩…… 好像是卡在这一步了

win7 64, avast已经禁用的情况下
作者: aa77dd@163.com    时间: 2016-9-12 09:26

回复 2# 523066680

:genAllChr 源自 dostips
Create nul and all ascii characters with only batch
http://www.dostips.com/forum/viewtopic.php?p=32485#p32485

这个版本已经是我能找到的最快的了, 读取了 CPU 核心数, 用多进程并发运行的
set /a cnt=number_of_processors
作者: aa77dd@163.com    时间: 2016-9-12 10:29

按键响应工具 neoGetKey.exe 用 C 语言编写,  最多可以响应 4 个按键同时按下

返回值为 按键 Virtual-Key Code 的组合, 是一个 32 位整数.

设二进制位序 由高到低 依次是 31,30,29,...3,2,1,0

当仅有 1 个按键按下时, 只在最低的 8 位设为该键的  Virtual-Key Code, 其余 24 位全部置 0;

当有 2 个按键按下时, 最低的 8 位设为 Virtual-Key Code 最小的那个, 第 2 个 8 位 (即第 15 - 第 8 位) 设为 Virtual-Key Code 更大的那个, 其余 16 位全部置 0;

当有 3 个按键按下时, 最低的 8 位设为 Virtual-Key Code 最小的那个, 第 2 个 8 位 (即第 15 - 第 8 位) 设为 Virtual-Key Code 更大的那个,
        第 3 个 8 位 (即第 23 - 第 16 位) 设为 Virtual-Key Code 更更大的那个, 其余 8 位全部置 0;

当有 4 个按键按下时, 最低的 8 位设为  Virtual-Key Code 最小的那个, 第 2 个 8 位 (即第 16 - 第 8 位) 设为 Virtual-Key Code 更大的那个,
        第 3 个 8 位 (即第 23 - 第 16 位) 设为 Virtual-Key Code 更更大的那个, 最高的 8 位(即第 31 - 第 24 位) 设为最大的 Virtual-Key Code.
  1. #include <Windows.h>
  2. #include <stdio.h>
  3. int main(int argc, char** argv) {
  4.     int i, t = 1000, r=0, kshift=-8;
  5.     char show = '\0';
  6.     if (argc >= 2) t = atoi(argv[1]);
  7.     if (argc >= 3) {
  8.         show = (**(argv + 2) == 'X') ? 'x' : (**(argv + 2) == 'D') ? 'd' : **(argv + 2);
  9.     }
  10.     for (i = 0; t == 0 || i < t; i++) {
  11.         int x;
  12.         for (x = 1; x <= 254; x++) {
  13.             if (x==VK_SHIFT || x==VK_CONTROL || x==VK_MENU)
  14.                 continue;
  15.             if (GetAsyncKeyState(x) & 0x8000) {
  16.                 r |= x << (kshift += 8);
  17.                 if (kshift >= 24) {
  18.                     if (show == 'x') printf("%x", r);
  19.                     if (show == 'd') printf("%d", r);
  20.                     return r;
  21.                 }
  22.             }
  23.         }
  24.         if (r != 0) {
  25.             if (show == 'x') printf("%x", r);
  26.             if (show == 'd') printf("%d", r);
  27.             return r;
  28.         }
  29.         sleep(1);
  30.     }
  31.     if (show == 'x') printf("%x", 255);
  32.     if (show == 'd') printf("%d", 255);
  33.     return 255;
  34. }
复制代码

作者: aa77dd@163.com    时间: 2016-9-12 10:54

回复 2# 523066680

neoGetKey.exe 和 Holland.sok 这两个文件如果已经生成好,
这个过程
making all ASCII characters, please waiting...

是会跳过的

我在 中文 WIN 7 64 位上测试没有发现你遇到的问题, 可以检查下 makecab.exe 和 expand.exe 是否存在

无论怎样, 我给出 包含 neoGetKey.exe 和 Holland.sok 独立文件的包

链接: http://pan.baidu.com/s/1kUSWh9d 密码: c527
作者: 523066680    时间: 2016-9-12 11:18

本帖最后由 523066680 于 2016-9-12 11:32 编辑

下载了打包的文件,卡在这里了
  1. cmd /v:on /c "%genchr%"
  2. endlocal
  3. exit /b
  4. REM end of :getASCII219_178
复制代码
  1. "(  for %N in (13 219 178) do if not exist %N.chr (  makecab
  2. /d compress=off /d reserveperdatablocksize=26 /d reserveper
  3. foldersize=%N 0.tmp %N.chr >nul&  type %N.chr | ((for /l %n
  4. in (1 1 38) do pause)>nul&findstr "^" >%N.temp)&  >nul copy
  5. /y %N.temp /a %N.chr /b&  del %N.temp  ))&del 0.tmp"
复制代码
以及我觉得既然可以生成exe了,生成字符文件这些事情这些也应该交给exe去做
作者: aa77dd@163.com    时间: 2016-9-12 11:46

本帖最后由 aa77dd@163.com 于 2016-9-12 11:55 编辑

回复 6# 523066680


原代码 有 /q 参数的, 你是开回显调试啊
  1. cmd /q /v:on /c "%genchr%"
复制代码
另外生成文件的方式是

先生成输出所有只包含单个 ASCII 字符 的 255 个 1 字节的文件

再用
copy /b file /b + 某个 ASCII 字符 文件 /b  file /b

这样一个字节一个字节组装的
作者: 523066680    时间: 2016-9-12 11:55

回复 7# aa77dd@163.com


    哦,想去掉看看有没有显示,其实还是卡那里了,具体的我等下再试试具体位置。工作先
作者: aa77dd@163.com    时间: 2016-9-12 12:22

本帖最后由 aa77dd@163.com 于 2016-9-12 12:38 编辑

回复 8# 523066680

给你个只用普通字符显示的版本, 应该不会有问题了
链接: http://pan.baidu.com/s/1pLMsDar 密码: 7ska

我估计你那边是 makecab.exe 不存在, 或者其路径没有在 %path% 中
  1. M   人
  2. #   墙
  3. $   未到达目标位置的箱子
  4. +   已到达目标位置的箱子
  5. .   空的目标位置
  6. 要改变以上字符设置, 修改 (过程 :PRINT_BOARD 中) 第 394 行即可
复制代码
先按 F1 键, 再按 P 键, 就可以自动运行解答了, 中途可以随时打断接管控制, 比如中途按下 U 键
作者: a2002    时间: 2017-7-1 22:28

我觉得那个:Genallchr换成certutil -decode好一些、快一些




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