新算法,生成的迷宫更美观。- @echo off&rem 纯批处理迷宫随机生成器
- set a=!
- set b=!a!
- rem 变量多层嵌套初始化
-
- set r=7
- rem %r% 定义生成迷宫的属性:(0到9)值越小分支越多,值越大主线越长,分支越少。
-
- set /a 行=40,列=40,屏宽=列*2+1,屏高=行+1,出列=列-1,出行=行-1
- rem 定义迷宫大小。
-
- set sto=1$2$上
- rem 定义出口
-
- set 出=%行%.%出列% %出行%.%出列%
- rem 定义入口
-
- title r=%r% 行=%行%,列=%列%
-
- set/a r=r %% 10
-
- setlocal enabledelayedexpansion
-
- set "墙=■"
- set "路= "
-
-
- for /l %%a in (1,1,!行!) do (
- set L%%a=
- for /l %%b in (1,1,!列!) do set o%%a.%%b=%墙%&set L%%a=!L%%a!!a!o%%a.%%b!a!
-
- )
-
-
-
- set S右=!a!#上!a!$!a!#列!a!$下 !a!#行!a!$!a!#左!a!$右 !a!#下!a!$!a!#列!a!$上
- set S左=!a!#上!a!$!a!#列!a!$下 !a!#行!a!$!a!#右!a!$左 !a!#下!a!$!a!#列!a!$上
- set S上=!a!#行!a!$!a!#左!a!$右 !a!#行!a!$!a!#右!a!$左 !a!#下!a!$!a!#列!a!$上
- set S下=!a!#行!a!$!a!#左!a!$右 !a!#行!a!$!a!#右!a!$左 !a!#上!a!$!a!#列!a!$下
-
-
-
- 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!
- 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!
- 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!
- 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!
-
-
- :: 上
- ::左中右
- :: 下
-
- mode con: lines=!屏高! cols=!屏宽!
-
-
-
- for /l %%z in () do (
-
- for /f "tokens=1*" %%x in ("!sto!") do (
- set sto=%%y
-
- for /f "tokens=1,2,3 delims=$" %%7 in ("%%x") do (
- set/a #行=%%7,#列=%%8,#上=#行-1,#下=#行+1,#左=#列-1,#右=#列+1
-
- if "!random:~-1!" gtr "4" (set s%%9=!s%%9:~12!!s%%9:~,12!) else (set s%%9=!s%%9:~24!!s%%9:~,24!)
-
-
- for /f "tokens=*" %%a in ("!F%%9! !S%%9!") do for /f "tokens=1*" %%b in ("%%a") do (
- if "%%b" equ "%墙%%墙%%墙%%墙%%墙%" (
- set o!#行!.!#列!=%路%
- for %%A in (%%c) do (
- for /f "tokens=1,2,3 delims=$" %%1 in ("%%~A") do (
- set/a #行=%%1,#列=%%2,#上=#行-1,#下=#行+1,#左=#列-1,#右=#列+1
- for /f %%B in ("!F%%3!") do for /f %%C in ("%%B") do if "%%C" equ "%墙%%墙%%墙%%墙%%墙%" (
-
- if "!random:~-1!" gtr "%r%" (set sto=!sto! %%A) else (set sto=%%A !sto!)
-
- )
- )
- )
- )
- )
-
-
-
-
-
- )
- )
-
- if not defined sto call :fins
-
- )
-
- :fins
- for %%a in (%出%) do set o%%a=入
-
- cls&for /l %%a in (1,1,!行!) do for /f %%b in ("!L%%a!") do echo;%%b
-
- set /p in=计算结束,回车关闭。
-
-
- exit
复制代码
|