| @echo off |
| if "%1"=="/?" call :help |
| mode con lines=16 cols=40 |
| title 21点 by yslyxqysl&color 0e |
| setlocal ENABLEDELAYEDEXPANSION |
| set "f="&set "poker= "&set /a pw=0,cw=0 |
| set "b=(set begin=o&goto :eof)" |
| set "c=call :give p&(if ^!begin^!a==oa set begin=&goto shuffle)" |
| :shuffle |
| cls&echo 洗牌中... |
| :shuffle |
| set /a tp=%random%%%52+4 |
| if "!poker: %tp% = !"=="%poker%" set "poker=%poker%%tp% "&set /a num+=1 |
| if "%num%"=="52" (set num=0) else goto shuffle |
| :reset |
| for %%i in (p c) do set /a %%in=0,%%in=0,%%ia=0,%%ib=0 |
| (%c%)&(%c:p=c%)&(%c%)&(%c:p=c%) |
| if %pa% equ 21 goto show |
| if %ca% equ 21 goto show |
| :player |
| cls&echo 电脑:%cw%盘 |
| echo ┏━┓┏┳┓ |
| set /p =┃!c1f!<nul&(if "!c1f:~1,1!"=="" set /p = <nul)&echo ┃┣╋┫ |
| set /p =┃!c1n!<nul&(if "!c1n:~1,1!"=="" set /p = <nul)&echo ┃┣╋┫ |
| echo ┗━┛┗┻┛ |
| echo 和:*&for /l %%i in (1 1 20) do set /p =─<nul |
| echo 玩家:%pw%盘 |
| for /l %%a in (1 1 %pn%) do set /p =┏━┓<nul |
| echo.&for /l %%b in (1 1 %pn%) do set /p =┃!p%%bf! ┃<nul |
| echo.&for /l %%c in (1 1 %pn%) do ^ |
| set /p =┃!p%%cn!<nul&(if "!p%%cn:~1,1!"=="" set /p = <nul)&set /p =┃<nul |
| echo.&for /l %%d in (1 1 %pn%) do set /p =┗━┛<nul |
| echo.&echo 和:%pa%&echo.&set do=&set /p "do=要吗?:" |
| if "!do!"=="" %c% |
| if /i "!do!"=="c" set /a pw=0,cw=0&goto player |
| if /i "!do!"=="r" set "poker= "&goto shuffle |
| if /i "!do!"=="e" exit |
| if /i "!do!"=="h" call :help&goto player |
| if "!do!"==" " goto cpu |
| if %pa% gtr 21 (goto show) else if %pa% neq 21 goto player |
| :cpu |
| if %ca% lss %pa% %c:p=c%&if !ca! geq 21 (goto show) else goto cpu |
| :show |
| if %pa% gtr %ca% set winner=p |
| if %pa% lss %ca% set winner=c |
| if %pa% gtr 21 set winner=c |
| if %ca% gtr 21 set winner=p |
| if "%winner%"=="p" (set /a pw+=1) else set /a cw+=1 |
| cls&echo 电脑:%cw%盘 |
| for /l %%a in (1 1 %cn%) do set /p =┏━┓<nul |
| echo.&for /l %%b in (1 1 %cn%) do ^ |
| set /p =┃!c%%bf!<nul&if "!c%%bf:~1,1!"=="" (set /p = ┃<nul) else set /p =┃<nul |
| echo.&for /l %%c in (1 1 %cn%) do ^ |
| set /p =┃!c%%cn!<nul&if "!c%%cn:~1,1!"=="" (set /p = ┃<nul) else set /p =┃<nul |
| echo.&for /l %%d in (1 1 %cn%) do set /p =┗━┛<nul |
| echo.&echo 和:%ca%&(for /l %%i in (1 1 20) do set /p =─<nul)&echo 玩家:%pw%盘 |
| for /l %%a in (1 1 %pn%) do set /p =┏━┓<nul |
| echo.&for /l %%b in (1 1 %pn%) do ^ |
| set /p =┃!p%%bf!<nul&if "!p%%bf:~1,1!"=="" (set /p = ┃<nul) else set /p =┃<nul |
| echo.&for /l %%c in (1 1 %pn%) do ^ |
| set /p =┃!p%%cn!<nul&if "!p%%cn:~1,1!"=="" (set /p = ┃<nul) else set /p =┃<nul |
| echo.&(for /l %%d in (1 1 %pn%) do set /p =┗━┛<nul)&echo.&echo 和:%pa%&echo. |
| if "%winner%"=="p" (set /p =玩家胜^^!<nul) else ^ |
| if "%winner%"=="c" (set /p =电脑胜^^!<nul) else set /p =平^^!<nul |
| set winner=&ping /n 4 127.^1>nul&cls&goto reset |
| :give |
| set /a %1n+=1 |
| if "%poker:~2,1%"==" " (set "tp=%poker:~1,1%"&set "poker=%poker:~2%") else ^ |
| set tp=%poker:~1,2%&set "poker=%poker:~3%" |
| set /a %1!%1n!n=%tp%/4 |
| set /a tp=%tp%%%4 |
| set %1!%1n!f=!f:~%tp%,1! |
| call set tp=%%%1!%1n!n%% |
| if %tp%==1 (set /a %1a+=11&set %1!%1n!n=A&set %1b=1) else ( |
| if %tp%==11 (set /a %1a+=10&set %1!%1n!n=J) else ( |
| if %tp%==12 (set /a %1a+=10&set %1!%1n!n=Q) else ( |
| if %tp%==13 (set /a %1a+=10&set %1!%1n!n=K) else ( |
| set /a %1a+=!tp! |
| )))) |
| if !%1a! gtr 21 if !%1b!==1 set /a %1a-=10,%1b=0 |
| if "!poker!"==" " if %1==p %b% else if %cn%==1 %b% else ^ |
| if %pa% lss 21 if %ca% lss 21 if %ca% lss %pa% %b% |
| goto :eof |
| :help |
| cls |
| echo Page 1/2 |
| echo 游戏规则: |
| echo ^ |
| 游戏开始,玩家和庄家每人得到两张牌,如果^ |
| 其中一人拿到A和一张代表10点的牌将获胜,^ |
| 两人都拿到则平局;如果不是,选择要牌与否^ |
| 使牌的点数和接近21又不超过21。当点数和大^ |
| 与或等于21时自动停止要牌。双方要完牌后,^ |
| 谁的点数和最接近21又不超过21就胜出。当双^ |
| 方点数和一样时,庄家获胜。 |
| echo 请注意,庄家看得到玩家要牌的全过程。 |
| echo. |
| echo 牌的点数: |
| echo 2-10 2-10 |
| echo A 1或11(自动判断) |
| echo J Q K 10 |
| pause>nul&cls |
| echo Page 2/2 |
| echo 操作方法: |
| echo 回车 要牌 |
| echo 空格+回车 不要牌 |
| echo C 成绩清零 |
| echo R 洗牌 |
| echo E 退出 |
| echo H 帮助 |
| echo. |
| echo 声明:电脑绝对不会作弊。 |
| pause>nul&goto :eofCOPY |