|   
netbenton 
银牌会员
 
      批处理编程迷
  
 
积分 1916 
发帖 752 
注册 2008-12-28 来自 广西 
状态 离线
 | 
     『楼 主』:
 批处理扫雷游戏
 
使用 LLM 解释/回答一下
  
纯批处理制作 
在游戏过程中,输入benton可以看清所有地雷
 
玩法参照windows自带的扫雷游戏。
 
此批处理最先发在批处理之家。 
最后修改 2009.6.11 00:26 
改为润眼之色,加以注释,缩减代码 
输入已经打开的点为数字时可以帮你智能分析,并把可以打开的自动打开,或自动插旗,也可以人工插旗取旗(在输入坐标后再跟任意字符即表示要进行插取旗操作),对已经插了旗的点是不能打开的,要先把旗取掉后才可以再次打开。
 @echo off 
title 批处理扫地雷 之 越战清道夫   Made by netbenton from http://bbs.bathome.cn 
set `=! 
::注意哦,这个变量很关键, 
 
set #for1=for /f "tokens=1-6" %%c in ("!u! !m! !d! !l! !n! !r!") do ( 
set #for2=for %%k in (%%c.%%f %%c.%%g %%c.%%h %%d.%%f %%d.%%h %%e.%%f %%e.%%g %%e.%%h!) do ( 
::这个定义是为了缩减代码和提速 
 
setlocal enabledelayedexpansion 
set "ec-1= ABCDEFGHIJKLMNOP " 
for /l %%a in (0,1,17) do (set M%%a=!ec-1:~%%a,1!) 
set ec18= !ec-1! 后面还有其它字符表示或 
set ec-1= !ec-1! 
set ec0=┌────────────────┐  还有!`!dilei!`!个雷,!`!tudi!`!亩地 
set ec17=└────────────────┘  !`!over!`!!`!say!`! 
set str= abcdefghijklmnop 
for /l %%a in (1,1,16) do set com!str:~%%a,1!=%%a 
set ∷=今天运气不错哦。。。 
set ①=生死由命,就放心踩吧 
set ②=这里都不敢动,劝你回家种田吧! 
set ③=团长,要看清想好呀。 
set ④=这里要动的话,就只有半条命了! 
set ⑤=探到不少雷呀,最好不要赌了 
set ⑥=小心呀!团长,想好呀 
set ⑦=危局险啊!最好别动了! 
set ⑧=这里全是雷呀!别动!!! 
set n=0 
for %%a in (① ② ③ ④ ⑤ ⑥ ⑦ ⑧) do (set/a n+=1&set s#=!s#!★&set !s#!=%%a&set n%%a=!n!) 
set over= 
set bj=@ 
set bj1=-1 
set bj@1=1 
 
set say=一个艰巨的任务开始了。。。 
for /l %%a in (0,1,17) do (set r0.%%a=#&set r17.%%a=#&set r%%a.0=#&set r%%a.17=#) 
 
:begin 重新开始 
color 2f 
setlocal enabledelayedexpansion 
for /l %%a in (1,1,40) do ( 
  set/a ran=!random!%%16+1 
  set true= 
for /l %%b in (1,1,16) do ( 
  set/a ram=!random!%%16+1 
  if not defined true ( 
   if not defined L!ran!.!ram! set L!ran!.!ram!=★&set true=y&set/a dilei+=1 
  ) 
) 
) 
set/a tudi=16*16-dilei 
for /l %%a in (1,1,16) do ( 
set/a u=%%a-1,d=%%a+1 
for /l %%b in (1,1,16) do ( 
  if not defined L%%a.%%b ( 
   set/a l=%%b-1,r=%%b+1 
   for /f "tokens=1-6" %%c in ("!u! %%a !d! !l! %%b !r!") do ( 
for %%z in ("!L%%c.%%f!!L%%c.%%g!!L%%c.%%h!!L%%d.%%f!!L%%d.%%h!!L%%e.%%f!!L%%e.%%g!!L%%e.%%h!") do (set r%%a.%%b=!%%~z!) 
   ) 
  ) 
) 
) 
for /l %%a in (1,1,16) do ( 
for /l %%b in (1,1,16) do ( 
  if not defined r%%a.%%b set "r%%a.%%b=∷" 
  if not defined L%%a.%%b set L%%a.%%b=!r%%a.%%b! 
  set r%%a.%%b= 
) 
) 
set benton=set "str=!`!str!`!□" 
 
:loop 主循环 
for /l %%a in (1,1,16) do ( 
set str= 
for /l %%b in (1,1,16) do ( 
  if defined r%%a.%%b ( 
     if !r%%a.%%b! equ @ (set "str=!str!▼") else (set "str=!str!!`!L%%a.%%b!`!") 
  ) else ( 
     %benton% 
  ) 
) 
set ec%%a=│!str!│ 
) 
set benton=set "str=!`!str!`!□" 
 
:error 出错循环 
cls 
for /l %%a in (-2,1,18) do (for %%b in ("!ec%%a!") do echo;     !M%%a!%%~b!M%%a!) 
if defined over echo 游戏结束&color 1d&pause&endlocal&goto :begin 
if !tudi! leq 0 echo 恭喜你过关了&color 1e&pause&endlocal&goto :begin 
set /p in=输入打开点: 
if "!in!" equ "benton" set benton=set "str=!`!str!`!!`!L%%a.%%b!`!"&goto :loop 
set/a ver=0,m=com!in:~0,1!,n=com!in:~1,1!,ver=m*n 
if !ver! equ 0 goto :error 
set back=:loop 
 
:zhilp 主动或自动打开地,均使用这个子过程, 与:zhisub子过程和:auto子过程有联合循环动作,即有重入。 
if "!in:~2,1!" neq "" ( 
	if "!r%m%.%n%:@=!" neq "!r%m%.%n%!" ( 
		for %%a in (bj!r%m%.%n%!) do ( 
			set r%m%.%n%=!%%a! 
			set/a dilei+=%%a1 
		) 
		goto %back% 
	) else ( 
		goto :error 
	) 
) 
if defined r%m%.%n% if "!r%m%.%n%!" equ "#" (goto :zhisub) else (goto :error) 
set r%m%.%n%=# 
set/a tudi-=1 
if "!L%m%.%n%!" equ "★" set over=  光荣牺牲了 
if "!L%m%.%n%!" equ "∷" call :auto 
set say=!L%m%.%n%! 
set say=!%say%! 
goto %back% 依靠变量来控制程序走向 
 
:zhisub 选择点为已经打开的数字时,自动插旗或打开地 的 子过程 
set back=:eof 
set in= 
set/a u=m-1,d=m+1,l=n-1,r=n+1,zh=n!l%m%.%n%!,zh@=0,zhi=0,zh#=0 
%#for1% 
%#for2% 
		if defined r%%k (set/a zh!r%%k!+=1) else (set/a zhi+=1) 
	) 
)  
set/a zh#=zh@+zhi 
if !zh! equ !zh@! set in=12 
if !zh! equ !zh#! set in=123 
if not defined in goto :error 
%#for1% 
%#for2% 
		for /f "tokens=1,2 delims=." %%1 in ("%%k") do (set/a m=%%1,n=%%2) 
		if not defined r%%k call :zhilp 循环调用减少代码,增强自动化 
	) 
) 
goto :loop 
 
:auto  打开的为空地时自动打开地 的 子过程 
set/a u=m-1,d=m+1,l=n-1,r=n+1 
%#for1% 
%#for2% 
  if not defined r%%k ( 
   set r%%k=# 
   set/a tudi-=1 
   if "!L%%k!" equ "∷" ( 
    for /f "tokens=1,2 delims=." %%1 in ("%%k") do (set/a m=%%1,n=%%2) 
    call :auto 循环调用减少代码,增强自动化 
   ) 
  ) 
) 
) 
goto :eof 
 Last edited by netbenton on 2009-6-10 at 12:16 ]  
 
    
 
     此帖被 +78 点积分              点击查看详情    | 评分人:【 523066680 】 | 分数: +15 |   时间:2009-6-7 21:31 |  | 评分人:【 ccwan 】 | 分数: +20 |   时间:2009-6-7 22:07 |  | 评分人:【 zh159 】 | 分数: +20 |   时间:2009-6-8 06:33 |  | 评分人:【 qasa 】 | 分数: +8 |   时间:2009-6-11 04:43 |  | 评分人:【 moniuming 】 | 分数: +15 |   时间:2009-6-12 07:55 |  
  |   
 
 
  
  |  
                  
  
                    精简 
=>    个人 网志      |   
 |  
  2009-6-7 21:04 | 
  
 |  
 |   
523066680 
银牌会员
 
      SuperCleaner
  
 
积分 2362 
发帖 1133 
注册 2008-2-2 
状态 离线
 | 
 |  
  2009-6-7 21:31 | 
  
 |  
 |   
qzwqzw 
银牌会员
 
      天的白色影子
  
 
积分 2343 
发帖 636 
注册 2004-3-6 
状态 离线
 | 
『第 3 楼』:
 
 
使用 LLM 解释/回答一下
  
 
:: qzwqzw hack - 20090608 - 加入插旗功能,更换几个显示符号 
@echo off 
title 批处理扫地雷 之 越战清道夫   Made by netbenton from http://bbs.bathome.cn 
set `=! 
::⊙¤☆12345678□ 
setlocal enabledelayedexpansion 
set "ec-1= ABCDEFGHIJKLMNOP " 
for /l %%a in (0,1,17) do (set M%%a=!ec-1:~%%a,1!) 
set ec18= !ec-1! 
set ec-1= !ec-1! 
set ec0=┌────────────────┐还有!`!dilei!`!个雷,!`!tudi!`!亩地 
set ec17=└────────────────┘!`!over!`!!`!say!`! 
set str= abcdefghijklmnop 
for /l %%a in (1,1,16) do set com!str:~%%a,1!=%%a 
set  =今天运气不错哦。。。 
set 1=生死由命,就放心踩吧 
set 2=这里都不敢动,劝你回家种田吧! 
set 3=团长,要看清想好呀。 
set 4=这里要动的话,就只有半条命了! 
set 5=探到不少雷呀,最好不要赌了 
set 6=小心呀!团长,想好呀 
set 7=危局险啊!最好别动了! 
set 8=这里全是雷呀!别动!!! 
for %%a in (1 2 3 4 5 6 7 8) do (set s#=!s#!¤&set !s#!=%%a) 
set over= 
set say=一个艰巨的任务开始了。。。 
for /l %%a in (0,1,17) do (set r0.%%a=#&set r17.%%a=#&set r%%a.0=#&set r%%a.17=#) 
:begin 
setlocal enabledelayedexpansion 
for /l %%a in (1,1,40) do ( 
    set/a ran=!random!%%16+1 
    set true= 
    for /l %%b in (1,1,16) do ( 
        set/a ram=!random!%%16+1 
        if not defined true ( 
            if not defined L!ran!.!ram! set L!ran!.!ram!=¤&set true=y&set/a dilei+=1 
        ) 
    ) 
) 
set/a tudi=16*16-dilei 
for /l %%a in (1,1,16) do ( 
    set/a u=%%a-1,d=%%a+1 
    for /l %%b in (1,1,16) do ( 
        if not defined L%%a.%%b ( 
            set/a l=%%b-1,r=%%b+1 
            for /f "tokens=1-6" %%c in ("!u! %%a !d! !l! %%b !r!") do ( 
                for %%z in ("!L%%c.%%f!!L%%c.%%g!!L%%c.%%h!!L%%d.%%f!!L%%d.%%h!!L%%e.%%f!!L%%e.%%g!!L%%e.%%h!") do (set r%%a.%%b=!%%~z!) 
            ) 
        ) 
    ) 
) 
for /l %%a in (1,1,16) do ( 
    for /l %%b in (1,1,16) do ( 
      if not defined r%%a.%%b set "r%%a.%%b= " 
      if not defined L%%a.%%b set L%%a.%%b=!r%%a.%%b! 
      set r%%a.%%b= 
    ) 
) 
set benton=set "str=!`!str!`!□" 
:loop 
for /l %%a in (1,1,16) do ( 
    set str= 
    for /l %%b in (1,1,16) do ( 
        rem :: qzwqzw hack begin - 加入插旗功能 
        if not defined r%%a.%%b ( 
            %benton% 
        ) else if "!r%%a.%%b!"=="/" ( 
            set "str=!str!P" 
        ) else ( 
            set "str=!str!!`!L%%a.%%b!`!" 
        ) 
        rem :: qzwqzw hack end - 加入插旗功能 
    ) 
    set ec%%a=│!str!│ 
) 
set benton=set "str=!`!str!`!□" 
:error 
cls 
for /l %%a in (-2,1,18) do (for %%b in ("!ec%%a!") do echo;     !M%%a!%%~b!M%%a!) 
if defined over echo 游戏结束&pause&endlocal&goto :begin 
if !tudi! lss 0 echo 恭喜你过关了&pause&endlocal&goto :begin 
set /p in=输入打开点: 
if "!in!" equ "benton" set benton=set "str=!`!str!`!!`!L%%a.%%b!`!"&goto :loop 
set/a ver=0,m=com!in:~0,1!,n=com!in:~1,1!,ver=m*n 
if !ver! equ 0 goto :error 
:: qzwqzw hack begin - 加入插旗功能 
if "!in:~2,1!"=="/" ( 
    if not defined r%m%.%n% ( 
        set "r%m%.%n%=/" 
        set /a dilei-=1 
    ) 
) else ( 
    if not "!r%m%.%n%!"=="#" ( 
        if "!r%m%.%n%!"=="/" set /a dilei+=1 
:: qzwqzw hack end - 加入插旗功能 
        set r%m%.%n%=# 
        set/a tudi-=1 
        if "!L%m%.%n%!" equ "¤" set over=  光荣牺牲了 
        if "!L%m%.%n%!" equ " " call :auto 
        set say=!L%m%.%n%! 
        set say=!%say%! 
    ) 
) 
goto :loop 
pause 
goto :eof 
:auto 
set/a u=m-1,d=m+1,l=n-1,r=n+1 
for /f "tokens=1-6" %%c in ("!u! !m! !d! !l! !n! !r!") do ( 
    for %%k in (%%c.%%f %%c.%%g %%c.%%h %%d.%%f %%d.%%h %%e.%%f %%e.%%g %%e.%%h!) do ( 
        if not defined r%%k ( 
            set r%%k=# 
            set/a tudi-=1 
            if "!L%%k!" equ " " ( 
                for /f "tokens=1,2 delims=." %%1 in ("%%k") do (set/a m=%%1,n=%%2) 
                call :auto 
            ) 
        ) 
    ) 
) 
 
 Last edited by qzwqzw on 2009-6-8 at 00:05 ]  
 
    
 
  
 |   
 |  
  2009-6-7 23:39 | 
  
 |  
 |   
523066680 
银牌会员
 
      SuperCleaner
  
 
积分 2362 
发帖 1133 
注册 2008-2-2 
状态 离线
 | 
 |  
  2009-6-7 23:49 | 
  
 |  
 |   
tireless 
银牌会员
 
     
 
  
  
积分 2025 
发帖 1122 
注册 2007-9-5 
状态 离线
 | 
 |  
  2009-6-8 02:14 | 
  
 |  
 |   
netbenton 
银牌会员
 
      批处理编程迷
  
 
积分 1916 
发帖 752 
注册 2008-12-28 来自 广西 
状态 离线
 | 
『第 6 楼』:
 
 
使用 LLM 解释/回答一下
  
输入时在后面加#号,支持插旗、取旗了, 
@echo off 
title 批处理扫地雷 之 越战清道夫   Made by netbenton from http://bbs.bathome.cn 
set `=! 
::⊙★☆①②③④⑤⑥⑦⑧¤ 
setlocal enabledelayedexpansion 
set "ec-1= ABCDEFGHIJKLMNOP " 
for /l %%a in (0,1,17) do (set M%%a=!ec-1:~%%a,1!) 
set ec18= !ec-1! 后面加#号表示或 
set ec-1= !ec-1! 
set ec0=┌────────────────┐  还有!`!dilei!`!个雷,!`!tudi!`!亩地 
set ec17=└────────────────┘  !`!over!`!!`!say!`! 
set str= abcdefghijklmnop 
for /l %%a in (1,1,16) do set com!str:~%%a,1!=%%a 
set ╳=今天运气不错哦。。。 
set ①=生死由命,就放心踩吧 
set ②=这里都不敢动,劝你回家种田吧! 
set ③=团长,要看清想好呀。 
set ④=这里要动的话,就只有半条命了! 
set ⑤=探到不少雷呀,最好不要赌了 
set ⑥=小心呀!团长,想好呀 
set ⑦=危局险啊!最好别动了! 
set ⑧=这里全是雷呀!别动!!! 
for %%a in (① ② ③ ④ ⑤ ⑥ ⑦ ⑧) do (set s#=!s#!★&set !s#!=%%a) 
set over= 
set bj=@ 
set bj1=-1 
set bj@1=1 
set say=一个艰巨的任务开始了。。。 
for /l %%a in (0,1,17) do (set r0.%%a=#&set r17.%%a=#&set r%%a.0=#&set r%%a.17=#) 
:begin 
setlocal enabledelayedexpansion 
for /l %%a in (1,1,40) do ( 
  set/a ran=!random!%%16+1 
  set true= 
for /l %%b in (1,1,16) do ( 
  set/a ram=!random!%%16+1 
  if not defined true ( 
   if not defined L!ran!.!ram! set L!ran!.!ram!=★&set true=y&set/a dilei+=1 
  ) 
) 
) 
set/a tudi=16*16-dilei 
for /l %%a in (1,1,16) do ( 
set/a u=%%a-1,d=%%a+1 
for /l %%b in (1,1,16) do ( 
  if not defined L%%a.%%b ( 
   set/a l=%%b-1,r=%%b+1 
   for /f "tokens=1-6" %%c in ("!u! %%a !d! !l! %%b !r!") do ( 
for %%z in ("!L%%c.%%f!!L%%c.%%g!!L%%c.%%h!!L%%d.%%f!!L%%d.%%h!!L%%e.%%f!!L%%e.%%g!!L%%e.%%h!") do (set r%%a.%%b=!%%~z!) 
   ) 
  ) 
) 
) 
for /l %%a in (1,1,16) do ( 
for /l %%b in (1,1,16) do ( 
  if not defined r%%a.%%b set "r%%a.%%b=╳" 
  if not defined L%%a.%%b set L%%a.%%b=!r%%a.%%b! 
  set r%%a.%%b= 
) 
) 
set benton=set "str=!`!str!`!¤" 
:loop 
for /l %%a in (1,1,16) do ( 
set str= 
for /l %%b in (1,1,16) do ( 
  if defined r%%a.%%b ( 
     if !r%%a.%%b! equ @ (set "str=!str!ψ") else (set "str=!str!!`!L%%a.%%b!`!") 
  ) else ( 
     %benton% 
  ) 
) 
set ec%%a=│!str!│ 
) 
set benton=set "str=!`!str!`!¤" 
:error 
cls 
for /l %%a in (-2,1,18) do (for %%b in ("!ec%%a!") do echo;     !M%%a!%%~b!M%%a!) 
if defined over echo 游戏结束&pause&endlocal&goto :begin 
if !tudi! lss 0 echo 恭喜你过关了&pause&endlocal&goto :begin 
set /p in=输入打开点: 
if "!in!" equ "benton" set benton=set "str=!`!str!`!!`!L%%a.%%b!`!"&goto :loop 
set/a ver=0,m=com!in:~0,1!,n=com!in:~1,1!,ver=m*n 
if !ver! equ 0 goto :error 
 
if "!in:#=!" neq "!in!" ( 
	echo "!r%m%.%n%:@=!" 
	if "!r%m%.%n%:@=!" neq "!r%m%.%n%!" ( 
		for %%a in (bj!r%m%.%n%!) do ( 
			set r%m%.%n%=!%%a! 
			set/a dilei+=%%a1 
		) 
		goto :loop 
	) else ( 
		goto :error 
	) 
) 
 
if defined r%m%.%n% goto :error 
set r%m%.%n%=# 
set/a tudi-=1 
if "!L%m%.%n%!" equ "★" set over=  光荣牺牲了 
if "!L%m%.%n%!" equ "╳" call :auto 
set say=!L%m%.%n%! 
set say=!%say%! 
goto :loop 
pause 
goto :eof 
:auto 
set/a u=m-1,d=m+1,l=n-1,r=n+1 
for /f "tokens=1-6" %%c in ("!u! !m! !d! !l! !n! !r!") do ( 
for %%k in (%%c.%%f %%c.%%g %%c.%%h %%d.%%f %%d.%%h %%e.%%f %%e.%%g %%e.%%h!) do ( 
  if not defined r%%k ( 
   set r%%k=# 
   set/a tudi-=1 
   if "!L%%k!" equ "╳" ( 
    for /f "tokens=1,2 delims=." %%1 in ("%%k") do (set/a m=%%1,n=%%2) 
    call :auto 
   ) 
  ) 
) 
)
  
 
    
 
  
  |  
                  
  
                    精简 
=>    个人 网志      |   
 |  
  2009-6-8 03:03 | 
  
 |  
 |   
qzwqzw 
银牌会员
 
      天的白色影子
  
 
积分 2343 
发帖 636 
注册 2004-3-6 
状态 离线
 | 
『第 7 楼』:
 
 
使用 LLM 解释/回答一下
  
从用户界面上提几点建议吧 
 
显示方面: 
1、因为¤更形似地雷炸开的样子,用作炸开的地雷会比较好些; 
2、对于空地,全角空白字符会更容易让人接受; 
3、对于未探测地,□可能更好一些; 
4、至于旗子,随你吧 
 
操作方面: 
1、坐标系除了直角坐标系之外,可以考虑极坐标系,即使用方向+距离定位某块地; 
    方向可以从数字小键盘取,比如2表示向下移动,9表示向右上移动,距离用数字表示,省略时表示移动一格; 
2、插旗和开地都可以针对九宫格进行; 
    比如一块已打开的地周围有三颗地雷,且都已被插旗,那么再打开这块地,会打开周围8块地中剩下的未插旗的地块; 
    同时,如果一块已打开的地周围有三颗地雷,且已打开五块地,那么再对这块地插旗,会在剩下的地上都插上旗; 
 
    
 
  
 |   
 |  
  2009-6-8 03:52 | 
  
 |  
 |   
zh159 
金牌会员
 
      
 
  
 
积分 3687 
发帖 1467 
注册 2005-8-8 
状态 离线
 | 
 |  
  2009-6-8 06:34 | 
  
 |  
 |   
qzwqzw 
银牌会员
 
      天的白色影子
  
 
积分 2343 
发帖 636 
注册 2004-3-6 
状态 离线
 | 
    『第 9 楼』:
 
 
使用 LLM 解释/回答一下
  
 
:: qzwqzw hack - 20090608 
:: - 更换几个显示符号 
:: - 加入插旗功能,手动插旗可以在坐标值加一/(不需要按shift键哦) 
:: - 加入数字键形式的极坐标系控制,即以当前地为中心,向上(8)下(2)左(4)右(6)移动指定的格数再翻地 
:: - 加入自动翻开和自动插旗,就是在已翻开的地上再翻,会自动根据情况选择插旗或者翻地 
@echo off & setlocal 
title 批处理扫地雷 之 越战清道夫   Made by netbenton from http://bbs.bathome.cn 
set `=! 
::⊙¤☆12345678□ 
setlocal enabledelayedexpansion 
set "ec-1= ABCDEFGHIJKLMNOP " 
for /l %%a in (0,1,17) do (set M%%a=!ec-1:~%%a,1!) 
set ec18= !ec-1! 
set ec-1= !ec-1! 
set ec0=┌────────────────┐还有!`!dilei!`!个雷,!`!tudi!`!亩地 
set ec17=└────────────────┘!`!over!`!!`!say!`! 
set str= abcdefghijklmnop 
for /l %%a in (1,1,16) do set com!str:~%%a,1!=%%a 
set  =今天运气不错哦。。。 
set 1=生死由命,就放心踩吧 
set 2=这里都不敢动,劝你回家种田吧! 
set 3=团长,要看清想好呀。 
set 4=这里要动的话,就只有半条命了! 
set 5=探到不少雷呀,最好不要赌了 
set 6=小心呀!团长,想好呀 
set 7=危局险啊!最好别动了! 
set 8=这里全是雷呀!别动!!! 
for %%a in (1 2 3 4 5 6 7 8) do (set s#=!s#!¤&set !s#!=%%a) 
set over= 
set say=一个艰巨的任务开始了。。。 
for /l %%a in (0,1,17) do (set r0.%%a=#&set r17.%%a=#&set r%%a.0=#&set r%%a.17=#) 
:begin 
setlocal enabledelayedexpansion 
for /l %%a in (1,1,40) do ( 
    set/a ran=!random!%%16+1 
    set true= 
    for /l %%b in (1,1,16) do ( 
        set/a ram=!random!%%16+1 
        if not defined true ( 
            if not defined L!ran!.!ram! set L!ran!.!ram!=¤&set true=y&set/a dilei+=1 
        ) 
    ) 
) 
set/a tudi=16*16-dilei 
for /l %%a in (1,1,16) do ( 
    set/a u=%%a-1,d=%%a+1 
    for /l %%b in (1,1,16) do ( 
        if not defined L%%a.%%b ( 
            set/a l=%%b-1,r=%%b+1 
            for /f "tokens=1-6" %%c in ("!u! %%a !d! !l! %%b !r!") do ( 
                for %%z in ("!L%%c.%%f!!L%%c.%%g!!L%%c.%%h!!L%%d.%%f!!L%%d.%%h!!L%%e.%%f!!L%%e.%%g!!L%%e.%%h!") do (set r%%a.%%b=!%%~z!) 
            ) 
        ) 
    ) 
) 
for /l %%a in (1,1,16) do ( 
    for /l %%b in (1,1,16) do ( 
      if not defined r%%a.%%b set "r%%a.%%b= " 
      if not defined L%%a.%%b set L%%a.%%b=!r%%a.%%b! 
      set r%%a.%%b= 
    ) 
) 
set benton=set "str=!`!str!`!□" 
:loop 
for /l %%a in (1,1,16) do ( 
    set str= 
    for /l %%b in (1,1,16) do ( 
        rem :: qzwqzw hack begin - 加入插旗功能 
        if not defined r%%a.%%b ( 
            %benton% 
        ) else if "!r%%a.%%b!"=="/" ( 
            set "str=!str!●" 
        ) else ( 
            set "str=!str!!`!L%%a.%%b!`!" 
        ) 
        rem :: qzwqzw hack end - 加入插旗功能 
    ) 
    set ec%%a=│!str!│ 
) 
set benton=set "str=!`!str!`!□" 
:error 
cls 
for /l %%a in (-2,1,18) do (for %%b in ("!ec%%a!") do echo;     !M%%a!%%~b!M%%a!) 
if defined over echo 游戏结束&pause&endlocal&goto :begin 
if !tudi! lss 0 echo 恭喜你过关了&pause&endlocal&goto :begin 
set /p in=输入打开点: 
if "!in!" equ "benton" set benton=set "str=!`!str!`!!`!L%%a.%%b!`!"&goto :loop 
 
:: qzwqzw hack begin - 加入插旗,极坐标控制,自动翻地,自动插旗功能 
if "!in!" geq "11" if "!in!" leq "99" ( 
    :: 以下是极坐标控制代码 
    if "!in:~0,1!" equ "1" set /a m+=!in:~1,1!,n-=!in:~1,1! 
    if "!in:~0,1!" equ "2" set /a m+=!in:~1,1! 
    if "!in:~0,1!" equ "3" set /a m+=!in:~1,1!,n+=!in:~1,1! 
    if "!in:~0,1!" equ "4" set /a n-=!in:~1,1! 
    if "!in:~0,1!" equ "6" set /a n+=!in:~1,1! 
    if "!in:~0,1!" equ "7" set /a m-=!in:~1,1!,n-=!in:~1,1! 
    if "!in:~0,1!" equ "8" set /a m-=!in:~1,1! 
    if "!in:~0,1!" equ "9" set /a m-=!in:~1,1!,n+=!in:~1,1! 
 
    if !m! gtr 16 set /a m=16 
    if !m! lss 1 set /a m=1 
    if !n! gtr 16 set /a n=16 
    if !n! lss 1 set /a n=1 
) else ( 
    set/a ver=0,m=com!in:~0,1!,n=com!in:~1,1!,ver=m*n 
    if !ver! equ 0 goto :error 
) 
set /a ms1=m-1,ma1=m+1,ns1=n-1,na1=n+1 
set jiugong=%ms1%.%ns1% %ms1%.%n% %ms1%.%na1% %m%.%ns1% %m%.%na1% %ma1%.%ns1% %ma1%.%n% %ma1%.%na1% 
 
if "!in:~2,1!"=="/" ( 
    if not defined r%m%.%n% ( 
        set "r%m%.%n%=/" 
        set /a dilei-=1 
    ) 
) else ( 
    if "!r%m%.%n%!"=="#" ( 
        if "!L%m%.%n%!" geq "1" if "!L%m%.%n%!" leq "8" ( 
            set nums= 12345678 
            for /l %%n in (1,1,8) do if "!L%m%.%n%!"=="!nums:~%%n,1!" set Lmn=%%n 
            set /a Cmn=0,Dmn=0,Emn=0 
            for %%m in (%jiugong%) do if "!r%%m!"=="/" set /a Cmn+=1 
            for %%m in (%jiugong%) do if "!r%%m!"=="#" set /a Dmn+=1 
            set /a Emn=8-Dmn 
            rem 符合条件自动翻地 
            if !Cmn! equ !Lmn! ( 
                for %%m in (%jiugong%) do if "!r%%m!"=="" ( 
                    set r%%m=# 
                    set/a tudi-=1 
                    if "!L%%m!" equ "¤" set over=  光荣牺牲了 
                    if "!L%%m!" equ " " call :auto 
                ) 
            ) else if !Emn! equ !Lmn! ( 
            rem 符合条件自动插旗 
                for %%m in (%jiugong%) do if "!r%%m!"=="" ( 
                    set r%%m=/ 
                    set /a dilei-=1 
                ) 
            ) 
        ) 
    ) else ( 
        if "!r%m%.%n%!"=="/" set /a dilei+=1 
:: qzwqzw hack end - 加入插旗,极坐标控制,自动翻地,自动插旗功能 
        set r%m%.%n%=# 
        set/a tudi-=1 
        if "!L%m%.%n%!" equ "¤" set over=  光荣牺牲了 
        if "!L%m%.%n%!" equ " " call :auto 
        set say=!L%m%.%n%! 
        set say=!%say%! 
    ) 
) 
goto :loop 
 
:auto 
set/a u=m-1,d=m+1,l=n-1,r=n+1 
for /f "tokens=1-6" %%c in ("!u! !m! !d! !l! !n! !r!") do ( 
    for %%k in (%%c.%%f %%c.%%g %%c.%%h %%d.%%f %%d.%%h %%e.%%f %%e.%%g %%e.%%h!) do ( 
        if not defined r%%k ( 
            set r%%k=# 
            set/a tudi-=1 
            if "!L%%k!" equ " " ( 
                for /f "tokens=1,2 delims=." %%1 in ("%%k") do (set/a m=%%1,n=%%2) 
                call :auto 
            ) 
        ) 
    ) 
) 
  
 
    
 
 
 
  
 |   
 |  
  2009-6-8 07:48 | 
  
 |  
 |   
netbenton 
银牌会员
 
      批处理编程迷
  
 
积分 1916 
发帖 752 
注册 2008-12-28 来自 广西 
状态 离线
 | 
 |  
  2009-6-8 09:51 | 
  
 |  
 |   
qzwqzw 
银牌会员
 
      天的白色影子
  
 
积分 2343 
发帖 636 
注册 2004-3-6 
状态 离线
 | 
『第 11 楼』:
 
 
使用 LLM 解释/回答一下
  
是指极坐标控制那一排if吧 
8行可以简化成5行 
if "!in:~0,1!" leq "3" set /a m+=!in:~1,1! 
if "!in:~0,1!" geq "7" set /a m-=!in:~1,1! 
set /a mod=!in:~0,1!%%3 
if !mod! equ "1" set /a n-=!in:~1,1! 
if !mod! equ "0" set /a n+=!in:~1,1! 
 
至于空白地 
我是这样考虑的 
空白地是不需要玩家关心的地方 
它如果用非空白字符 
会让玩家白白消耗掉一部分注意力 
而且长时间盯着满篇的字符更容易产生疲劳感 
所以需要一定的空白增加可视性 
 
另外,我将地雷旗帜由空心的P改为实心的● 
也是考虑用户应该对地雷有足够的关注度 
而空心字符很容易淹没在一堆数字和空格中而让人忽视 
 
这些也应该是Windows排雷的设计理念 
 
现在正在考虑如何突出显示当前翻开的地块 
让玩家在游戏时不容易失去关注的焦点 
 
    
 
  
 |   
 |  
  2009-6-8 10:22 | 
  
 |  
 |   
qzwqzw 
银牌会员
 
      天的白色影子
  
 
积分 2343 
发帖 636 
注册 2004-3-6 
状态 离线
 | 
『第 12 楼』:
 
 
使用 LLM 解释/回答一下
  
终于通关了 
基本上是依赖极坐标定位来操作的 
可惜没有任何通关效果 
 
    
 
  
附件
1:   spx-9.gif (2009-6-8 11:55, 11.4 KiB, 下载附件所需积分 1 点
,下载次数: 1)
  
 
 
 
 |   
 |  
  2009-6-8 11:55 | 
  
 |  
 |   
qzwqzw 
银牌会员
 
      天的白色影子
  
 
积分 2343 
发帖 636 
注册 2004-3-6 
状态 离线
 | 
『第 13 楼』:
 
 
使用 LLM 解释/回答一下
  
加入欢迎界面 
加入当前格突出显示,可惜显示效率因此降低了
  
:: qzwqzw hack - 20090608 
:: - 更换几个显示符号 
:: - 加入插旗功能,手动插旗可以在坐标值后加一/(不需要按shift键哦) 
:: - 加入数字键形式的极坐标系控制,即以当前地为中心,向上(8)下(2)左(4)右(6)移动指定的格数再翻地 
:: - 加入自动翻开和自动插旗,就是在已翻开的地上再翻,会自动根据情况选择插旗或者翻地 
:: - 即时显示地图,以便可以用红色背景色突出显示当前位置 
@echo off & setlocal 
title qzwqzw 批处理扫地雷 之 越战清道夫 
set `=! 
mode 48,25 
echo. 
echo.            批处理扫地雷 之 越战清道夫 
echo. 
echo. Made by netbenton from http://bbs.bathome.cn 
echo. Hack by qzwqzw - 20090608 
echo. 
echo. 玩法:显示完地图后,可以在指定的地上翻地或插旗 
echo.       地翻开后可能会显示空,表示周围没有一颗雷 
echo.       可能是一个数字,表示这块地周围有地雷 
echo.       数字是几,就代表有周围几块地有地雷 
echo.       还可能是一个爆炸的地雷,此时就 Game Over^! 
echo.       请结合数字和旗子的提示决定是翻地或者插旗 
echo. 
echo. 翻地:指定位置后回车 
echo. 插旗:指定位置再添加一"/"后回车 
echo. 
echo. 指定位置方式1:行坐标+列坐标,比如:HF 
echo. 指定位置方式2:相对当前位置的方向与距离 
echo.     方向:请参考数字小键盘的方向 
echo.     距离:向指定方向移动的格子数 
echo.     示例:从当前点向右上移动3格为 "93" 
echo      注意:此方式需将NumLock键开启 
echo. 
pause 
::⊙¤☆12345678□ 
setlocal enabledelayedexpansion 
set "ecp= ABCDEFGHIJKLMNOP " 
for /l %%a in (0,1,17) do (set M%%a=!ec-1:~%%a,1!) 
set str= abcdefghijklmnop 
for /l %%a in (1,1,16) do set com!str:~%%a,1!=%%a 
set say¤=祖国和人民会怀念你的~~~ 
set say =今天真是撞到狗屎运了### 
set say1=富贵在天,就放心踩吧 
set say2=这里都不敢动,劝你回家种田吧! 
set say3=团长,要看清想好呀。 
set say4=这里要动的话,就只有半条命了! 
set say5=探到不少雷呀,最好不要赌了 
set say6=小心呀!团长,想好呀 
set say7=危险啊!不动明王咒,我念念念! 
set say8=这里全是雷呀!别动!!! 
for %%a in (1 2 3 4 5 6 7 8) do (set s#=!s#!¤&set !s#!=%%a) 
set over= 
set say=一个艰巨的任务开始了。。。 
for /l %%a in (0,1,17) do (set r0.%%a=#&set r17.%%a=#&set r%%a.0=#&set r%%a.17=#) 
:begin 
setlocal enabledelayedexpansion 
for /l %%a in (1,1,50) do ( 
    set/a ran=!random!%%16+1 
    set true= 
    for /l %%b in (1,1,16) do ( 
        set/a ram=!random!%%16+1 
        if not defined true ( 
            if not defined L!ran!.!ram! set L!ran!.!ram!=¤&set true=y&set/a dilei+=1 
        ) 
    ) 
) 
set/a tudi=16*16-dilei 
for /l %%a in (1,1,16) do ( 
    set/a u=%%a-1,d=%%a+1 
    for /l %%b in (1,1,16) do ( 
        if not defined L%%a.%%b ( 
            set/a l=%%b-1,r=%%b+1 
            for /f "tokens=1-6" %%c in ("!u! %%a !d! !l! %%b !r!") do ( 
                for %%z in ("!L%%c.%%f!!L%%c.%%g!!L%%c.%%h!!L%%d.%%f!!L%%d.%%h!!L%%e.%%f!!L%%e.%%g!!L%%e.%%h!") do (set r%%a.%%b=!%%~z!) 
            ) 
        ) 
    ) 
) 
for /l %%a in (1,1,16) do ( 
    for /l %%b in (1,1,16) do ( 
      if not defined r%%a.%%b set "r%%a.%%b= " 
      if not defined L%%a.%%b set L%%a.%%b=!r%%a.%%b! 
      set r%%a.%%b= 
    ) 
) 
:drawmap 
:: qzwqzw hack begin - 即时显示地图,以便可以用红色背景色突出显示当前位置 
cls 
title §排雷§  地数:%tudi%  地雷:%dilei% 
echo. 
echo.   %ecp% 
echo.   ┌────────────────┐ 
for /l %%a in (1,1,16) do ( 
    set/p=  !ecp:~%%a,1!│<nul 
    for /l %%b in (1,1,16) do ( 
        if not defined r%%a.%%b ( 
            set unit=□ 
        ) else if "!r%%a.%%b!"=="/" ( 
            set unit=● 
        ) else ( 
            set unit=!L%%a.%%b! 
        ) 
        if "%benton%"=="true" set unit=!L%%a.%%b! 
        if "%%a.%%b"=="%m%.%n%" ( 
            set/p= <nul>"!unit!" 2>nul 
            findstr /a:47 .* "!unit!?" 2>nul 3>&2 
        ) else ( 
            set/p=!unit!<nul 
        ) 
    ) 
    set/p=│!ecp:~%%a,1!<nul 
    echo. 
) 
echo.   └────────────────┘ 
echo.   %ecp% 
echo. 
:: qzwqzw hack end - 即时显示地图,以便可以用红色背景色突出显示当前位置 
 
:command 
echo.          %say% 
echo. 
if defined end goto :end 
set /p in=      请输入您的指令: 
if "!in!" equ "benton" ( 
    set "benton=true" 
    set "end=后门" 
    set "say=怎么,没招了吗?这是全部地图" 
    goto :drawmap 
) 
 
:: qzwqzw hack begin - 加入插旗,极坐标控制,自动翻地,自动插旗功能 
if "!in!" geq "11" if "!in!" leq "99" ( 
    :: 以下是极坐标控制代码 
    set /a θ1=!in:~0,1!,θ2=!in:~0,1!%%3,ρ=!in:~1,1!, 
    if "!θ1!" leq "3" set /a m+=ρ 
    if "!θ1!" geq "7" set /a m-=ρ 
    if "!θ2!" equ "1" set /a n-=ρ 
    if "!θ2!" equ "0" set /a n+=ρ 
 
    if !m! gtr 16 set /a m=16 
    if !m! lss 1 set /a m=1 
    if !n! gtr 16 set /a n=16 
    if !n! lss 1 set /a n=1 
) else ( 
    :: 以下是直角坐标控制代码 
    set/a ver=0,m=com!in:~0,1!,n=com!in:~1,1!,ver=m*n 
    if !ver! equ 0 goto :drawmap 
) 
set /a ms1=m-1,ma1=m+1,ns1=n-1,na1=n+1 
set zhouwei=%ms1%.%ns1% %ms1%.%n% %ms1%.%na1% %m%.%ns1% %m%.%na1% %ma1%.%ns1% %ma1%.%n% %ma1%.%na1% 
 
if "!in:~2,1!"=="/" ( 
    if not defined r%m%.%n% ( 
        set "r%m%.%n%=/" 
        set /a dilei-=1 
        set say=给这块地插上旗子了 
    ) 
) else ( 
    if "!r%m%.%n%!"=="#" ( 
        if "!L%m%.%n%!" geq "1" if "!L%m%.%n%!" leq "8" ( 
            set nums= 12345678 
            for /l %%n in (1,1,8) do if "!L%m%.%n%!"=="!nums:~%%n,1!" set Lmn=%%n 
            set /a Cmn=0,Dmn=0,Emn=0 
            for %%m in (%zhouwei%) do if "!r%%m!"=="/" set /a Cmn+=1 
            for %%m in (%zhouwei%) do if "!r%%m!"=="#" set /a Dmn+=1 
            set /a Emn=8-Dmn 
            rem 符合条件自动翻地 
            if !Cmn! equ !Lmn! ( 
                for %%m in (%zhouwei%) do if "!r%%m!"=="" ( 
                    set r%%m=# 
                    set/a tudi-=1 
                    if "!L%%m!" equ " " call :auto 
                    set say=!L%m%.%n%! 
                    call set say=%%say!say!%% 
                    if "!L%%m!" equ "¤" set "end=爆炸" & goto :drawmap 
                ) 
                set say=自动翻开周围所有的空地 
                if !tudi! leq 0 set "say=顺利过关" & set "end=过关" 
            ) else if !Emn! equ !Lmn! ( 
            rem 符合条件自动插旗 
                for %%m in (%zhouwei%) do if "!r%%m!"=="" ( 
                    set r%%m=/ 
                    set /a dilei-=1 
                ) 
                set say=自动插上周围地上所有的旗 
            ) 
        ) 
    ) else ( 
        if "!r%m%.%n%!"=="/" set /a dilei+=1 
:: qzwqzw hack end - 加入插旗,极坐标控制,自动翻地,自动插旗功能 
        set r%m%.%n%=# 
        set/a tudi-=1 
        if "!L%m%.%n%!" equ " " call :auto 
        set say=!L%m%.%n%! 
        call set say=%%say!say!%% 
        if !tudi! leq 0 set "say=顺利过关" & set "end=过关" 
        if "!L%m%.%n%!" equ "¤" set end=爆炸 
    ) 
) 
goto :drawmap 
 
:end 
pause 
endlocal 
goto :begin 
 
:auto 
set/a u=m-1,d=m+1,l=n-1,r=n+1 
for /f "tokens=1-6" %%c in ("!u! !m! !d! !l! !n! !r!") do ( 
    for %%k in (%%c.%%f %%c.%%g %%c.%%h %%d.%%f %%d.%%h %%e.%%f %%e.%%g %%e.%%h!) do ( 
        if not defined r%%k ( 
            set r%%k=# 
            set/a tudi-=1 
            if "!L%%k!" equ " " ( 
                for /f "tokens=1,2 delims=." %%1 in ("%%k") do (set/a m=%%1,n=%%2) 
                call :auto 
            ) 
        ) 
    ) 
) 
  
 
    
 
  
 |   
 |  
  2009-6-8 23:38 | 
  
 |  
 |   
qzwqzw 
银牌会员
 
      天的白色影子
  
 
积分 2343 
发帖 636 
注册 2004-3-6 
状态 离线
 | 
『第 14 楼』:
 
 
使用 LLM 解释/回答一下
  
 
:: qzwqzw hack - 20090609 
:: - 更换几个显示符号 
:: - 加入插旗功能,手动插旗可以在坐标值后加一/(不需要按shift键哦) 
:: 2009-6-8 - 加入数字键形式的极坐标系控制,即以当前地为中心,向上(8)下(2)左(4)右(6)移动指定的格数再翻地 
:: 2009-6-8 - 加入自动翻开和自动插旗,就是在已翻开的地上再翻,会自动根据情况选择插旗或者翻地 
:: 2009-6-8 - 即时显示地图,以便可以用红色背景色突出显示当前位置 
:: 2009-6-9 - 再次修改地图显示方式为半即时方式以提高显示效率 
:: 2009-6-9 - 加入简单的过关与失败效果 
@echo off & setlocal 
title qzwqzw 批处理扫地雷 之 越战清道夫 
set `=! 
mode 48,26 
echo. 
echo.            批处理扫地雷 之 越战清道夫 
echo. 
echo. Made by netbenton from http://bbs.bathome.cn 
echo. Hack by qzwqzw - 20090608 
echo. 
echo. 玩法:显示完地图后,可以在指定的地上翻地或插旗 
echo.       地翻开后可能会显示空,表示周围没有一颗雷 
echo.       可能是一个数字,表示这块地周围有地雷 
echo.       数字是几,就代表有周围几块地有地雷 
echo.       还可能是一个爆炸的地雷,此时就 Game Over^! 
echo.       请结合数字和旗子的提示决定是翻地或者插旗 
echo. 
echo. 翻地:指定位置后回车 
echo. 插旗:指定位置再添加一"/"后回车 
echo. 
echo. 指定位置方式1:行坐标+列坐标,比如:HF 
echo. 指定位置方式2:相对当前位置的方向与距离 
echo.     方向:请参考数字小键盘的方向 
echo.     距离:向指定方向移动的格子数 
echo.     示例:从当前点向右上移动3格为 "93" 
echo      注意:此方式需将NumLock键开启 
echo. 
pause 
::⊙¤☆12345678□ 
setlocal enabledelayedexpansion 
set "ecp= ABCDEFGHIJKLMNOP " 
for /l %%a in (0,1,17) do (set M%%a=!ec-1:~%%a,1!) 
set str= abcdefghijklmnop 
for /l %%a in (1,1,16) do set com!str:~%%a,1!=%%a 
set say¤=祖国和人民会怀念你的~~~ 
set say =今天真是撞到狗屎运了### 
set say1=富贵在天,就放心踩吧 
set say2=这里都不敢动,劝你回家种田吧! 
set say3=团长,要看清想好呀。 
set say4=这里要动的话,就只有半条命了! 
set say5=探到不少雷呀,最好不要赌了 
set say6=小心呀!团长,想好呀 
set say7=危险啊!不动明王咒,我念念念! 
set say8=这里全是雷呀!别动!!! 
for %%a in (1 2 3 4 5 6 7 8) do (set s#=!s#!¤&set !s#!=%%a) 
set over= 
set say=一个艰巨的任务开始了。。。 
for /l %%a in (0,1,17) do (set r0.%%a=#&set r17.%%a=#&set r%%a.0=#&set r%%a.17=#) 
:begin 
setlocal enabledelayedexpansion 
for /l %%a in (1,1,50) do ( 
    set/a ran=!random!%%16+1 
    set true= 
    for /l %%b in (1,1,16) do ( 
        set/a ram=!random!%%16+1 
        if not defined true ( 
            if not defined L!ran!.!ram! set L!ran!.!ram!=¤&set true=y&set/a dilei+=1 
        ) 
    ) 
) 
set/a tudi=16*16-dilei 
for /l %%a in (1,1,16) do ( 
    set/a u=%%a-1,d=%%a+1 
    for /l %%b in (1,1,16) do ( 
        if not defined L%%a.%%b ( 
            set/a l=%%b-1,r=%%b+1 
            for /f "tokens=1-6" %%c in ("!u! %%a !d! !l! %%b !r!") do ( 
                for %%z in ("!L%%c.%%f!!L%%c.%%g!!L%%c.%%h!!L%%d.%%f!!L%%d.%%h!!L%%e.%%f!!L%%e.%%g!!L%%e.%%h!") do (set r%%a.%%b=!%%~z!) 
            ) 
        ) 
    ) 
) 
for /l %%a in (1,1,16) do ( 
    for /l %%b in (1,1,16) do ( 
      if not defined r%%a.%%b set "r%%a.%%b= " 
      if not defined L%%a.%%b set L%%a.%%b=!r%%a.%%b! 
      set r%%a.%%b= 
    ) 
) 
:drawmap 
:: qzwqzw hack begin - 即时显示地图,以便可以用红色背景色突出显示当前位置 
if "%end%"=="过关" color 01 
if "%end%"=="爆炸" color 87 
if "%end%"=="" color 07 
cls 
set /a cur_a=%n%+3, cur_b=%n%+4 
title §排雷§  地数:%tudi%  地雷:%dilei% 
echo. 
echo.   %ecp% 
echo.   ┌────────────────┐ 
for /l %%a in (1,1,16) do ( 
    set line=  !ecp:~%%a,1!│ 
    for /l %%b in (1,1,16) do ( 
        if "%benton%"=="true" ( 
            set line=!line!!L%%a.%%b! 
        ) else if not defined r%%a.%%b ( 
            set line=!line!□ 
        ) else if "!r%%a.%%b!"=="/" ( 
            set line=!line!● 
        ) else if "!r%%a.%%b!"=="#" ( 
            set line=!line!!L%%a.%%b! 
        ) 
    ) 
    set line=!line!│!ecp:~%%a,1! 
 
    if "%%a"=="%m%" ( 
        set/p=!line:~0,%cur_a%!<nul 
        set cur=!line:~%cur_a%,1! 
        set/p= <nul>"!cur!" 2>nul 
        findstr /a:47 .* "!cur!?" 2>nul 3>&2 
        del "!cur!" 
        set/p=!line:~%cur_b%!<nul 
        echo. 
    ) else ( 
        echo.!line! 
    ) 
) 
echo.   └────────────────┘ 
echo.   %ecp% 
echo. 
:: qzwqzw hack end - 即时显示地图,以便可以用红色背景色突出显示当前位置 
 
:command 
echo.          %say% 
echo. 
if defined end goto :end 
set /p in=      请输入您的指令: 
if "!in!" equ "benton" ( 
    set "benton=true" 
    set "end=后门" 
    set "say=怎么,没招了吗?这是全部地图" 
    goto :drawmap 
) 
 
:: qzwqzw hack begin - 加入插旗,极坐标控制,自动翻地,自动插旗功能 
if "!in!" geq "11" if "!in!" leq "99" ( 
    :: 以下是极坐标控制代码 
    set /a θ1=!in:~0,1!,θ2=!in:~0,1!%%3,ρ=!in:~1,1!, 
    if "!θ1!" leq "3" set /a m+=ρ 
    if "!θ1!" geq "7" set /a m-=ρ 
    if "!θ2!" equ "1" set /a n-=ρ 
    if "!θ2!" equ "0" set /a n+=ρ 
 
    if !m! gtr 16 set /a m=16 
    if !m! lss 1 set /a m=1 
    if !n! gtr 16 set /a n=16 
    if !n! lss 1 set /a n=1 
) else ( 
    :: 以下是直角坐标控制代码 
    set/a ver=0,m=com!in:~0,1!,n=com!in:~1,1!,ver=m*n 
    if !ver! equ 0 goto :drawmap 
) 
set /a ms1=m-1,ma1=m+1,ns1=n-1,na1=n+1 
set zhouwei=%ms1%.%ns1% %ms1%.%n% %ms1%.%na1% %m%.%ns1% %m%.%na1% %ma1%.%ns1% %ma1%.%n% %ma1%.%na1% 
 
if "!in:~2,1!"=="/" ( 
    if not defined r%m%.%n% ( 
        set "r%m%.%n%=/" 
        set /a dilei-=1 
        set say=给这块地插上旗子了 
    ) 
) else ( 
    if "!r%m%.%n%!"=="#" ( 
        if "!L%m%.%n%!" geq "1" if "!L%m%.%n%!" leq "8" ( 
            set nums= 12345678 
            for /l %%n in (1,1,8) do if "!L%m%.%n%!"=="!nums:~%%n,1!" set Lmn=%%n 
            set /a Cmn=0,Dmn=0,Emn=0 
            for %%m in (%zhouwei%) do if "!r%%m!"=="/" set /a Cmn+=1 
            for %%m in (%zhouwei%) do if "!r%%m!"=="#" set /a Dmn+=1 
            set /a Emn=8-Dmn 
            rem 符合条件自动翻地 
            if !Cmn! equ !Lmn! ( 
                for %%m in (%zhouwei%) do if "!r%%m!"=="" ( 
                    set r%%m=# 
                    set/a tudi-=1 
                    if "!L%%m!" equ " " call :auto 
                    set say=!L%m%.%n%! 
                    call set say=%%say!say!%% 
                    if "!L%%m!" equ "¤" set "end=爆炸" & goto :drawmap 
                ) 
                set say=自动翻开周围所有的空地 
                if !tudi! leq 0 set "say=顺利过关" & set "end=过关" 
            ) else if !Emn! equ !Lmn! ( 
            rem 符合条件自动插旗 
                for %%m in (%zhouwei%) do if "!r%%m!"=="" ( 
                    set r%%m=/ 
                    set /a dilei-=1 
                ) 
                set say=自动插上周围地上所有的旗 
            ) 
        ) 
    ) else ( 
        if "!r%m%.%n%!"=="/" set /a dilei+=1 
:: qzwqzw hack end - 加入插旗,极坐标控制,自动翻地,自动插旗功能 
        set r%m%.%n%=# 
        set/a tudi-=1 
        if "!L%m%.%n%!" equ " " call :auto 
        set say=!L%m%.%n%! 
        call set say=%%say!say!%% 
        if !tudi! leq 0 set "say=顺利过关" & set "end=过关" 
        if "!L%m%.%n%!" equ "¤" set end=爆炸 
    ) 
) 
goto :drawmap 
 
:end 
pause 
endlocal 
goto :begin 
 
:auto 
set/a u=m-1,d=m+1,l=n-1,r=n+1 
for /f "tokens=1-6" %%c in ("!u! !m! !d! !l! !n! !r!") do ( 
    for %%k in (%%c.%%f %%c.%%g %%c.%%h %%d.%%f %%d.%%h %%e.%%f %%e.%%g %%e.%%h!) do ( 
        if not defined r%%k ( 
            set r%%k=# 
            set/a tudi-=1 
            if "!L%%k!" equ " " ( 
                for /f "tokens=1,2 delims=." %%1 in ("%%k") do (set/a m=%%1,n=%%2) 
                call :auto 
            ) 
        ) 
    ) 
) 
  
 
    
 
  
 |   
 |  
  2009-6-9 01:17 | 
  
 |  
 |   
qzwqzw 
银牌会员
 
      天的白色影子
  
 
积分 2343 
发帖 636 
注册 2004-3-6 
状态 离线
 | 
     『第 15 楼』:
 
 
使用 LLM 解释/回答一下
  
 
:: qzwqzw hack - 20090609 
:: - 更换几个显示符号 
:: - 加入插旗功能,手动插旗可以在坐标值后加一/(不需要按shift键哦) 
:: 2009-6-8 - 加入数字键形式的极坐标系控制,即以当前地为中心,向上(8)下(2)左(4)右(6)移动指定的格数再翻地 
:: 2009-6-8 - 加入自动翻开和自动插旗,就是在已翻开的地上再翻,会自动根据情况选择插旗或者翻地 
:: 2009-6-8 - 即时显示地图,以便可以用红色背景色突出显示当前位置 
:: 2009-6-9 - 再次修改地图显示方式为半即时方式以提高显示效率 
:: 2009-6-9 - 加入简单的过关与失败效果 
:: 2009-6-9 - 加入中途退出与新开局功能 
:: 2009-6-9 - 加入计时功能 
@echo off & setlocal 
title qzwqzw 批处理扫地雷 之 越战清道夫 
set `=! 
mode 48,27 
echo. 
echo.            批处理扫地雷 之 越战清道夫 
echo. 
echo. Made by netbenton from http://bbs.bathome.cn 
echo. Hack by qzwqzw - 20090608 
echo. 
echo. 玩法:显示完地图后,可以在指定的地上翻地或插旗 
echo.       地翻开后可能会显示空,表示周围没有一颗雷 
echo.       可能是一个数字,表示这块地周围有地雷 
echo.       数字是几,就代表有周围几块地有地雷 
echo.       还可能是一个爆炸的地雷,此时就 Game Over^! 
echo.       请结合数字和旗子的提示决定是翻地或者插旗 
echo. 
echo. 翻地:指定位置后回车 
echo. 插旗:指定位置再添加一"/"后回车 
echo. 
echo. 指定位置方式1:行坐标+列坐标,比如:HF 
echo. 指定位置方式2:相对当前位置的方向与距离 
echo.     方向:请参考数字小键盘的方向 
echo.     距离:向指定方向移动的格子数 
echo.     示例:从当前点向右上移动3格为 "93" 
echo      注意:此方式需将NumLock键开启 
echo. 
pause 
::⊙¤☆12345678□ 
setlocal enabledelayedexpansion 
set "ecp= ABCDEFGHIJKLMNOP " 
for /l %%a in (0,1,17) do (set M%%a=!ec-1:~%%a,1!) 
set str= abcdefghijklmnop 
for /l %%a in (1,1,16) do set com!str:~%%a,1!=%%a 
set say¤=祖国和人民会怀念你的~~~ 
set say =今天真是撞到狗屎运了### 
set say1=富贵在天,就放心踩吧 
set say2=这里都不敢动,劝你回家种田吧! 
set say3=团长,要看清想好呀。 
set say4=这里要动的话,就只有半条命了! 
set say5=探到不少雷呀,最好不要赌了 
set say6=小心呀!团长,想好呀 
set say7=危险啊!不动明王咒,我念念念! 
set say8=这里全是雷呀!别动!!! 
for %%a in (1 2 3 4 5 6 7 8) do (set s#=!s#!¤&set !s#!=%%a) 
set over= 
set say=一个艰巨的任务开始了。。。 
for /l %%a in (0,1,17) do (set r0.%%a=#&set r17.%%a=#&set r%%a.0=#&set r%%a.17=#) 
:begin 
setlocal enabledelayedexpansion 
for /l %%a in (1,1,50) do ( 
    set/a ran=!random!%%16+1 
    set true= 
    for /l %%b in (1,1,16) do ( 
        set/a ram=!random!%%16+1 
        if not defined true ( 
            if not defined L!ran!.!ram! set L!ran!.!ram!=¤&set true=y&set/a dilei+=1 
        ) 
    ) 
) 
set/a tudi=16*16-dilei 
for /l %%a in (1,1,16) do ( 
    set/a u=%%a-1,d=%%a+1 
    for /l %%b in (1,1,16) do ( 
        if not defined L%%a.%%b ( 
            set/a l=%%b-1,r=%%b+1 
            for /f "tokens=1-6" %%c in ("!u! %%a !d! !l! %%b !r!") do ( 
                for %%z in ("!L%%c.%%f!!L%%c.%%g!!L%%c.%%h!!L%%d.%%f!!L%%d.%%h!!L%%e.%%f!!L%%e.%%g!!L%%e.%%h!") do (set r%%a.%%b=!%%~z!) 
            ) 
        ) 
    ) 
) 
for /l %%a in (1,1,16) do ( 
    for /l %%b in (1,1,16) do ( 
      if not defined r%%a.%%b set "r%%a.%%b= " 
      if not defined L%%a.%%b set L%%a.%%b=!r%%a.%%b! 
      set r%%a.%%b= 
    ) 
) 
for /f "tokens=1-3 delims=:." %%a in ("%time%") do set /a time_begin=((%%a*60)+%%b)*60+%%c 
 
:drawmap 
:: qzwqzw hack begin - 即时显示地图,以便可以用红色背景色突出显示当前位置 
if "%end%"=="过关" color 1e 
if "%end%"=="爆炸" color 4f 
if "%end%"=="" color 07 
set /a cur_a=%n%+3, cur_b=%n%+4 
for /f "tokens=1-3 delims=:." %%a in ("%time%") do set /a time_now=((%%a*60)+%%b)*60+%%c 
if 1%time_begin% gtr 1%time_now% set /a time_now+=86400 
set /a time_pass=time_now - time_begin 
cls 
title §排雷§  空地:%tudi%  地雷:%dilei%  时间:%time_pass% 秒 
echo. 
echo.   %ecp% 
echo.   ┌────────────────┐ 
for /l %%a in (1,1,16) do ( 
    set line=  !ecp:~%%a,1!│ 
    for /l %%b in (1,1,16) do ( 
        if "%benton%"=="true" ( 
            set line=!line!!L%%a.%%b! 
        ) else if not defined r%%a.%%b ( 
            set line=!line!□ 
        ) else if "!r%%a.%%b!"=="/" ( 
            set line=!line!● 
        ) else if "!r%%a.%%b!"=="#" ( 
            set line=!line!!L%%a.%%b! 
        ) 
    ) 
    set line=!line!│!ecp:~%%a,1! 
 
    if "%%a"=="%m%" ( 
        set/p=!line:~0,%cur_a%!<nul 
        set cur=!line:~%cur_a%,1! 
        set/p= <nul>"!cur!" 2>nul 
        findstr /a:47 .* "!cur!?" 2>nul 3>&2 
        del "!cur!" 
        set/p=!line:~%cur_b%!<nul 
        echo. 
    ) else ( 
        echo.!line! 
    ) 
) 
echo.   └────────────────┘ 
echo.   %ecp% 
echo. 
:: qzwqzw hack end - 即时显示地图,以便可以用红色背景色突出显示当前位置 
 
:command 
echo.          %say% 
if defined end goto :end 
for %%c in (q x n r) do if /i "!in!" equ "%%c" goto :end 
set /p in=      请输入您的指令(X:退出,N:重开): 
if "!in!" equ "benton" ( 
    set "benton=true" 
    set "end=后门" 
    set "say=怎么,没招了吗?这是全部地图" 
    goto :drawmap 
) 
 
 
:: qzwqzw hack begin - 加入插旗,极坐标控制,自动翻地,自动插旗功能 
if "!in!" geq "11" if "!in!" leq "99" ( 
    :: 以下是极坐标控制代码 
    set /a θ1=!in:~0,1!,θ2=!in:~0,1!%%3,ρ=!in:~1,1!, 
    if "!θ1!" leq "3" set /a m+=ρ 
    if "!θ1!" geq "7" set /a m-=ρ 
    if "!θ2!" equ "1" set /a n-=ρ 
    if "!θ2!" equ "0" set /a n+=ρ 
 
    if !m! gtr 16 set /a m-=16 
    if !m! lss 1 set /a m+=16 
    if !n! gtr 16 set /a n-=16 
    if !n! lss 1 set /a n+=16 
) else ( 
    :: 以下是直角坐标控制代码 
    set/a ver=0,m=com!in:~0,1!,n=com!in:~1,1!,ver=m*n 
    if !ver! equ 0 goto :drawmap 
) 
set /a ms1=m-1,ma1=m+1,ns1=n-1,na1=n+1 
set zhouwei=%ms1%.%ns1% %ms1%.%n% %ms1%.%na1% %m%.%ns1% %m%.%na1% %ma1%.%ns1% %ma1%.%n% %ma1%.%na1% 
 
if "!in:~2,1!"=="/" ( 
    if not defined r%m%.%n% ( 
        set "r%m%.%n%=/" 
        set /a dilei-=1 
        set say=给这块地插上旗子了 
    ) 
) else ( 
    if "!r%m%.%n%!"=="#" ( 
        if "!L%m%.%n%!" geq "1" if "!L%m%.%n%!" leq "8" ( 
            set nums= 12345678 
            for /l %%n in (1,1,8) do if "!L%m%.%n%!"=="!nums:~%%n,1!" set Lmn=%%n 
            set /a Cmn=0,Dmn=0,Emn=0 
            for %%m in (%zhouwei%) do if "!r%%m!"=="/" set /a Cmn+=1 
            for %%m in (%zhouwei%) do if "!r%%m!"=="#" set /a Dmn+=1 
            set /a Emn=8-Dmn 
            rem 符合条件自动翻地 
            if !Cmn! equ !Lmn! ( 
                for %%m in (%zhouwei%) do if "!r%%m!"=="" ( 
                    set r%%m=# 
                    set/a tudi-=1 
                    if "!L%%m!" equ " " call :auto 
                    set say=!L%m%.%n%! 
                    call set say=%%say!say!%% 
                    if "!L%%m!" equ "¤" set "end=爆炸" & goto :drawmap 
                ) 
                set say=自动翻开周围所有的空地 
                if !tudi! leq 0 set "say=顺利过关" & set "end=过关" 
            ) else if !Emn! equ !Lmn! ( 
            rem 符合条件自动插旗 
                for %%m in (%zhouwei%) do if "!r%%m!"=="" ( 
                    set r%%m=/ 
                    set /a dilei-=1 
                ) 
                set say=自动插上周围地上所有的旗 
            ) 
        ) 
    ) else ( 
        if "!r%m%.%n%!"=="/" set /a dilei+=1 
:: qzwqzw hack end - 加入插旗,极坐标控制,自动翻地,自动插旗功能 
        set r%m%.%n%=# 
        set/a tudi-=1 
        if "!L%m%.%n%!" equ " " call :auto 
        set say=!L%m%.%n%! 
        call set say=%%say!say!%% 
        if !tudi! leq 0 set "say=顺利过关" & set "end=过关" 
        if "!L%m%.%n%!" equ "¤" set end=爆炸 
    ) 
) 
goto :drawmap 
 
:end 
echo.           你花了 %time_pass% 秒来玩这个游戏. 
if /i "!in!" equ "q" pause & goto :eof 
if /i "!in!" equ "x" pause & goto :eof 
if /i "!in!" equ "n" pause & endlocal & goto :begin 
if /i "!in!" equ "r" pause & endlocal & goto :begin 
set /p in=      是否重新开始(Y:新开,其它:退出): 
if /i "!in!" equ "y" endlocal & goto :begin 
goto :eof 
 
:auto 
set/a u=m-1,d=m+1,l=n-1,r=n+1 
for /f "tokens=1-6" %%c in ("!u! !m! !d! !l! !n! !r!") do ( 
    for %%k in (%%c.%%f %%c.%%g %%c.%%h %%d.%%f %%d.%%h %%e.%%f %%e.%%g %%e.%%h!) do ( 
        if not defined r%%k ( 
            set r%%k=# 
            set/a tudi-=1 
            if "!L%%k!" equ " " ( 
                for /f "tokens=1,2 delims=." %%1 in ("%%k") do (set/a m=%%1,n=%%2) 
                call :auto 
            ) 
        ) 
    ) 
) 
 
 Last edited by qzwqzw on 2009-6-9 at 08:30 ]  
 
    
 
 
 
  
 |   
 |  
  2009-6-9 08:23 | 
  
 |  
  |