| @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 ┃ |
| echo ┃1 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 |