Board logo

标题: [代码合集] 黑白棋V1.3.1(未完成)已优化1次,修复0个BUG(疯狂更新中...) [打印本页]

作者: cmd1152    时间: 2021-7-19 11:41     标题: 黑白棋V1.3.1(未完成)已优化1次,修复0个BUG(疯狂更新中...)

本帖最后由 cmd1152 于 2021-7-24 12:27 编辑

此游戏是我和路过共同制作,已优化1次,修复0个BUG
日志:
2021/7/20 13:31 修复显示BUG
2021/7/20 13:32 升级版本至V1.1.1
2021/7/21 11:25 升级版本至V1.2
2021/7/21 11:41 升级版本至V1.2.1
2021/7/21 11:43 升级版本至V1.2.2
2021/7/21 11:46 升级版本至V1.2.2.1
2021/7/21 11:53 升级版本至V1.2.3.1
2021/7/21 12:05 升级版本至V1.2.3.2
2021/7/21 12:19 升级版本至V1.2.3.4
2021/7/21 12:30 升级版本至V1.2.3.5
2021/7/21 13:18 升级版本至V1.2.3.6
2021/7/21 15:12 升级版本至V1.2.3.7
2021/7/21 15:15 升级版本至V1.2.3.8
2021/7/22 12:47 升级版本至V1.3.1(未完成)
  1. @echo off
  2. title 黑白棋V1.3.1(未完成)
  3. color f0
  4. echo;黑白棋V1.3.1(未完成) Made By 路过 ^& cmd1152
  5. echo;
  6. echo;                      游戏规则
  7. echo;============================================================
  8. echo;  1.  棋局开始时黑棋位于e4和d5,白棋位于d4和e5。
  9. echo;  2.  黑方先行,双方交替下棋。
  10. echo;  3.  一步合法的棋步包括:在一个空格新落下一个棋子,并且翻转
  11. echo;    对手一个或多个棋子。
  12. echo;  4.  新落下的棋子与棋盘上已有的同色棋子间,对方被夹住的所有
  13. echo;    棋子都要翻转过来。可以是横着夹,竖着夹,或是斜着夹。夹住
  14. echo;    的位置上必须全部是对手的棋子,不能有空格。
  15. echo;  5.  除非至少翻转了对手的一个棋子,否则就不能落子。如果一方
  16. echo;    没有合法棋,也就是说不管他下到哪里,都不能至少翻转对手的
  17. echo;    一个棋子,那他这一轮只能跳过,而由他的对手继续落子直到他
  18. echo;    有合法棋可下。
  19. echo;  6.  如果一方至少有一步合法棋可下,他就必须落子,不得跳过。
  20. echo;  7.  棋局持续下去,直到棋盘填满或者双方都无合法棋可下。
  21. echo;============================================================
  22. pause
  23. mode con cols=44 lines=22
  24. %程序初始化%
  25. set .=%path%
  26. for /f "delims== eol=." %%z in ('set ') do (set "%%z=")
  27. set path=%.%
  28. if not exist hbqtmp\fp\ (md hbqtmp\fp)
  29. set mqp=;=0abcdefgh;1=1;2=2;3=3;4=4;5=5;6=6;7=7;8=8;.0=白;.1=黑;_0=○;_1=●;_2= ;_5=※
  30. set/a m49=7,m59=7,m19=5,m29=5,m79=4,m89=3,m99=6%mqp:;=&set .%
  31. setlocal enabledelayedexpansion
  32. :Init %游戏初始化%
  33. for /l %%x in (1,1,8) do (for /l %%y in (1,1,8) do (set m%%x%%y=2))
  34. set /a m44=0,m55=0,m54=1,m45=1,mh=2,mb=2,ms=1,ht=0,sp=0,fp=0
  35. set "mqp= "&(for /f %%z in ('set m') do (echo;%%z))>hbqtmp\m0.txt
  36. call :Read q
  37. pause
  38. :Map %显示地图%
  39. cls
  40. echo;┏ABCDEFGH┓
  41. for /l %%y in (1,1,8) do (
  42. set "sc="
  43. for /l %%x in (1,1,8) do (
  44. for /f %%c in ("!m%%x%%y!") do (set sc=!sc!!._%%c!)
  45. )
  46. echo;!.%%y!!sc!┃
  47. )
  48. echo;┗重玩━读谱━←→跳
  49. echo;黑%mh% 白%mb%
  50. echo;
  51. set np=%1%mqp:~-4%
  52. if "!np!"=="0 0 " (goto :Judge)
  53. if !ht! neq 0 (echo;跳过无效,可下步已用%._5%标出
  54. for /l %%x in (1,1,8) do (for /l %%y in (1,1,8) do (set/a m%%x%%y=!m%%x%%y! %% 3)))
  55. echo;请!..%ms%!棋落子
  56. set ht=0
  57. if "%1"=="1" (goto :eof)
  58. :Mouse %获取鼠标%
  59. for /l %%a in (1,1,400) do (echo.>nul)
  60. cmos 0 -1 1
  61. set /a P=%errorlevel%
  62. set /a X=%P:~0,-3%
  63. set /a Y=%P%-1000*%X%
  64. set /a "nx=(X-1)/2,ny=y-1"
  65. if not defined m%nx%%ny% goto :Mouse
  66. if "!M%nx%%ny%!"=="7" (%读谱%
  67. call :Read
  68. set np=!errorlevel!
  69. if !np!==0 (goto :Map)
  70. goto :Fupan
  71. )
  72. if "!M%nx%%ny%!"=="6" (%跳过%
  73. set "mqp=!mqp!0 "
  74. set/a sp+=1
  75. (for /f %%z in ('set m') do (echo;%%z))>hbqtmp\m!sp!.txt
  76. goto :Check
  77. )
  78. if "!M%nx%%ny%!"=="5" (%重玩%
  79. call :Replay
  80. if !errorlevel!==1 (
  81. del /q /a /f hbqtmp\m* >nul
  82. goto :Init
  83. ) else (
  84. goto :Map
  85. )
  86. )
  87. if "!M%nx%%ny%!"=="4" (%后退%
  88. set/a tp=sp-1
  89. if exist hbqtmp\m!tp!.txt (
  90. set/a sp-=1
  91. for /f %%z in (hbqtmp\m!sp!.txt) do (set %%z)
  92. goto :Map
  93. )
  94. )
  95. if "!M%nx%%ny%!"=="3" (%前进%
  96. set/a tp=sp+1
  97. if exist hbqtmp\m!tp!.txt (
  98. set/a sp+=1
  99. for /f %%z in (hbqtmp\m!sp!.txt) do (set %%z)
  100. goto :Map
  101. )
  102. )
  103. if not "!M%nx%%ny%!"=="2" goto :Mouse
  104. call :Valid %nx% %ny% 1
  105. if %errorlevel% neq 0 (%落子成功%
  106. set "mqp=!mqp!%nx%%ny% "
  107. if %ms%==1 (set/a mh+=1) else (set/a mb+=1)
  108. set/a m%nx%%ny%=ms,sp+=1
  109. set/a "ms=(ms+1) %% 2"
  110. (for /f %%z in ('set m') do (echo;%%z))>hbqtmp\m!sp!.txt
  111. )
  112. set/a x=mh+mb,y=mh*mb
  113. if %x%==64 (goto :Judge)
  114. if %y%==0 (goto :Judge)
  115. goto :Map
  116. :Judge %判断胜负%
  117. set xqp=%mqp:0=跳%
  118. for /l %%a in (1,1,8) do (for /f %%z in ("!.:~%%a,1!") do (set xqp=!xqp: %%a= %%z!))
  119. call :Map 1
  120. set np=%mqp:~-4%
  121. if "!np!"=="0 0 " (echo;无棋可走)
  122. echo;棋谱:%xqp%
  123. echo;
  124. if %mh% gtr %mb% (echo;黑棋赢!!)
  125. if %mh% lss %mb% (echo;白棋赢!!)
  126. if %mh%==%mb% (echo;和棋!!!)
  127. call :Save
  128. del /q /a /f hbqtmp\m* >nul
  129. pause
  130. goto :Init
  131. :Check %判断一方是否无合法步%
  132. for /l %%x in (1,1,8) do (
  133. for /l %%y in (1,1,8) do (
  134. if !m%%x%%y!==2 (
  135. call :Valid %%x %%y 2
  136. if !errorlevel! neq 0 (set/a m%%x%%y=5,ht+=1)
  137. )
  138. )
  139. )
  140. if !ht!==0 (set/a "ms=(ms+1) %% 2")
  141. goto :Map
  142. :Valid %判断落子是否有效%
  143. setlocal
  144. set/a et=0,x=%1,y=%2,as=1-ms
  145. for %%x in (+1 +0 -1) do (for %%y in (+1 +0 -1) do (call :Get %%x %%y))
  146. if %3==2 (endlocal&exit /b %et%)
  147. if %ms%==1 (set "ml=mh+=%et%,mb-=%et%") else (set "ml=mb+=%et%,mh-=%et%")
  148. for /l %%z in (1,1,%et%) do (set "ml=!ml!,m!w%%z!=ms")
  149. (endlocal&set/a %ml%&exit /b %et%)
  150. :Get %获取吃子信息%
  151. set/a xx=x,yy=y,st=et
  152. set rx=%1
  153. set ry=%2
  154. for /l %%w in (1,1,8) do (
  155. set/a xx=xx%rx%,yy=yy%ry%
  156. for /f %%z in ("!xx!!yy!") do (set va=!m%%z!
  157. if "!va!"=="%as%" (
  158. set/a et+=1
  159. set w!et!=%%z
  160. ) else (
  161. if "!va!" neq "%ms%" (set/a et=st)
  162. goto :eof
  163. )
  164. )
  165. )
  166. goto :eof
  167. :Replay %重玩%
  168. cls
  169. echo;重玩将删除所有记录,并且不能前进和后退。
  170. echo;输入Y回车表示重玩,其他输入皆返回
  171. set /p np=
  172. if /i "!np!"=="Y" (exit /b 1)
  173. exit /b 0
  174. :Read %读谱%
  175. if "%1"=="q" (
  176. if exist hbqtmp\m1.txt (for /l %%w in (2,1,64) do (set/a np=%%w-1
  177. if not exist hbqtmp\m%%w.txt (for /f %%z in (hbqtmp\m!np!.txt) do (set %%z)
  178. set sp=!np!
  179. goto :eof)))
  180. )
  181. cls
  182. echo;请输入棋谱名[不需要加后缀,如1]
  183. echo;输入0并回车将返回游戏
  184. set np=
  185. set /p np=
  186. if !np!==0 (exit /b 0)
  187. if not exist hbqtmp\!np!.hbqqp (
  188. echo;文件不存在!
  189. pause
  190. ) else (
  191. exit /b !np!
  192. )
  193. goto :Read
  194. :Save %保存棋谱%
  195. for /l %%z in (1,1,9999) do (if not exist hbqtmp\%%z.hbqqp (echo;mqp=%mqp%>hbqtmp\%%z.hbqqp
  196. goto :eof))
  197. goto :eof
  198. :Fupan %复盘%
  199. set/a fp=1
  200. %复盘功能尚未实现%
  201. exit
复制代码
第三方:Cmos
作者: Rasm    时间: 2021-7-19 13:44

无法打开                         乱码
作者: cmd1152    时间: 2021-7-19 13:46

本帖最后由 cmd1152 于 2021-7-19 14:00 编辑

回复 2# Rasm


    另存为ANSI文件再打开试试
作者: zdeity    时间: 2021-7-19 15:50

没有第三方,能不能发一下里面用到的所有第三方
作者: cmd1152    时间: 2021-7-19 15:58

回复 4# zdeity


    基础程序你没有?
作者: cmd1152    时间: 2021-7-19 16:01

回复 4# zdeity


    一看就知道要cmos,去批处理第三方下载
作者: zdeity    时间: 2021-7-19 16:12

还有就是开头如果是color f0的话似乎看得更顺畅一点
作者: cmd1152    时间: 2021-7-19 17:01

本帖最后由 cmd1152 于 2021-7-20 13:37 编辑

回复 7# zdeity

对后面显示不友好
作者: cmd1152    时间: 2021-7-20 13:28

回复 7# zdeity


    已修复
作者: 路过    时间: 2021-7-21 12:30

连我都看不下去了
作者: cmd1152    时间: 2021-7-21 12:31

本帖最后由 cmd1152 于 2021-7-21 12:33 编辑

回复 10# 路过


    的确可以不用标签,但我就是喜欢用
作者: qixiaobin0715    时间: 2021-7-21 12:39

毕竟这不是bat的主菜。
作者: cmd1152    时间: 2021-7-21 15:01

回复 12# qixiaobin0715


    的确不是bat的主菜。
作者: cmd1152    时间: 2021-7-23 00:32

bat主菜是实用




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