Board logo

标题: [游戏娱乐] 批处理游戏21点 [打印本页]

作者: yslyxqysl    时间: 2008-12-1 09:58     标题: 批处理游戏21点

  1. @echo off
  2. if "%1"=="/?" call :help
  3. mode con lines=16 cols=40
  4. title 21点  by yslyxqysl&color 0e
  5. setlocal ENABLEDELAYEDEXPANSION
  6. set "f="&set "poker= "&set /a pw=0,cw=0
  7. set "b=(set begin=o&goto :eof)"
  8. set "c=call :give p&(if ^!begin^!a==oa set begin=&goto shuffle)"
  9. :shuffle
  10. cls&echo 洗牌中...
  11. :shuffle
  12. set /a tp=%random%%%52+4
  13. if "!poker: %tp% = !"=="%poker%" set "poker=%poker%%tp% "&set /a num+=1
  14. if "%num%"=="52" (set num=0) else goto shuffle
  15. :reset
  16. for %%i in (p c) do set /a %%in=0,%%in=0,%%ia=0,%%ib=0
  17. (%c%)&(%c:p=c%)&(%c%)&(%c:p=c%)
  18. if %pa% equ 21 goto show
  19. if %ca% equ 21 goto show
  20. :player
  21. cls&echo 电脑:%cw%盘
  22. echo ┏━┓┏┳┓
  23. set /p =┃!c1f!<nul&(if "!c1f:~1,1!"=="" set /p = <nul)&echo ┃┣╋┫
  24. set /p =┃!c1n!<nul&(if "!c1n:~1,1!"=="" set /p = <nul)&echo ┃┣╋┫
  25. echo ┗━┛┗┻┛
  26. echo 和:*&for /l %%i in (1 1 20) do set /p =─<nul
  27. echo 玩家:%pw%盘
  28. for /l %%a in (1 1 %pn%) do set /p =┏━┓<nul
  29. echo.&for /l %%b in (1 1 %pn%) do set /p =┃!p%%bf! ┃<nul
  30. echo.&for /l %%c in (1 1 %pn%) do ^
  31. set /p =┃!p%%cn!<nul&(if "!p%%cn:~1,1!"=="" set /p = <nul)&set /p =┃<nul
  32. echo.&for /l %%d in (1 1 %pn%) do set /p =┗━┛<nul
  33. echo.&echo 和:%pa%&echo.&set do=&set /p "do=要吗?:"
  34. if "!do!"=="" %c%
  35. if /i "!do!"=="c" set /a pw=0,cw=0&goto player
  36. if /i "!do!"=="r" set "poker= "&goto shuffle
  37. if /i "!do!"=="e" exit
  38. if /i "!do!"=="h" call :help&goto player
  39. if "!do!"==" " goto cpu
  40. if %pa% gtr 21 (goto show) else if %pa% neq 21 goto player
  41. :cpu
  42. if %ca% lss %pa% %c:p=c%&if !ca! geq 21 (goto show) else goto cpu
  43. :show
  44. if %pa% gtr %ca% set winner=p
  45. if %pa% lss %ca% set winner=c
  46. if %pa% gtr 21 set winner=c
  47. if %ca% gtr 21 set winner=p
  48. if "%winner%"=="p" (set /a pw+=1) else set /a cw+=1
  49. cls&echo 电脑:%cw%盘
  50. for /l %%a in (1 1 %cn%) do set /p =┏━┓<nul
  51. echo.&for /l %%b in (1 1 %cn%) do ^
  52. set /p =┃!c%%bf!<nul&if "!c%%bf:~1,1!"=="" (set /p = ┃<nul) else set /p =┃<nul
  53. echo.&for /l %%c in (1 1 %cn%) do ^
  54. set /p =┃!c%%cn!<nul&if "!c%%cn:~1,1!"=="" (set /p = ┃<nul) else set /p =┃<nul
  55. echo.&for /l %%d in (1 1 %cn%) do set /p =┗━┛<nul
  56. echo.&echo 和:%ca%&(for /l %%i in (1 1 20) do set /p =─<nul)&echo 玩家:%pw%盘
  57. for /l %%a in (1 1 %pn%) do set /p =┏━┓<nul
  58. echo.&for /l %%b in (1 1 %pn%) do ^
  59. set /p =┃!p%%bf!<nul&if "!p%%bf:~1,1!"=="" (set /p = ┃<nul) else set /p =┃<nul
  60. echo.&for /l %%c in (1 1 %pn%) do ^
  61. set /p =┃!p%%cn!<nul&if "!p%%cn:~1,1!"=="" (set /p = ┃<nul) else set /p =┃<nul
  62. echo.&(for /l %%d in (1 1 %pn%) do set /p =┗━┛<nul)&echo.&echo 和:%pa%&echo.
  63. if "%winner%"=="p" (set /p =玩家胜^^!<nul) else ^
  64. if "%winner%"=="c" (set /p =电脑胜^^!<nul) else set /p =平^^!<nul
  65. set winner=&ping /n 4 127.^1>nul&cls&goto reset
  66. :give
  67. set /a %1n+=1
  68. if "%poker:~2,1%"==" " (set "tp=%poker:~1,1%"&set "poker=%poker:~2%") else ^
  69. set tp=%poker:~1,2%&set "poker=%poker:~3%"
  70. set /a %1!%1n!n=%tp%/4
  71. set /a tp=%tp%%%4
  72. set %1!%1n!f=!f:~%tp%,1!
  73. call set tp=%%%1!%1n!n%%
  74. if %tp%==1 (set /a %1a+=11&set %1!%1n!n=A&set %1b=1) else (
  75. if %tp%==11 (set /a %1a+=10&set %1!%1n!n=J) else (
  76.   if %tp%==12 (set /a %1a+=10&set %1!%1n!n=Q) else (
  77.    if %tp%==13 (set /a %1a+=10&set %1!%1n!n=K) else (
  78.   set /a %1a+=!tp!
  79. ))))
  80. if !%1a! gtr 21 if !%1b!==1 set /a %1a-=10,%1b=0
  81. if "!poker!"==" " if %1==p %b% else if %cn%==1 %b% else ^
  82. if %pa% lss 21 if %ca% lss 21 if %ca% lss %pa% %b%
  83. goto :eof
  84. :help
  85. cls
  86. echo Page 1/2
  87. echo 游戏规则:
  88. echo ^
  89. 游戏开始,玩家和庄家每人得到两张牌,如果^
  90. 其中一人拿到A和一张代表10点的牌将获胜,^
  91. 两人都拿到则平局;如果不是,选择要牌与否^
  92. 使牌的点数和接近21又不超过21。当点数和大^
  93. 与或等于21时自动停止要牌。双方要完牌后,^
  94. 谁的点数和最接近21又不超过21就胜出。当双^
  95. 方点数和一样时,庄家获胜。
  96. echo 请注意,庄家看得到玩家要牌的全过程。
  97. echo.
  98. echo 牌的点数:
  99. echo 2-10  2-10
  100. echo A  1或11(自动判断)
  101. echo J Q K  10
  102. pause>nul&cls
  103. echo Page 2/2
  104. echo 操作方法:
  105. echo 回车  要牌
  106. echo 空格+回车 不要牌
  107. echo C  成绩清零
  108. echo R  洗牌
  109. echo E  退出
  110. echo H  帮助
  111. echo.
  112. echo 声明:电脑绝对不会作弊。
  113. pause>nul&goto :eof
复制代码

作者: youxi01    时间: 2008-12-1 10:50

颜色搭配不太好,看起来眼睛有些不舒服
作者: wxcute    时间: 2008-12-1 11:05     标题: 以下建议仅供参考

可在第二句下面加上这些,让花色显示大些。既然是交互形式的,把牌居中显示是不是要好些呢?
你的帮助部分好像还没写,呵呵。
  1. if "%1"=="21" goto 21
  2. set CMDval="HKCU\Console\%%SystemRoot%%_system32_cmd.exe"
  3. reg add %CMDval% /v "FontSize" /t REG_DWORD /d 0x0014000a /f>nul
  4. start cmd /c %0 21&exit
  5. :21
  6. mode con lines=17 cols=40
  7. reg delete %CMDval% /f>nul
复制代码

作者: Batcher    时间: 2008-12-1 11:24

建议删除附件,直接贴代码。
作者: mayunwei    时间: 2008-12-2 15:02

能写出来都太利害了!!!!!
作者: jt10086    时间: 2009-4-30 01:24

好东西啊 谢谢LZ辣




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