[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[其他] 批处理象棋残局:双炮对孤王+

我写了个象棋残局,请大家帮忙看下怎么样。。。需要第三方cmos.exe,在压缩包里。。。
双炮对孤王,中间有个炮只能横向移动,增加难度。。。
  1. @echo off
  2. Setlocal Enabledelayedexpansion
  3. mode con:cols=36 lines=25
  4. color 71
  5. title Cyxgg's 象棋残局
  6. set p1=1
  7. set p2=1
  8. set rw=1
  9. set bw=1
  10. set rwh=2
  11. set rwl=16
  12. set bwh=20
  13. set bwl=20
  14. set p1h=18
  15. set p1l=24
  16. set p2h=16
  17. set p2l=8
  18. set nbw=将
  19. set nrw=帅
  20. set np1=炮
  21. set np2=炮
  22. set round=0
  23. if exist xqtmp (rd /s /q xqtmp)
  24. md xqtmp
  25. cd xqtmp
  26. call :start
  27. goto get1
  28. :start
  29. cls
  30. echo ╔═╦═╦═╦═╦═╦═╦═╦═╗
  31. echo ║  ┃  ┃  ┃╲┃╱┃  ┃  ┃  ║
  32. echo ╠━╋━╋━╋━╋━╋━╋━╋━╣
  33. echo ║  ┃  ┃  ┃╱┃╲┃  ┃  ┃  ║
  34. echo ╠━╋━╋━╋━╋━╋━╋━╋━╣
  35. echo ║  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ║
  36. echo ╠━╬━╋━╋━╋━╋━╋━╬━╣
  37. echo ║  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ║
  38. echo ╠━╋━╬━╋━╬━╋━╬━╋━╣
  39. echo ║  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ║
  40. echo ╠━┻━┻━┻━┻━┻━┻━┻━╣
  41. echo ║    楚  河          汉  界    ║
  42. echo ╠━┳━┳━┳━┳━┳━┳━┳━╣
  43. echo ║  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ║
  44. echo ╠━╋━╬━╋━╬━╋━╬━╋━╣
  45. echo ║  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ║
  46. echo ╠━╬━╋━╋━╋━╋━╋━╬━╣
  47. echo ║  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ║
  48. echo ╠━╋━╋━╋━╋━╋━╋━╋━╣
  49. echo ║  ┃  ┃  ┃╲┃╱┃  ┃  ┃  ║
  50. echo ╠━╋━╋━╋━╋━╋━╋━╋━╣
  51. echo ║  ┃  ┃  ┃╱┃╲┃  ┃  ┃  ║
  52. echo ╚═╩═╩═╩═╩═╩═╩═╩═╝
  53. cmos 0 0 0 %rwl% %rwh%
  54. call :color 帅 fc
  55. if not %rwl%==32 echo.━
  56. cmos 0 0 0 %bwl% %bwh%
  57. call :color 将 f0
  58. if not %bwl%==32 echo.━
  59. if %p1%==1 (
  60. cmos 0 0 0 %p1l% %p1h%
  61. call :color 炮 f0
  62. if not %p1l%==32 echo.━
  63. )
  64. if %p2%==1 (
  65. cmos 0 0 0 %p2l% %p2h%
  66. call :color 炮 f0
  67. if not %p2l%==32 echo.━
  68. )
  69. goto :eof
  70. :get1
  71. cmos 0 -1 1
  72. set /a dj1=%errorlevel%
  73. set /a dja=%dj1:~0,-3%
  74. set /a djb=%dj1%-1000*%dja%
  75. if %dja% gtr 34 goto get1
  76. if %djb% gtr 23 goto get1
  77. set /a dje=(%dja%-1)%%4
  78. if %dje% gtr 1 goto get1
  79. set /a dje=%djb%%%2
  80. if %dje%==0 goto get1
  81. set /a djd=%djb%-1
  82. set /a djc=(%dja%-1)/2*2
  83. for %%i in (bw,p1,p2) do (
  84. if !%%i!==1 if !%%ih!==%djd% if !%%il!==%djc% set do=%%i&&goto get2
  85. )
  86. goto get1
  87. :get2
  88. cmos 0 1 1
  89. set /a dj2=%errorlevel%
  90. if %dj2% lss 0 if %round%==0 (
  91. cmos 0 0 0 %djc% %djd%
  92. set /p=#  <nul
  93. if not !%do%l!==32 echo.━
  94. set round=1
  95. goto get2
  96. ) else (
  97. cmos 0 0 0 %djc% %djd%
  98. call :color !n%do%! f0
  99. if not !%do%l!==32 echo.━
  100. set round=0
  101. goto get2
  102. )
  103. set /a dja=%dj2:~0,-3%
  104. set /a djb=%dj2%-1000*%dja%
  105. if %dj2%==%dj1% goto get2
  106. if %dja% gtr 34 goto get2
  107. if %djb% gtr 23 goto get2
  108. set /a dje=(%dja%-1)%%4
  109. if %dje% gtr 1 goto get2
  110. set /a dje=%djb%%%2
  111. if %dje%==0 goto get2
  112. set /a djb-=1
  113. set /a dja=(%dja%-1)/2*2
  114. for %%i in (rw,bw,p1,p2) do if !%%i!==1 if !%%ih!==%djb% if !%%il!==%dja% (
  115. if %%i==rw goto get2
  116. set djc=%dja%&&set djd=%djb%&&set do=%%i
  117. cmos 0 0 0 %djc% %djd%
  118. call :color !n%do%! f0
  119. if not !%do%l!==32 echo.━
  120. goto get2
  121. )
  122. set back=0
  123. if !%do%l!==%dja% (call :doa) else (call :dob)
  124. if %back%==1 goto get2
  125. goto p%do%
  126. :doa
  127. for %%i in (bw,rw,p1,p2) do if %dja%==!%%il! (
  128. if !%do%h! lss !%%ih! if %djb% gtr !%%ih! set back=1
  129. if !%do%h! gtr !%%ih! if %djb% lss !%%ih! set back=1
  130. )
  131. goto :eof
  132. :dob
  133. for %%i in (bw,rw,p1,p2) do if %djb%==!%%ih! (
  134. if !%do%l! lss !%%il! if %dja% gtr !%%il! set back=1
  135. if !%do%l! gtr !%%il! if %dja% lss !%%il! set back=1
  136. )
  137. goto :eof
  138. :pbw
  139. if %dja% lss 11 goto get2
  140. if %dja% gtr 20 goto get2
  141. if %djb% lss 18 goto get2
  142. if %dja%==%bwl% (
  143. set /a dje=%djb%-%bwh%
  144. if "!dje:~-1,1!"=="4" goto get2
  145. set bwh=%djb%
  146. call :start
  147. goto cpu
  148. )
  149. if %djb%==%bwh% (
  150. call :pdbw %dja% %rwl% %p1l% %p2l% %djb% %rwh% %p1h% %p2h%
  151. if !back!==0 goto get2
  152. set /a dje=%dja%-%bwl%
  153. if "!dje:~-1,1!"=="8" goto get2
  154. set bwl=%dja%
  155. call :start
  156. goto cpu
  157. )
  158. goto get2
  159. :pp1
  160. if %dja%==%p1l% (
  161. call :msg 为了增加难度,此棋只能横向移动。 64 象棋残局
  162. goto get2
  163. )
  164. if %djb%==%p1h% (
  165. call :pdbw %bwl% %rwl% %dja% %p2l% %bwh% %rwh% %djb% %p2h%
  166. if !back!==0 goto get2
  167. set p1l=%dja%
  168. call :start
  169. goto cpu
  170. )
  171. goto :get2
  172. :pp2
  173. if %dja%==%p2l% (
  174. set p2h=%djb%
  175. call :start
  176. goto cpu
  177. )
  178. if %djb%==%p2h% (
  179. call :pdbw %bwl% %rwl% %p1l% %dja% %bwh% %rwh% %p1h% %djb%
  180. if !back!==0 goto get2
  181. set p2l=%dja%
  182. call :start
  183. goto cpu
  184. )
  185. goto :get2
  186. :cpu
  187. if %p2l%==%rwl% (
  188. set /a dje=%p2h%-%rwh%
  189. if !dje! gtr 2 goto cpu2
  190. if not !dje:~-1!==2 goto cpu2
  191. set /a djf=%rwh%+!dje!
  192. call :pdbw %bwl% %rwl% %p1l% %p2l% %bwh% !djf! %p1h% %p2h%
  193. if !back!==0 goto cpu2
  194. if !djf! gtr 4 goto cpu2
  195. set go=rwh
  196. set go2=!dje!
  197. set p2=0
  198. set p2h=-1
  199. set p2l=-1
  200. goto cpuok
  201. )
  202. if %p2h%==%rwh% (
  203. set /a dje=%p2l%-%rwl%
  204. if !dje! gtr 4 goto cpu2
  205. if not !dje:~-1!==4 goto cpu2
  206. set /a djf=%rwl%+!dje!
  207. call :pdbw %bwl% !djf! %p1l% %p2l% %bwh% %rwh% %p1h% %p2h%
  208. if !back!==0 goto cpu2
  209. if !djf! gtr 20 goto cpu2
  210. if !djf! lss 12 goto cpu2
  211. set go=rwl
  212. set go2=!dje!
  213. set p2=0
  214. set p2h=-1
  215. set p2l=-1
  216. goto cpuok
  217. )
  218. :cpu2
  219. call :c%rwl%
  220. goto cpuok
  221. :cpuok
  222. set /a %go%+=%go2%
  223. call :start
  224. goto get1
  225. :c12
  226. call :pdbw %bwl% 16 %p1l% %p2l% %bwh% %rwh% %p1h% %p2h%
  227. if %back%==1 (
  228. call :jiang %p2l% %p1l% 16 %bwl% %rwh% %p2h% %bwh%
  229. if !back!==1 goto c121
  230. set go=rwl
  231. set go2=4
  232. goto :eof
  233. )
  234. :c121
  235. if %p1l%==12 if %p2l%==12 goto win
  236. if %rwh%==4 (
  237. set go=rwh
  238. set go2=-2
  239. goto :eof
  240. ) else (
  241. set go=rwh
  242. set go2=2
  243. goto :eof
  244. )
  245. :c16
  246. set dje=
  247. call :jiang %p2l% %p1l% 16 %bwl% %rwh% %p2h% %bwh%
  248. if %back%==1 (
  249. call :pdbw %bwl% 20 %p1l% %p2l% %bwh% %rwh% %p1h% %p2h%
  250. if !back!==0 set dje=-
  251. set go=rwl
  252. set go2=!dje!4
  253. goto :eof
  254. )
  255. if %rwh%==4 (
  256. set go=rwh
  257. set go2=-2
  258. goto :eof
  259. )
  260. if %rwh%==2 if %p2h%l%p2l%==4l16 (
  261. set go=rwh
  262. set go2=-2
  263. goto :eof
  264. ) else (
  265. set go=rwh
  266. set go2=2
  267. goto :eof
  268. )
  269. if %rwh%==0 if %p2h%l%p2l%==2l16 (
  270. call :pdbw %bwl% 20 %p1l% %p2l% %bwh% %rwh% %p1h% %p2h%
  271. if !back!==1 set dje=-
  272. set go=rwl
  273. set go2=-4
  274. goto :eof
  275. ) else (
  276. set go=rwh
  277. set go2=2
  278. goto :eof
  279. )
  280. :c20
  281. call :pdbw %bwl% 16 %p1l% %p2l% %bwh% %rwh% %p1h% %p2h%
  282. if %back%==1 (
  283. call :jiang %p2l% %p1l% 16 %bwl% %rwh% %p2h% %bwh%
  284. if !back!==1 goto c201
  285. set go=rwl
  286. set go2=-4
  287. goto :eof
  288. )
  289. :c201
  290. if %p1l%==20 if %p2l%==20 goto win
  291. if %rwh%==4 (
  292. set go=rwh
  293. set go2=-2
  294. goto :eof
  295. ) else (
  296. set go=rwh
  297. set go2=2
  298. goto :eof
  299. )
  300. :win
  301. call :msg 你赢了! 64 象棋残局
  302. exit
  303. :pdbw
  304. set back=1
  305. if not %1==%2 goto :eof
  306. if %3==%1 if %7 gtr %6 if %7 lss %5 goto :eof
  307. if %4==%1 if %8 gtr %6 if %8 lss %5 goto :eof
  308. set back=0
  309. goto :eof
  310. :jiang
  311. set back=0
  312. if not %1==%2 goto :eof
  313. if not %1==%3 goto :eof
  314. if %1==%4 if %6 gtr %7 goto :eof
  315. if %6 lss %5 goto :eof
  316. set back=1
  317. goto :eof
  318. :color
  319. set color=%1
  320. set /p=  <nul>%color%
  321. findstr /a:%2 . "%color%*"
  322. goto :eof
  323. :msg
  324. echo Msgbox "%1",%2,"%3">1.vbs
  325. start /wait 1.vbs
  326. goto :eof
复制代码
http://pan.baidu.com/share/link?shareid=3889153573&uk=1124163200

谢谢大虾.我还没来得急看源码

TOP

谢谢,我正在写军棋堡垒,这次会注意的,先把%cd%加入%path%再说。

TOP

是的,cmos.exe必须放在path下,为了tmp文件,我就cd了。。。

TOP

你使用了 CD 改变了目录,这是原因
如无特别说明,代码测试环境均为 XP SP3

TOP

forfiles兄说的可以是可以,但为什么那样就不行呢

TOP

我就想知道为甚,Coms.exe在演示程序中ok,为啥在这就不行了

TOP

回复 3# ht河豚


把cmos.exe复制一份放到system32目录下面可以吗?

TOP

本帖最后由 ht河豚 于 2012-8-10 19:57 编辑

灵异了??
执行"象棋残局:双炮对孤王+.cmd"时
出现(如图1)
可用Cmos演示程序就不会(如图2)
图太大,上外链
问题解决,不给图了

TOP

不错,下来看看

TOP

返回列表