Board logo

标题: [其他] [分享]批处理游戏扫雷(纯p版)五子棋(人机对战) [打印本页]

作者: yangfengoo    时间: 2010-2-25 17:55     标题: [分享]批处理游戏扫雷(纯p版)五子棋(人机对战)

申明:本来是想发在原创代码区的,但是进去之后发现那里好像没发帖功能。所以发在这了
    扫雷是看春晚是觉得无聊写的,五子棋是写完扫雷后继续无聊写的

1.扫雷 小静静_特别版
  1. @echo off&setlocal enabledelayedexpansion
  2. title  …扫雷(¤)…By-VBT6_村庄 #小静静_特别版
  3. rem 于2010年春晚节目间开始构思制作,于2010#2#15晚完成1.0版。
  4. :starts
  5. color f0&mode con cols=70 lines=20
  6. set zm=A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P
  7. set lei=¤&set qi=♀&cls&call :sysm&echo.
  8. echo.版本说明:
  9. echo.。。输入兼容(如:A3;a3;3a;3A)均代表同一坐标点
  10. echo.。。支持一次多个输入,以空格间隔(格式为:1a 2a 3a bj4d cx5f)。
  11. echo.。。请按格式输入,错误输入可能造成未知错误。
  12. echo.。。本版本为小静静特别制作。赢了有奖励哦!
  13. echo.。。本版本未作严格测试,部分算法尚未完善,BUG在所难免,欢迎指正!
  14. echo.。。最后您有任何意见或疑问可以向117609665@qq.com提出或咨询!
  15. echo.                                   By-村庄,于2010#2#17晚。
  16. :::::还有其他功能和便捷操作未作详述,当做小彩蛋自己发掘吧。:::::
  17. echo.&set /p qijing=请选择难度(r:容易—9×9 y:困难—16×16 其他:默认-12×12)#
  18. set hb=!qijing:~0,1!&set js=!qijing:~1!
  19. set jslv=16&for /l %%a in (10 1 30) do if %%a==!js! set /a jslv=%%a
  20. if !hb!==r (set nd_=9&set zm=!zm:~0,33!&mode con cols=45 lines=28&set kg=      ) else (
  21.     if !hb!==y (set nd_=16&mode con cols=70 lines=40&set kg=                    ) else (
  22.      set nd_=12&set zm=!zm:~0,45!&mode con cols=55 lines=32&set kg=         )
  23.   )   
  24. cls&set /a nd#=!nd_!*!nd_!
  25. ::初始表
  26. set h1=┳━&set h2=╋━&set h3=┻━
  27. set a1=&set a2=&set a3=&set hb=&set js=0
  28. for /l %%a in (1,1,3) do for /l %%i in (2,1,!nd_!) do set a%%a=!a%%a!!h%%a!
  29. for /l %%a in (1,1,!nd_!) do set hb=!hb!┃▓
  30. for /l %%a in (1 1 !nd#!) do set bj%%a=▓&set bj_%%a=
  31. ::布雷,默认16%
  32. for /l %%i in (2,1,!nd#!) do (set /a s=!random!%%100&if !s! lss !jslv! set bj_%%i=¤)
  33. ::标准数据
  34. set js_lei=0
  35. for /l %%a in (1 1 !nd#!) do if !bj_%%a!==¤ (set /a js_lei+=1) else (set pp=0&call :sjk %%a
  36.     for /l %%b in (!_1!,1,!_2!) do if !x%%b! gtr 0 if !x%%b! leq !nd#! for %%c in (!x%%b!) do if !bj_%%c!==¤ set /a pp+=1
  37.     set "bj_%%a=!pp! ")
  38. ::查看标准数据可以使用cd.>bjsj.txt&for /l %%a in (1 1 !nd#!) do echo bj_%%a=!bj_%%a!>>bjsj.txt
  39. call :huabiao xx 画初始表
  40. ::游戏开始
  41. :yxks
  42. echo.上次输入#!qijing! #%1 %2
  43. set /p qijing=请输入坐标(如:3a;标记旗bj3a;撤销标记旗cx3a)  #
  44. for %%a in (!qijing!) do set sr=%%a&call :zbcl
  45. goto yxks
  46. ::游戏输入数据处理中心
  47. :zbcl
  48. if /i !sr!==xx (goto starts) else (if /i !sr!==qj (cls&goto qj) else (if /i !sr!==sm cls&call :sysm&call :qj))
  49. if /i "!sr:~0,2!"=="bj" (set sr=!sr:~2!&call :chuli 11) else (
  50.       if /i "!sr:~0,2!"=="cx" (set sr=!sr:~2!&call :chuli 22) else call :chuli)
  51. goto :eof   
  52. :chuli
  53. call :zb
  54. for %%a in (!shu!) do (
  55.    if "%1"=="" (if "!bj%%a!"=="♀" set /a sx_lei+=1
  56.       set bj%%a=!bj_%%a!&set s=!bj_%%a!
  57.    if "!bj_%%a!"=="0 " set hh=&set js_=0&call :sjk %%a&call :fdg)
  58.    if "%1"=="11" if "!bj%%a!"=="▓" set bj%%a=♀&set /a sx_lei-=1
  59.    if "%1"=="22" if "!bj%%a!"=="♀" set bj%%a=▓&set /a sx_lei+=1
  60.    )
  61. call :huabiao yy
  62. if !sx_lei!==0 call :_ying
  63. if !s!==¤ call :_shu 触雷了
  64. if !sx_lei! lss 0 call :_shu 雷不能为负
  65. goto :eof
  66. :zb
  67. ::下面屏蔽部分错误输入,增强兼容性
  68. if not "!sr:~3!"=="" set sr=17z
  69. if "!sr:~0,1!" gtr "9" set sr=!sr:~1!!sr:~0,1!
  70. if !sr:~-1! lss 9 (set sr=17z) else (if !sr:~-1! gtr !zm:~-1! set sr=17z)
  71. set x=!sr:~0,-1!&if !x! gtr !nd_! (set sr=17z) else (if !x! lss 0 set sr=17z)
  72. if !sr!==17z call :yxks 输入中出现错误 请重新输入
  73. ::得到坐标对应的数值
  74. set /a shu=(!sr:~0,-1!-1)*!nd_!
  75. for %%a in (!zm!) do set /a shu+=1&if /i "%%a"=="!sr:~-1!" goto :eof
  76. ::数据库
  77. :sjk
  78. set /a x2=%1-1&set /a x1=!x2!-!nd_!&set /a x3=!x2!+!nd_!
  79. set /a x7=%1+1&set /a x6=!x7!-!nd_!&set /a x8=!x7!+!nd_!
  80. set /a x4=%1-!nd_!&set /a x5=%1+!nd_!&set /a ww=!x5!%%!nd_!
  81. if !ww!==0 (set _1=1&set _2=5) else (if !ww!==1 (set _1=4&set _2=8) else (set _1=1&set _2=8))
  82. goto :eof
  83. ::如果打开的坐标值为“0”,则打开其附近8个坐标.这里最好用递归算法,但本人能力所限不能完成
  84. ::写了下面“fdg”;“fangdigui”两个标签基本实现一定条件下仿递归功能
  85. :fdg
  86. if "%1"=="qbbj" set /a js#+=1
  87. for /l %%b in (!_1!,1,!_2!) do if !x%%b! gtr 0 if !x%%b! leq !nd#! for %%c in (!x%%b!) do if "!bj%%c!"=="▓" (
  88.      set bj%%c=!bj_%%c!&if "!bj%%c!"=="0 " set hh=!hh!%%c &set /a js_+=1)
  89. if "!js#!"=="!js_#!" if not "!hh!"=="" call :fangdigui
  90. goto :eof
  91. :fangdigui
  92. set js#=0&set h3=!hh!&set hh=&set js_#=!js_!&set js_=0
  93. for %%a in (!h3!) do call :sjk %%a&call :fdg qbbj
  94. goto :eof
  95. ::输
  96. :_shu
  97. msg %username% "#%1#你输了!被小静静打屁屁!js_lei!下"
  98. set /p qijing=你输了!要再来一盘吗?(Y_确定/S_显示答案/其他_退出):
  99. if /i !qijing!==y (goto starts) else (
  100.    if /i !qijing!==s (cls&echo.答案:&echo.
  101.     for /l %%a in (1 1 !nd#!) do set bj%%a=!bj_%%a!
  102.        call :huabiao xx&set/p=按任意键重新开始&goto starts
  103.     ) else exit)
  104. ::赢
  105. :_ying
  106. for /l %%a in (1 1 !nd#!) do if "!bj%%a!"=="▓" goto :eof
  107. set js=0&for /l %%a in (1 1 !nd#!) do if !bj%%a!==♀ if !bj_%%a!==¤ set /a js+=1
  108. if !js!==!js_lei! msg %username% " 恭喜你赢了!得到小静静香吻!js_lei!个 "&goto starts
  109. goto :eof
  110. ::画表
  111. :huabiao
  112. cls&set _n=1&set _nn=!nd_!&if %1==xx set sx_lei=!js_lei!
  113. echo.!kg!还有$!sx_lei!$雷 ######共有$!js_lei!$雷
  114. echo.###输入:xx重新开始;sm显示使用帮助###
  115. echo     !zm!
  116. echo   ┏━!a1!┓
  117. for /l %%i in (1,1,!nd_!) do (
  118.    if %%i lss 10 (set hs= %%i) else set hs=%%i
  119.    set hb=&for /l %%a in (!_n!,1,!_nn!) do set hb=!hb!┃!bj%%a!
  120.    set /a _n+=!nd_!&set /a _nn+=!nd_!
  121.    echo !hs!!hb!┃
  122.    if not %%i==!nd_! echo   ┣━!a2!┫
  123. )  
  124. echo   ┗━!a3!┛
  125. goto :eof
  126. :: 小静静
  127. :qj
  128. echo.&echo.
  129. echo       _____                 ^&^&^&^&_^) ^)
  130. echo     \/,---^<                ^&^&^&^&\ \
  131. echo     ( )c~c~~@~@            )- - ^&^&\ \     !
  132. echo     C   ^>/                 \^<   ^|^&/     静
  133. echo       \_O/  #哇塞美女!    _`^*-'_/ /   静
  134. echo     ,- ^>o^<-.              / ____ _/   小
  135. echo    /   \/   \            / /\  _)_)  是
  136. echo   / /^|  ^| ^|\ \          / /  )   ^| #我
  137. echo   \ \^|  ^| ^|/ /          \ \ /    ^|
  138. echo    /_/`___^|_\            /_/\____^|
  139. echo      ^|  ^| ^|                  ^\  \^|
  140. echo      ^|  ^| ^|                   `. )
  141. echo      ^|  ^| ^|                   / /
  142. echo      ^|__^|_^|_                 /_/^|
  143. echo      (____)_)                ^|^\_\_
  144. echo. &set/p=按任意键返回&cls&call :huabiao _re&goto yxks
  145. :: 使用说明数据
  146. :sysm
  147. echo.使用说明:
  148. echo....输入坐标打开对应方块(如:3a或a3)
  149. echo....输入标记旗在坐标前加“bj”前缀(如:bj3a或bja3)
  150. echo....撤销标记旗在坐标前加“cx”前缀(如:cx3a或cxa3)
  151. echo....输入“xx”重新开始
  152. goto :eof
复制代码
链接: https://pan.baidu.com/s/1WyCB9epM3VWfGBfducvL7w?pwd=x7rw
作者: yangfengoo    时间: 2010-2-25 17:56     标题: 五子棋(人机对战测试版)

2.五子棋(人机对战测试版)::刚刚搜了下发现写这个的人有几个。欢迎拍砖
  1. @echo off&setlocal enabledelayedexpansion
  2. title  …By-VBT6_村庄 #测试版#
  3. :starts
  4. color f0&mode con cols=68 lines=14
  5. set zm=A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P
  6. set hz=●&set bz=◎&set hb=&set szj=╋&set ai=0&set shu=0&set "kg=      "
  7. cls&call :sysm&echo.&set /p sr=默认为选手先手,是否交换(Y/N)#
  8. ::初始表
  9. color f0&mode con cols=68 lines=40
  10. for /l %%a in (1,1,16) do set "hb=!hb!┃  "
  11. for /l %%a in (1,1,256) do set "bj_%%a=!szj!"
  12. if /i "!sr!"=="Y" set bj_120=!bz!
  13. call :huabiao
  14. ::游戏开始
  15. :yxks
  16. echo.选手上次输入#!sr! #%1   ::   电脑上次输入#!dn_l!!dn_h! #!bz!
  17. shift&shift&set /p sr=请输入坐标(如:3a;a3;A3;3A)#
  18. if /i !sr!==xx (goto starts) else (call :zb)
  19. for /l %%a in (9 -1 1) do set /a s=%%a-1&for %%b in (!s!) do if %%b==0 (set xs%%a=!shu!) else (set xs%%a=!xs%%b!)
  20. set lz=!hz!&call :luozi&call :pdsy
  21. ::电脑算法
  22. echo.&echo.!kg!!kg!!kg!电脑正在思考!请稍等…………
  23. set /a x1=1,x2=16,x3=15,x4=17
  24. if "!ai!"=="0" set /a shu=!zb!+1&goto :dnlz
  25. ::AI思考过程
  26. for %%x in (1 4 5 6) do (for /l %%a in (1 1 %%x) do if !ai%%a! gtr 0 call :cpu !bz! lp%%x !ai%%a!
  27. for /l %%a in (1 1 %%x) do call :cpu !hz! lp%%x !xs%%a!)
  28. ::不符合AI条件,随机在附近落子
  29. :sjlz  
  30. for %%b in (!x1! -!x1! !x2! -!x2! !x3! -!x3! !x4! -!x4!) do (set /a lsbl=!zb!+%%b
  31.    for %%a in (!lsbl!) do if "!bj_%%a!"=="!szj!" set shu=!lsbl!&goto :dnlz)
  32. set /a x1+=1,x2+=16,x3+=15,x4+=17
  33. goto :sjlz
  34. :dnlz
  35. for /l %%a in (9 -1 1) do set /a s=%%a-1&for %%b in (!s!) do if %%b==0 (set ai%%a=!ai!) else (set ai%%a=!ai%%b!)
  36. set lz=!bz!&call :luozi
  37. if !xx!==4 call :pdsy
  38. set /a dn_h=!ai!/16&set /a dn_l=!ai!-(dn_h*16)&set /a dn_h+=1
  39. set s=0&for %%a in (!zm!) do (set /a s+=1&if !s!==!dn_l! set dn_l=%%a)
  40. goto :yxks
  41. ::电脑算法
  42. :cpu
  43. for %%a in (4 3 2 1) do (set shu=%3&set js_b=0&set js_h=0&set js_=0&call :_%%a
  44.   for /l %%x in (1 1 5) do (
  45.     if !h1! gtr 0 if !shu! leq 256 for %%b in (!h1! !h2! !h3! !h4! !shu!) do (
  46. if "!bj_%%b!"=="!bz!" (set /a js_b+=1) else (if "!bj_%%b!"=="!hz!" (set /a js_h+=1) else (set /a js_+=1)))
  47. set xx=&call :%2
  48. set js_b=0&set js_h=0&set js_=0&set /a shu+=!bc!&call :_%%a)
  49. )
  50. goto :eof
  51. :lp6
  52. for %%a in (h b) do if !js_%%a!==3 set "xx=3"
  53. if !xx!==3 for %%b in (!h4! !h3! !h2! !h1!) do if "!bj_%%b!"=="!szj!" set shu=%%b&goto :dnlz
  54. for %%a in (h b) do if !js_%%a!==2 set "xx=2"
  55. if !xx!==2 for %%b in (!h3! !h2! !h4!) do if "!bj_%%b!"=="!szj!" set shu=%%b&goto :dnlz
  56. goto :eof
  57. :lp5
  58. for %%a in (h b) do if !js_%%a!==3 set "xx=3"
  59. if !xx!==3 if !js_!==2 (for %%b in (!h1!) do if "!bj_%%b!"=="!szj!" for %%c in (!h4! !h3! !h2!) do if "!bj_%%c!"=="!szj!" set shu=%%c&goto :dnlz
  60. for %%b in (!h3! !h2!) do if "!bj_%%b!"=="!szj!" set shu=%%c&goto :dnlz)
  61. for %%a in (h b) do if !js_%%a!==2 set "xx=2"
  62. if !xx!==2 if !js_!==3 for %%b in (!h3! !h4! !h2!) do if "!bj_%%b!"=="!szj!" set shu=%%b&goto :dnlz
  63. goto :eof
  64. :lp4
  65. for %%a in (h b) do if !js_%%a!==3 set "xx=3"
  66. if !xx!==3 if !js_!==2 for %%b in (!h1!) do if "!bj_%%b!"=="!szj!" for %%c in (!shu!) do if "!bj_%%c!"=="!szj!" set shu=%%c&goto :dnlz
  67. goto :eof
  68. :lp1
  69. for %%a in (h b) do if !js_%%a!==4 set "xx=4"
  70. if !xx!==4 if !js_!==1 for %%b in (!h1! !h2! !h3! !h4! !shu!) do if "!bj_%%b!"=="!szj!" set shu=%%b&goto :dnlz
  71. goto :eof
  72. ::落子
  73. :luozi
  74. if !lz!==!bz! set ai=!shu!
  75. for %%a in (!shu!) do if "!bj_%%a!"=="!szj!" (set bj_%%a=!lz!) else (call :yxks 此处已有子)
  76. call :huabiao&goto :eof
  77. :pdsy
  78. set lp=&set zb=!shu!
  79. for %%a in (4 3 2 1) do (set shu=!zb!&set js=0&call :_%%a
  80. for /l %%x in (1 1 5) do (
  81.     for %%b in (!h1! !h2! !h3! !h4! !shu!) do if "!bj_%%b!"=="!lz!" set /a js+=1
  82.     if !js!==5 (set hw=0&for %%b in (!h1! !h2! !h3! !h4! !shu!) do set /a xx=%%b%%16&if !xx! lss 2 set /a hw+=1
  83.        if not !hw!==2 set lp=OK) else (set js=0&set /a shu+=!bc!&call :_%%a))
  84. if !lp!==OK goto _ying
  85. )
  86. goto :eof
  87. :_1
  88. set bc=1&set /a h1=!shu!-4&set /a h2=!h1!+1&set /a h3=!h2!+1&set /a h4=!h3!+1&goto :eof
  89. :_2
  90. set bc=17&set /a h1=!shu!-68&set /a h2=!h1!+17&set /a h3=!h2!+17&set /a h4=!h3!+17&goto :eof
  91. :_3
  92. set bc=15&set /a h1=!shu!-60&set /a h2=!h1!+15&set /a h3=!h2!+15&set /a h4=!h3!+15&goto :eof
  93. :_4
  94. set bc=16&set /a h1=!shu!-64&set /a h2=!h1!+16&set /a h3=!h2!+16&set /a h4=!h3!+16&goto :eof
  95. ::判断输赢模块
  96. :_ying
  97. set hw=0&for /l %%a in (1,1,256) do if !bj_%%a!==!lz! set /a hw+=1
  98. if !lz!==!hz! (msg %username% " ###恭喜!你在第"!hw!"手赢了###") else (
  99.   set /a hw+=1&msg %username% " ###小样!你在第"!hw!"手输了###")
  100. set/p=&goto starts
  101. :zb
  102. ::下面屏蔽部分错误输入,增强兼容性
  103. set "shu="&if not "!sr:~3!"=="" set shu=-1
  104. if "!sr:~0,1!" gtr "9" set sr=!sr:~1!!sr:~0,1!
  105. if !sr:~-1! lss 9 (set shu=-1) else (if /i !sr:~-1! gtr p set shu=-1)
  106. set x=!sr:~0,-1!&if !x! gtr 16 (set shu=-1) else (if !x! lss 0 set shu=-1)
  107. if !shu! lss 0 (call :huabiao&call :yxks 输入错误)
  108. ::正确输入数据坐标
  109. set lie=0&set /a hang=(!sr:~0,-1!-1)*16&set /a hw=!hang!+16
  110. for %%a in (!zm!) do set /a lie+=1&if /i "%%a"=="!sr:~-1!" set /a shu=!hang!+!lie!&goto :eof
  111. ::画表模块
  112. :huabiao
  113. cls&set _n=1&set _nn=16
  114. echo.!kg!!kg!     $$$$$选手执黑!hz! 电脑执白:!bz!$$$$$
  115. echo.&echo     !zm!
  116. for /l %%i in (1,1,16) do (
  117.    if %%i lss 10 (set hs= %%i) else set hs=%%i
  118.    set hb#=&for /l %%a in (!_n!,1,!_nn!) do set "hb#=!hb#!!bj_%%a!━"
  119.    set hb#=!hb#:~0,-1!&set /a _n+=16&set /a _nn+=16
  120.    echo !hs! !hb#!
  121.    if %%i lss 16 echo    !hb!)  
  122. goto :eof
  123. ::使用说明数据
  124. :sysm
  125. echo.使用说明:
  126. echo....默认为电脑“执白”,选手“执黑”
  127. echo....输入坐标打开对应方块(如:a3)
  128. echo....输入兼容(如:A3;3a;3A;a3)均代表同一坐标点
  129. echo....输入“xx”重新开始
  130. echo....补充说明——考虑到效率,AI只初步对比前3-6个落子情况,并据此作出判断,即使这样反应也有些慢
  131. goto :eof
复制代码
链接: https://pan.baidu.com/s/1SYR_LKQZ0LPkPWJz_gv5vA?pwd=ati4
作者: 523066680    时间: 2010-2-25 21:07

顶,第一个代码图形,梦幻麻将馆的身影……
作者: yangfengoo    时间: 2010-2-25 21:47

梦幻麻将馆没见过,在搜狗输入法你搞出来的
作者: batman    时间: 2010-2-26 09:38

小静静。。。楼主莫非是女孩子?

如果真是女孩子能有如此批处理功底,实在是少见。。。

排处理是不太适合用来写游戏的,建议楼主将精力和能力发挥在解决实际问题上。。。
作者: yangfengoo    时间: 2010-2-26 10:15     标题: 回复 5楼 的帖子

汗!我 只是想看美女罢了。
  我只是在家无聊,练手。
作者: chenyulzhh    时间: 2010-2-26 12:28

顶一个。。。都是强人啊。。
作者: asdfghjkl;'    时间: 2020-1-12 16:57

太太太太厉害了!
坛长小号一样的存在




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