返回列表 发帖

[游戏娱乐] 批处理四子棋(2008-05-08更新)

注意:只能从最下方开始下子。
四子连成一条直线就算胜利。
最新更新日期:2008-5-8
@echo off
set cbt=0
if /i "%1"=="/s" set cbt=1
if /i "%1"=="/b" set cbt=0
if "%cbt%"=="0" (mode con cols=31 lines=16) else mode con cols=19 lines=11
if /i "%1"=="/?" goto help
setlocal ENABLEDELAYEDEXPANSION
title 四子棋  by yslyxqysl&color 60
set "bc=●"&set "wc=○"
set n!bc!=!wc!&set n!wc!=!bc!
goto start%cbt%
:start0
set "pc=!bc!"
for /l %%i in (1 1 6) do for /l %%j in (1 1 7) do set "c%%i%%j= "&set "c%%i%%j= "
:loop0
cls&echo ┌─┬─┬─┬─┬─┬─┬─┐
for /l %%i in (1 1 6) do (
  for /l %%j in (1 1 7) do set /p"=│!c%%i%%j!"<nul
  echo │&if not %%i==6 echo ├─┼─┼─┼─┼─┼─┼─┤
)
echo └─┴─┴─┴─┴─┴─┴─┘
echo,  1   2   3   4   5   6   7
goto input
:start1
set "pc=!bc!"
set "c11=┌"&set "c17=┐"&set "c61=└"&set "c67=┘"
for /l %%j in (2 1 6) do set "c1%%j=┬"&set "c6%%j=┴"
for /l %%z in (2 1 5) do (
  set "c%%z1=├"&set "c%%z7=┤"
  for /l %%j in (2 1 6) do set "c%%z%%j=┼"
)
:loop1
cls&echo ┏━━━━━━━┓
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
echo1 2 3 4 5 6 7 ┃&echo ┗━━━━━━━┛
goto input
:input
if not "!isend!"=="" goto !isend!
set input=&set /p input=请!pc!方输入:
if /i "!input!"=="e" exit
if /i "!input:~0,1!"=="r" (
  if /i "!input:~1,1!"=="b" set cbt=0&set input=r&mode con cols=32 lines=15
  if /i "!input:~1,1!"=="s" set cbt=1&set input=r&mode con cols=19 lines=11
  if "!input!"=="r" goto start!cbt!
)
if /i "!input!"=="h" goto help
if /i "!input!"=="?" goto help
echo !input!|findstr "^[1-7]$">nul||goto loop!cbt!
if "!c1%input%!"=="!bc!" goto loop!cbt!
if "!c1%input%!"=="!wc!" goto loop!cbt!
for /l %%z in (1 1 6) do (
  if not "!c%%z%input%!"=="!bc!" if not "!c%%z%input%!"=="!wc!" set cp=c%%z!input!
)
set !cp!=!pc!&call :isdraw&call :iswin
set "pc=!n%pc%!"
goto loop!cbt!
:isdraw
set isend=draw
for /l %%j in (1 1 7) do if not "!c1%%j!"=="!bc!" if not "!c1%%j!"=="!wc!" set isend=
goto :eof
:iswin
for /l %%j in (-1 1 1) do (
  for /l %%k in (-1 1 1) do (
    set lptm=0&set tp=0
    if %%j==0 if %%k==0 set tp=1
    if tp neq 1 call :getcdt %%j %%k&set d%%j%%k=!tp!
) )
for %%l in ("-1 0" "-1 -1" "0 -1" "-1 1") do (
  for /f "tokens=1,2 delims= " %%m in ("%%~l") do (
    set /a adm=0-%%m,adn=0-%%n
    call set /a "urc=!d%%m%%n!+%%d!adm!!adn!%%+1"
    if !urc! geq 4 set isend=win
) )
goto :eof
:getcdt
set /a lptm+=1
set /a cdta=%cp:~1,1%+%1*%lptm%,cdtb=%cp:~2,1%+%2*%lptm%
if !cdta! lss 1 goto :eof
if !cdta! gtr 6 goto :eof
if !cdtb! lss 1 goto :eof
if !cdta! gtr 7 goto :eof
if !c%cdta%%cdtb%!==!pc! set /a tp+=1
if !lptm! equ 3 (goto :eof) else goto getcdt
:win
set isend=&echo !n%pc%!方胜!
pause>nul&goto start!cbt!
:draw
set isend=&echo 和棋!
pause>nul&goto start!cbt!
:help
cls&echo      Page 1/2
echo 输入列的代码,棋子
echo 就会放在此列最下面
echo 的空白处。有任何一
echo 方的四个子或以上连
echo 成一条直线就获胜。
echo 棋盘满了就和局。
pause>nul&cls
echo      Page 2/2
echo 支持两种棋盘模式,
echo 输入rb或rs即可选择
echo 棋盘模式。
echo.
echo E         退出
echo R[B ^| S]  重新开始
echo H ^| ?     帮助
pause>nul
if "!cbt!"=="0" (mode con cols=32 lines=15) else mode con cols=19 lines=11
goto start!cbt!COPY
1

评分人数

返回列表