Board logo

标题: [游戏娱乐] 纯批处理扫雷游戏 [打印本页]

作者: netbenton    时间: 2009-6-7 22:13     标题: 纯批处理扫雷游戏

  1. @echo off
  2. goto :sktit
  3. a
  4. dw E8A 80 CD89 C581 81 F980 7F05 BA09 1A4 9B4 21CD 5EEB 82BE E800 65 5AE3
  5. dw 73E8 3C00 7F18 8853 E8C6 57 4CE3 65E8 3C00 7F4F 8845 B0C2 F602 50E2 A0B0
  6. dw E6F6 15F E8C7 3D 32E3 C387 393C 27E 904 FB80 7E39 8003 9C3 F24 E380 C00F
  7. dw 4E0 D808 B850 B800 750 295A 89F5 ACE9 88AA AAD0 F9E2 B0 4CB4 21CD ADBA
  8. dw B401 CD09 EB21 ACF3 203C 475 F9E2 9EB C388 3CAC 7520 E202 C3F9 C387 302C
  9. dw EB80 B430 F60A E4 C3D8 CEB2 FDCA BBB2 BBB9 B824 CAF1 B2BD B6BB 24D4
  10. r cx
  11. b6
  12. n tit.com
  13. w
  14. a 100
  15. db cd 16 c3
  16. r cx
  17. 3
  18. n abc.com
  19. w
  20. q
  21. :sktit
  22. title 批处理扫地雷 之 越战清道夫   Made by netbenton from http://bbs.bathome.net
  23. set `=!
  24. if "%1"=="ggbcom" goto :ggbcom
  25. chcp 437 >nul
  26. graftabl 936 >nul
  27. debug <%~nx0>nul
  28. echo;&echo;&echo 按任意键开始。。。&abc.com
  29. start /b "" %0 ggbcom
  30. set #for1=for /f "tokens=1-6" %%c in ("!u! !m! !d! !l! !n! !r!") do (
  31. set #for2=for %%k in (%%c.%%f %%c.%%g %%c.%%h %%d.%%f %%d.%%h %%e.%%f %%e.%%g %%e.%%h!) do (
  32. ::这个定义是为了缩减代码和提速
  33. setlocal enabledelayedexpansion
  34. set "ec-1= ABCDEFGHIJKLMNOP "
  35. for /l %%a in (0,1,17) do (set M%%a=!ec-1:~%%a,1!)
  36. set ec18= !ec-1! 后面还有其它字符表示[插旗]或[取旗]
  37. set ec-1= !ec-1!
  38. set ec0=┌────────────────┐  
  39. set ec17=└────────────────┘
  40. set ec19=  
  41. set str= abcdefghijklmnop
  42. for /l %%a in (1,1,16) do set com!str:~%%a,1!=%%a
  43. set ∷=今天运气不错哦。。。
  44. set ①=生死由命,就放心踩吧
  45. set ②=这里都不敢动,劝你回家种田吧!
  46. set ③=团长,要看清想好呀。
  47. set ④=这里要动的话,就只有半条命了!
  48. set ⑤=探到不少雷呀,最好不要赌了
  49. set ⑥=小心呀!团长,想好呀
  50. set ⑦=危局险啊!最好别动了!
  51. set ⑧=这里全是雷呀!别动!!!
  52. set n=0
  53. for %%a in (① ② ③ ④ ⑤ ⑥ ⑦ ⑧) do (set/a n+=1&set s#=!s#!★&set !s#!=%%a&set n%%a=!n!)
  54. set over=
  55. set bj=@
  56. set bj1=-1
  57. set bj@1=1
  58. set say=一个艰巨的任务开始了。。。
  59. for /l %%a in (0,1,17) do (set r0.%%a=#&set r17.%%a=#&set r%%a.0=#&set r%%a.17=#)
  60. :begin 重新开始
  61. cls
  62. color 2f
  63. setlocal enabledelayedexpansion
  64. for /l %%a in (1,1,40) do (
  65.   set/a ran=!random!%%16+1
  66.   set true=
  67. for /l %%b in (1,1,16) do (
  68.   set/a ram=!random!%%16+1
  69.   if not defined true (
  70.    if not defined L!ran!.!ram! set L!ran!.!ram!=★&set true=y&set/a dilei+=1
  71.   )
  72. )
  73. )
  74. set/a tudi=16*16-dilei
  75. for /l %%a in (1,1,16) do (
  76. set/a u=%%a-1,d=%%a+1
  77. for /l %%b in (1,1,16) do (
  78.   if not defined L%%a.%%b (
  79.    set/a l=%%b-1,r=%%b+1
  80.    for /f "tokens=1-6" %%c in ("!u! %%a !d! !l! %%b !r!") do (
  81. 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!)
  82.    )
  83.   )
  84. )
  85. )
  86. for /l %%a in (1,1,16) do (
  87. for /l %%b in (1,1,16) do (
  88.   if not defined r%%a.%%b set "r%%a.%%b=∷"
  89.   if not defined L%%a.%%b set L%%a.%%b=!r%%a.%%b!
  90.   set r%%a.%%b=
  91. )
  92. )
  93. set benton=set "str=!`!str!`!□"
  94. :loop 主循环
  95. cls
  96. for /l %%a in (1,1,16) do (
  97. set str=
  98. for /l %%b in (1,1,16) do (
  99.   if defined r%%a.%%b (
  100.      if !r%%a.%%b! equ @ (set "str=!str!▼") else (set "str=!str!!`!L%%a.%%b!`!")
  101.   ) else (
  102.      %benton%
  103.   )
  104. )
  105. set ec%%a=│!str!│
  106. )
  107. set benton=set "str=!`!str!`!□"
  108. :error 出错循环
  109. cls
  110. for /l %%a in (-2,1,19) do (for %%b in ("!ec%%a!") do echo;     !M%%a!%%~b!M%%a!)
  111. tit 21 08 2b!over! !say!
  112. if defined over echo 游戏结束&color 1d&pause&endlocal&goto :begin
  113. if !tudi! leq 0 echo 恭喜你过关了&color 1e&pause&endlocal&goto :begin
  114. tit 03 50 2e还有!dilei!个雷,!tudi!亩地
  115. set /p in=        输入打开点[行前,列后]:
  116. if "!in!" equ "benton" set benton=set "str=!`!str!`!!`!L%%a.%%b!`!"&goto :loop
  117. set/a ver=0,m=com!in:~0,1!,n=com!in:~1,1!,ver=m*n
  118. if !ver! equ 0 goto :error
  119. set back=:loop
  120. :zhilp 主动或自动打开地,均使用这个子过程, 与:zhisub子过程和:auto子过程有联合循环动作,即有重入。
  121. if "!in:~2,1!" neq "" (
  122. if "!r%m%.%n%:@=!" neq "!r%m%.%n%!" (
  123.   for %%a in (bj!r%m%.%n%!) do (
  124.    set r%m%.%n%=!%%a!
  125.    set/a dilei+=%%a1
  126.   )
  127.   goto %back%
  128. ) else (
  129.   goto :error
  130. )
  131. )
  132. if defined r%m%.%n% if "!r%m%.%n%!" equ "#" (goto :zhisub) else (goto :error)
  133. set r%m%.%n%=#
  134. set/a tudi-=1
  135. if "!L%m%.%n%!" equ "★" set over=  光荣牺牲了
  136. if "!L%m%.%n%!" equ "∷" call :auto
  137. set say=!L%m%.%n%!
  138. set say=!%say%!
  139. goto %back% 依靠变量来控制程序走向
  140. :zhisub 选择点为已经打开的数字时,自动插旗或打开地 的 子过程
  141. set back=:eof
  142. set in=
  143. 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
  144. %#for1%
  145. %#for2%
  146.   if defined r%%k (set/a zh!r%%k!+=1) else (set/a zhi+=1)
  147. )
  148. )
  149. set/a zh#=zh@+zhi
  150. if !zh! equ !zh@! set in=12
  151. if !zh! equ !zh#! set in=123
  152. if not defined in goto :error
  153. %#for1%
  154. %#for2%
  155.   for /f "tokens=1,2 delims=." %%1 in ("%%k") do (set/a m=%%1,n=%%2)
  156.   if not defined r%%k call :zhilp 循环调用减少代码,增强自动化
  157. )
  158. )
  159. goto :loop
  160. :auto  打开的为空地时自动打开地 的 子过程
  161. set/a u=m-1,d=m+1,l=n-1,r=n+1
  162. %#for1%
  163. %#for2%
  164.   if not defined r%%k (
  165.    set r%%k=#
  166.    set/a tudi-=1
  167.    if "!L%%k!" equ "∷" (
  168.     for /f "tokens=1,2 delims=." %%1 in ("%%k") do (set/a m=%%1,n=%%2)
  169.     call :auto 循环调用减少代码,增强自动化
  170.    )
  171.   )
  172. )
  173. )
  174. goto :eof
  175. :ggbcom
  176. setlocal enabledelayedexpansion
  177. set sele=批处理之家 扫地雷游戏 
  178. :ggbcomlp
  179. set sele=!sele:~1!!sele:~,1!
  180. tit 12 54 2d[%time:~,8%]
  181. tit 11 48 2d{!sele!}
  182. ping -n 2 127.1 >nul
  183. goto :ggbcomlp
复制代码
附tit.com源码:
  1. ;com/exe程序汇编开发工具,批处理版。版本2.0,(应用实例八)
  2. ;面向该工具的试验程序,功能:《定点显示,与光标位置无关》
  3. ;如执行
  4. ;tit.com 12 34 2f$$$$$
  5. ;会在12行34列显示字符串$$$$$,颜色为2f
  6. set dos=21
  7. set 读=3
  8. set 置=2
  9. set 显示=10
  10. set 大于=ng
  11. set 等于=nz
  12. set 小于=g
  13. macro $ abc.inc ;包含宏库文件
  14. ;调用的abc.inc文件内的“参数入口”宏(长度#len.jp,起址#verb.jp)
  15. $参数入口.abc jp
  16. a 100 ;程序开始
  17. mov cl,[#len.jp]
  18. mov bp,cx
  19. add bp,81
  20. if  cl 小于 5
  21.         $显示串.abc nop @#str1 ;显示#str1
  22.         jmp #quit.nop ;相当于cmd的goto :eof
  23. endif
  24. mov si,#verb.jp
  25. call ##get
  26. jcxz #error
  27. call ##test
  28. cmp al,18 ;不能大于25行
  29. jg #error
  30. mov dh,al
  31. call ##get
  32. jcxz #error
  33. call ##test
  34. cmp al,4f ;不能大于79列
  35. jg #error
  36. mov dl,al
  37. mov al,2 ;有一字节为颜色位
  38. mul dl
  39. push ax
  40. mov al,a0 ;每行占50h x 2字节
  41. mul dh
  42. pop di
  43. add di,ax
  44. call ##get ;取颜色到al
  45. jcxz #error
  46. xchg ax,bx
  47. if al 大于 39
  48.         add al,9 ;字母处理
  49. endif
  50. if bl 大于 39
  51.         add bl,9
  52.     endif
  53.    
  54.     and al,0f
  55. and bl,0f
  56. $shl_al.abc nop 4
  57. or al,bl
  58.     push ax
  59.    
  60.     MOV     AX,B800
  61.     PUSH    AX
  62.     POP     ES
  63.    
  64.     pop dx
  65.    
  66.     sub bp,si
  67.     mov cx,bp
  68.    
  69. #eclp lodsb
  70.     stosb
  71.     mov al,dl
  72. stosb
  73. loop #eclp
  74. $quit.abc nop 0 ;调用退出宏,置返回码为0,返回dos
  75. ;调用显示串宏
  76. #error $显示串.abc nop @#str2
  77. jmp #quit.nop
  78. ; get子程序定义
  79. proc get ;检测参数字符是否为:0~9,CX为零出错
  80. #lp lodsb
  81. cmp al,20
  82. jnz #one
  83. loop #lp
  84. jmp #err
  85. #one mov bl,al
  86. #tow lodsb
  87. cmp al,20
  88. jnz #err
  89. loop #tow
  90. #err ;错误退出
  91. endp
  92.   
  93. ; test子程序定义
  94. proc test ;把10进制ascii转成机内码16制
  95. xchg ax,bx
  96. sub al,30
  97. sub bl,30
  98. mov ah,a
  99. mul ah
  100. add al,bl
  101. endp
  102. ;数据段定义
  103. #str1 db "参数不够!$"
  104. #str2 db "格式不对!$"
复制代码

作者: jackelijie135    时间: 2009-6-7 22:55     标题: 回复 1楼 的帖子

太牛了,看不懂,楼主好强
作者: zljzsmzzx    时间: 2009-6-10 13:00

玩了一下,楼主真是厉害。
作者: netbenton    时间: 2009-8-4 13:47

2009.8.4更新(一楼)
引入汇编,增加了彩色显示及动态时间
作者: a4188809b    时间: 2009-10-2 14:44

顶起来!  楼主 发的 经典!
作者: opolokoi    时间: 2009-12-25 16:43

汇编啊汇编,强大啊不懂。
作者: woxishuji    时间: 2011-1-19 01:08

楼主很好很强大啊...
作者: vigiles    时间: 2011-1-21 12:35

怎么插旗,取旗?
作者: xuzhi    时间: 2011-1-22 21:21

LZ实在是太牛了!!




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