Board logo

标题: [游戏娱乐] 批处理四子棋(2008-05-08更新) [打印本页]

作者: yslyxqysl    时间: 2009-3-21 11:15     标题: 批处理四子棋(2008-05-08更新)

注意:只能从最下方开始下子。
四子连成一条直线就算胜利。
最新更新日期:2008-5-8
  1. @echo off
  2. set cbt=0
  3. if /i "%1"=="/s" set cbt=1
  4. if /i "%1"=="/b" set cbt=0
  5. if "%cbt%"=="0" (mode con cols=31 lines=16) else mode con cols=19 lines=11
  6. if /i "%1"=="/?" goto help
  7. setlocal ENABLEDELAYEDEXPANSION
  8. title 四子棋  by yslyxqysl&color 60
  9. set "bc=●"&set "wc=○"
  10. set n!bc!=!wc!&set n!wc!=!bc!
  11. goto start%cbt%
  12. :start0
  13. set "pc=!bc!"
  14. for /l %%i in (1 1 6) do for /l %%j in (1 1 7) do set "c%%i%%j= "&set "c%%i%%j= "
  15. :loop0
  16. cls&echo ┌─┬─┬─┬─┬─┬─┬─┐
  17. for /l %%i in (1 1 6) do (
  18.   for /l %%j in (1 1 7) do set /p"=│!c%%i%%j!"<nul
  19.   echo │&if not %%i==6 echo ├─┼─┼─┼─┼─┼─┼─┤
  20. )
  21. echo └─┴─┴─┴─┴─┴─┴─┘
  22. echo,  1   2   3   4   5   6   7
  23. goto input
  24. :start1
  25. set "pc=!bc!"
  26. set "c11=┌"&set "c17=┐"&set "c61=└"&set "c67=┘"
  27. for /l %%j in (2 1 6) do set "c1%%j=┬"&set "c6%%j=┴"
  28. for /l %%z in (2 1 5) do (
  29.   set "c%%z1=├"&set "c%%z7=┤"
  30.   for /l %%j in (2 1 6) do set "c%%z%%j=┼"
  31. )
  32. :loop1
  33. cls&echo ┏━━━━━━━┓
  34. for /l %%z in (1 1 6) do set /p=┃<nul&(for /l %%i in (1 1 7) do set /p=!c%%z%%i!<nul)&echo ┃
  35. echo ┃1 2 3 4 5 6 7 ┃&echo ┗━━━━━━━┛
  36. goto input
  37. :input
  38. if not "!isend!"=="" goto !isend!
  39. set input=&set /p input=请!pc!方输入:
  40. if /i "!input!"=="e" exit
  41. if /i "!input:~0,1!"=="r" (
  42.   if /i "!input:~1,1!"=="b" set cbt=0&set input=r&mode con cols=32 lines=15
  43.   if /i "!input:~1,1!"=="s" set cbt=1&set input=r&mode con cols=19 lines=11
  44.   if "!input!"=="r" goto start!cbt!
  45. )
  46. if /i "!input!"=="h" goto help
  47. if /i "!input!"=="?" goto help
  48. echo !input!|findstr "^[1-7]$">nul||goto loop!cbt!
  49. if "!c1%input%!"=="!bc!" goto loop!cbt!
  50. if "!c1%input%!"=="!wc!" goto loop!cbt!
  51. for /l %%z in (1 1 6) do (
  52.   if not "!c%%z%input%!"=="!bc!" if not "!c%%z%input%!"=="!wc!" set cp=c%%z!input!
  53. )
  54. set !cp!=!pc!&call :isdraw&call :iswin
  55. set "pc=!n%pc%!"
  56. goto loop!cbt!
  57. :isdraw
  58. set isend=draw
  59. for /l %%j in (1 1 7) do if not "!c1%%j!"=="!bc!" if not "!c1%%j!"=="!wc!" set isend=
  60. goto :eof
  61. :iswin
  62. for /l %%j in (-1 1 1) do (
  63.   for /l %%k in (-1 1 1) do (
  64.     set lptm=0&set tp=0
  65.     if %%j==0 if %%k==0 set tp=1
  66.     if tp neq 1 call :getcdt %%j %%k&set d%%j%%k=!tp!
  67. ) )
  68. for %%l in ("-1 0" "-1 -1" "0 -1" "-1 1") do (
  69.   for /f "tokens=1,2 delims= " %%m in ("%%~l") do (
  70.     set /a adm=0-%%m,adn=0-%%n
  71.     call set /a "urc=!d%%m%%n!+%%d!adm!!adn!%%+1"
  72.     if !urc! geq 4 set isend=win
  73. ) )
  74. goto :eof
  75. :getcdt
  76. set /a lptm+=1
  77. set /a cdta=%cp:~1,1%+%1*%lptm%,cdtb=%cp:~2,1%+%2*%lptm%
  78. if !cdta! lss 1 goto :eof
  79. if !cdta! gtr 6 goto :eof
  80. if !cdtb! lss 1 goto :eof
  81. if !cdta! gtr 7 goto :eof
  82. if !c%cdta%%cdtb%!==!pc! set /a tp+=1
  83. if !lptm! equ 3 (goto :eof) else goto getcdt
  84. :win
  85. set isend=&echo !n%pc%!方胜!
  86. pause>nul&goto start!cbt!
  87. :draw
  88. set isend=&echo 和棋!
  89. pause>nul&goto start!cbt!
  90. :help
  91. cls&echo      Page 1/2
  92. echo 输入列的代码,棋子
  93. echo 就会放在此列最下面
  94. echo 的空白处。有任何一
  95. echo 方的四个子或以上连
  96. echo 成一条直线就获胜。
  97. echo 棋盘满了就和局。
  98. pause>nul&cls
  99. echo      Page 2/2
  100. echo 支持两种棋盘模式,
  101. echo 输入rb或rs即可选择
  102. echo 棋盘模式。
  103. echo.
  104. echo E         退出
  105. echo R[B ^| S]  重新开始
  106. echo H ^| ?     帮助
  107. pause>nul
  108. if "!cbt!"=="0" (mode con cols=32 lines=15) else mode con cols=19 lines=11
  109. goto start!cbt!
复制代码

作者: wxcute    时间: 2009-3-21 13:51

这点应该说明一下:只能从最下方开始下子,因此下子时只能逐步往上。
作者: defanive    时间: 2009-3-21 14:12

四子棋,很老的游戏么,不明白有何要领。。。
作者: myzwd    时间: 2009-3-22 09:33     标题: 回复 1楼 的帖子

四子棋的规则我都忘记了。不知道该如何下。




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