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

[游戏娱乐] 批处理五子棋2008-04-06更新

纯 bat 五子棋
特点:
   新增功能:判定胜负后,可以显示胜出的棋子位置。
   不产生临时文件,能自动判定胜负
   作了一定的走子错误判断,如目标位置已经有子,或目标位置不存在等。。
   初步测试没发现错误,欢迎测试。。。
   可以选择由电脑随机走棋,以判断程序是否正确
:
  1. @echo off&mode con cols=80 lines=22&color 1f&title 批处理五子棋
  2. :: code 随风 @bbs.bathome.net  2008-04-06
  3. echo\&echo  请选择 y 电脑自动走棋(随机乱走,以判断程序是否正确)
  4. echo\&echo  选择 n 人走棋,不能人机对弈
  5. echo\&set /p cs= y n ?
  6. if /i not "%cs%"=="y" (set "cs=") ELSE (set cs=现在是由电脑随机走棋)
  7. set gz1=      走棋方法
  8. set gz3= 输入行和列的代号即可
  9. set gz5= 英文字母代表列,数字代表行
  10. set gz7= 如输入: h8 或 8h
  11. set gz9= 即是在 h列 和 行8 的交叉点落子
  12. set gz11= 如屏幕变成红色,则说明走棋错误
  13. :start
  14. setlocal enabledelayedexpansion&cls&color 1f
  15. set a1=┌&set o1=┐&set a12=└&set "o12=┘"&set "yans=0"
  16. for %%j in (2 3 4 5 6 7 8 9 10 11) do (set a%%j=├&set o%%j=┤)
  17. for %%z in (b c d e f g h i j k l m n) do (
  18.   set %%z1=┬&set "%%z12=┴"
  19.   for /l %%j in (2 1 11) do set "%%z%%j=┼"
  20. )
  21. for %%z in (a b c d e f g h i j k l m n o) do (
  22.   set /a max+=1&set %%z=!max!&set "!max!=%%z"
  23. )
  24. for /l %%a in (0 1 9) do set abc%%a=a
  25. goto :xs
  26. :loop
  27. if !yans! equ 0 (set ya=白棋&set bk=●) else (set ya=黑棋&set bk=○)
  28. if not defined cs (
  29.    set flag=&echo\&set /p zou=  请走!ya!
  30. ) else (
  31.         set zzzmm=ABCDEFGHIJKLMNO
  32.         set /a www=!random!%%12+1
  33.         set /a www1=!random!%%14+0
  34.         call set zzzmm1=%%zzzmm:~!www1!,1%%
  35.         set flag=&echo\&set zou=!zzzmm1!!www!
  36.         )
  37. if "!zou!"=="" set flag= 输入不能为空&set zou=&goto xs
  38. set "zou=!zou: =!"
  39. if "!zou:~1,1!"=="" set flag= !zou! 输入不正确!&set zou=&goto xs
  40. if not "!zou:~3,1!"=="" set flag= !zou! 输入不正确!&set zou=&goto xs
  41. set "abc=!zou:~0,1!"
  42. if defined abc!abc! set "zou=!zou:~-1!!zou:~0,-1!"
  43. set "abc=!zou:~0,1!"
  44. if defined abc!abc! (set flag= 输入不正确!&set zou=&goto xs)
  45. if /i "!zou!"=="ccc" endlocal&goto start
  46. if not defined !zou! set flag= !zou! 目标位置不存在!&set zou=&goto xs
  47. if defined !zou!x set flag= 不能走 !zou!&set zou=&goto xs
  48. set "!zou!x=!ya!"
  49. set "!zou!=!bk!"
  50. :xs 显示棋盘
  51. cls&echo 批处理五子棋
  52. echo\&echo      输入 ccc 重新开始游戏              %cs%
  53. if not defined flag set /a yans=^^!yans
  54. echo\&echo      A B C D E F G H I J K L M N O
  55. for /l %%i in (1 1 12) do (
  56.   set "ko= "
  57.   if %%i lss 10 (set ko= !ko!)
  58.   set/p=!ko!%%i <nul
  59.   for %%z in (a b c d e f g h i j k l m n o) do set/p=!%%z%%i!<nul
  60.   if defined gz%%i set /p=     !gz%%i!<nul
  61.   echo.
  62. )
  63. if defined flag (
  64.   echo\&echo  !flag!&color cf
  65.   ping/n 2 127.1>nul&color 1f
  66.   goto loop
  67. )
  68. if not defined zou goto loop
  69. ::判断胜负
  70. :pd
  71. set hang=!zou:~0,1!&set lie=!zou:~1!
  72. set /a _hangx=!lie!-4,_hangda=!lie!+4
  73. call set _lie=%%!hang!%%
  74. set /a lx=!_lie!-4,lda=!_lie!+4
  75. :: 判断列是否定出胜负
  76. for /l %%a in (!_hangx! 1 !_hangda!) do (
  77.   set zon=!zou:~0,1!%%ax
  78.   call set _zon=%%!zon!%%-!zon!
  79.   if defined _zon (set _pphen=!_pphen! !_zon!) else (
  80.      set _pphen=!_pphen! x
  81. ))
  82. call :sss "!_pphen!"
  83. if defined jiesu endlocal&goto ok
  84. :: 判断横向是否定出胜负
  85. set _pphen=&set _x_x=&set xie=!_hangx!
  86. set _you=&set _you1=
  87. for /l %%a in (!lx! 1 !lda!) do (
  88.   set "phx=!%%a!!zou:~1!x"
  89.   call set "pphen=%%!phx!%%-!%%a!!zou:~1!x"
  90.   if defined pphen (set _pphen=!_pphen! !pphen!) else (
  91.      set "_pphen=!_pphen! x"
  92.    )
  93.    rem 判断左上至右下是否胜出
  94.    call set "_xie=%%!%%a!!xie!x%%"
  95.    call set "_xie_=%%_xie%%-!%%a!!xie!x"
  96.    set /a xie+=1
  97.    if defined _xie_ (set _x_x=!_x_x! !_xie_!) else (
  98.      set "_x_x=!_x_x! x"
  99.    )
  100.    rem  判断右上至左下是否胜出
  101.    call set "you=%%!%%a!!_hangda!x%%"
  102.    call set "_you=%%you%%-!%%a!!_hangda!x"
  103.    set /a _hangda-=1
  104.    if defined _you (set _you1=!_you1! !_you!) else (
  105.      set "_you1=!_you1! x"
  106.    )
  107. )
  108. call :sss "!_pphen!"
  109. if defined jiesu endlocal&goto ok
  110. call :sss "!_you1!"
  111. if defined jiesu endlocal&goto ok
  112. call :sss "!_x_x!"
  113. if defined jiesu endlocal&goto ok
  114. goto loop
  115. :sss
  116. set _pphen=%~1&set pdpd=0&set num1=&set "num2="&set "jiesu="
  117. for %%a in (!_pphen!) do (
  118.   set "num1=!num2!"
  119.   set "num2=%%a"
  120.   if /i "!num1:~0,3!"=="!num2:~0,3!" (
  121.      if not "!num1:~0,1!"=="-" (
  122.        set /a pdpd+=1&set "senc=!senc! !num2:~0,-1!"
  123.           if !pdpd! geq 4 (
  124.            call set "jiesu=%%senc:!num2:~0,3!=%%"
  125.         echo\&echo  !num1:~0,2! 胜出  !jiesu!
  126.         goto :eof
  127.           )
  128.       ) else (set pdpd=0&set senc=!num2:~0,-1!)
  129.    )  else (set pdpd=0&set senc=!num2:~0,-1!)
  130. )
  131. goto :eof
  132. :ok
  133. echo\&echo  按任意键重新开始。。。
  134. for /l %%i in (1 1 5) do (
  135.   for %%a in (a d) do color %%af&ping/n 1 127.1>nul
  136. )
  137. pause>nul
  138. goto start
复制代码
3

评分人数

技术问题请到论坛发帖求助!

小楼果然牛B!
不过,斜向好像不能判断胜负

TOP

输入ccc好像也不能重新开始。

TOP

多谢提醒:
输入ccc 不能重新开始。 是因为后来又加了个出错判断,应该放在ccc下面才对,以改正

斜向 不能判断胜负 应该是在行为10以上时出现的吧?以改正。
技术问题请到论坛发帖求助!

TOP

厉害!又见强贴.

TOP

居然忘了判断反斜向的胜负。已经更新。
新增显示胜出棋子位置功能。
欢迎继续测试。。。。
技术问题请到论坛发帖求助!

TOP

这样的帖子得顶!!!

TOP

什么叫做厉害 今天我算是领教了
我看了代码差点没吐血

TOP

原帖由 gfwlxx 于 2008-4-16 00:51 发表
什么叫做厉害 今天我算是领教了
我看了代码差点没吐血

同感
哈哈
路 是自己选的

TOP

太强悍了吧!!!
学习中……

TOP

不懂,惭愧啊!我是新人
呵呵

TOP

厉害!!!!!!!!!

TOP

什么叫做厉害 今天我算是领教了
太强悍了吧!!!
学习中……

TOP

楼主真厉害~不知道可以做个朋友不?
我QQ331475019

TOP

真的不错

这么些代码,要多久才能写出来啊?

TOP

返回列表