[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
学着也做了一个,提了点速度
  1. @echo off&setlocal enabledelayedexpansion
  2. ::设定
  3. set "墙=█"
  4. set "路=∷"
  5. set /a 行=40,列=40,屏宽=列*2+1,屏高=行+1
  6. for /l %%a in (1,1,!列!) do set one=!one!!墙!
  7. for /l %%a in (1,1,!行!) do set one%%a=!one!
  8. mode con: lines=!屏高! cols=!屏宽!
  9. cls
  10. rem 指定起点
  11. set one2=!one2:~,2!%路%!one2:~3!
  12. set/a #行=2,#列=2
  13. for /l %%a in (1,1,!行!) do echo;!one%%a!
  14. call :活点 !#行! !#列!
  15. rem 求一个点的四周有几个是可走的,可走的点四周最必须有三个空地
  16. set "stos=!sto:* =!"
  17. :lp
  18. rem 如果有三个格说明是活的
  19. if "!str!" equ "%墙%%墙%%墙%" (
  20. rem echo;替换一个
  21.   rem 替换一个位置
  22.   set /a #列0=#列+1
  23.   for /f "tokens=1,2" %%1 in ("!#列! !#列0!") do (
  24.     set one%#行%=!one%#行%:~,%%1!%路%!one%#行%:~%%2!
  25.   )
  26. cls
  27. for /l %%a in (1,1,!行!) do echo;!one%%a!
  28.   for /f "tokens=1*" %%a in ("!sto!") do (
  29.      set v=%%a
  30.      set stos=%%b !stos!
  31.   )
  32. ) else (
  33. rem echo;放弃一个
  34.   for /f "tokens=1*" %%a in ("!stos!") do (
  35.      set v=%%a
  36.      set stos=%%b
  37.   )
  38. )
  39.      call :活点 !v:.= !
  40. if defined stos goto :lp
  41. pause >nul
  42. goto :eof
  43. :活点 行%1 列%2
  44. rem echo;检测 %1.%2
  45. set/a #行=%1,#列=%2
  46. set str=
  47. set sto=
  48. if %1 leq 0 goto :eof
  49. if %2 leq 0 goto :eof
  50. if %1 geq %行% goto :eof
  51. if %2 geq %列% goto :eof
  52. set/a #上=%1-1,#下=%1+1,#左=%2-1,#右=%2+1
  53. set 上█=!#上!.%2
  54. set 下█=!#下!.%2
  55. set 左█=%1.!#左!
  56. set 右█=%1.!#右!
  57. for %%a in ("上!one%#上%:~%2,1!" "下!one%#下%:~%2,1!" "左!one%1:~%#左%,1!" "右!one%1:~%#右%,1!") do (
  58.     if defined %%~a (
  59.        rem 根据随机数最后一位是否大于4来定先后
  60.        if "!random:~-1!" gtr "4" (set sto=!sto! !%%~a!) else (set sto=!%%~a! !sto!)
  61.     set str=!str!█)
  62. )
  63. goto :eof
复制代码
4

评分人数

    • plp626: 算法了得技术 + 1
    • CrLf:技术 + 1
    • neorobin: 这样提速是不对的!技术 + 1
    • fatcat: 只提了这么点速度啊!技术 + 1

TOP

cjiabing 抬举我了。

这里没有比的意思,我只是不想大家过于认为批处理脚本的效率是那么的低。所以花了点时间研究才得出来这个代码的。希望大家一起共同学习,共同提高。其实那个代码还有BUG,并且还有可以提速度的地方,看看有兴趣的朋友再改改看。

TOP

新算法,生成的迷宫更美观。
  1. @echo off&rem 纯批处理迷宫随机生成器
  2. set a=!
  3. set b=!a!
  4. rem 变量多层嵌套初始化
  5. set r=7
  6. rem %r% 定义生成迷宫的属性:(0到9)值越小分支越多,值越大主线越长,分支越少。
  7. set /a 行=40,列=40,屏宽=列*2+1,屏高=行+1,出列=列-1,出行=行-1
  8. rem 定义迷宫大小。
  9. set sto=1$2$上
  10. rem 定义出口
  11. set 出=%行%.%出列% %出行%.%出列%
  12. rem 定义入口
  13. title r=%r%  行=%行%,列=%列%
  14. set/a r=r %% 10
  15. setlocal enabledelayedexpansion
  16. set "墙=■"
  17. set "路= "
  18. for /l %%a in (1,1,!行!) do (
  19. set L%%a=
  20. for /l %%b in (1,1,!列!) do set o%%a.%%b=%墙%&set L%%a=!L%%a!!a!o%%a.%%b!a!
  21. )
  22. set S右=!a!#上!a!$!a!#列!a!$下 !a!#行!a!$!a!#左!a!$右 !a!#下!a!$!a!#列!a!$上
  23. set S左=!a!#上!a!$!a!#列!a!$下 !a!#行!a!$!a!#右!a!$左 !a!#下!a!$!a!#列!a!$上
  24. set S上=!a!#行!a!$!a!#左!a!$右 !a!#行!a!$!a!#右!a!$左 !a!#下!a!$!a!#列!a!$上
  25. set S下=!a!#行!a!$!a!#左!a!$右 !a!#行!a!$!a!#右!a!$左 !a!#上!a!$!a!#列!a!$下
  26. set F右=!b!o!a!#上!a!.!a!#列!a!!b!!b!o!a!#上!a!.!a!#左!a!!b!!b!o!a!#行!a!.!a!#左!a!!b!!b!o!a!#下!a!.!a!#左!a!!b!!b!o!a!#下!a!.!a!#列!a!!b!
  27. set F左=!b!o!a!#上!a!.!a!#列!a!!b!!b!o!a!#上!a!.!a!#右!a!!b!!b!o!a!#行!a!.!a!#右!a!!b!!b!o!a!#下!a!.!a!#右!a!!b!!b!o!a!#下!a!.!a!#列!a!!b!
  28. set F上=!b!o!a!#行!a!.!a!#左!a!!b!!b!o!a!#下!a!.!a!#左!a!!b!!b!o!a!#行!a!.!a!#右!a!!b!!b!o!a!#下!a!.!a!#右!a!!b!!b!o!a!#下!a!.!a!#列!a!!b!
  29. set F下=!b!o!a!#行!a!.!a!#左!a!!b!!b!o!a!#上!a!.!a!#左!a!!b!!b!o!a!#行!a!.!a!#右!a!!b!!b!o!a!#上!a!.!a!#右!a!!b!!b!o!a!#上!a!.!a!#列!a!!b!
  30. ::  上
  31. ::左中右
  32. ::  下
  33. mode con: lines=!屏高! cols=!屏宽!
  34. for /l %%z in () do (
  35. for /f "tokens=1*" %%x in ("!sto!") do (
  36. set sto=%%y
  37. for /f "tokens=1,2,3 delims=$" %%7 in ("%%x") do (
  38. set/a #行=%%7,#列=%%8,#上=#行-1,#下=#行+1,#左=#列-1,#右=#列+1
  39. if "!random:~-1!" gtr "4" (set s%%9=!s%%9:~12!!s%%9:~,12!) else (set s%%9=!s%%9:~24!!s%%9:~,24!)
  40. for /f "tokens=*" %%a in ("!F%%9! !S%%9!") do for /f "tokens=1*" %%b in ("%%a") do (
  41. if "%%b" equ "%墙%%墙%%墙%%墙%%墙%" (
  42. set o!#行!.!#列!=%路%
  43. for %%A in (%%c) do (
  44. for /f "tokens=1,2,3 delims=$" %%1 in ("%%~A") do (
  45. set/a #行=%%1,#列=%%2,#上=#行-1,#下=#行+1,#左=#列-1,#右=#列+1
  46. for /f %%B in ("!F%%3!") do for /f %%C in ("%%B") do if "%%C" equ "%墙%%墙%%墙%%墙%%墙%" (
  47. if "!random:~-1!" gtr "%r%" (set sto=!sto! %%A) else (set sto=%%A !sto!)
  48. )
  49. )
  50. )
  51. )
  52. )
  53. )
  54. )
  55. if not defined sto call :fins
  56. )
  57. :fins
  58. for %%a in (%出%) do set o%%a=入
  59. cls&for /l %%a in (1,1,!行!) do for /f %%b in ("!L%%a!") do echo;%%b
  60. set /p in=计算结束,回车关闭。
  61. exit
复制代码

TOP

返回列表