[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
♤♡♧♢ ♠♥♦♣

TOP

本帖最后由 caruko 于 2011-4-6 21:37 编辑

测试数十次,可能还有些隐藏BUG,另外拿5张牌的没有设置特殊。
  1. @ECHO OFF&SETLOCAL ENABLEDELAYEDEXPANSION
  2. set /a C=0,P=0
  3. set /a j=10,q=10,k=10,a=100
  4. set "s_hs=,,,"
  5. set "s_pai=A,2,3,4,5,6,7,8,9,10,J,Q,K"
  6. :start
  7. set /a 庄_张次=0,闲_张次=0,庄_牌值=0,闲_牌值=0,P_明值=0
  8. set "庄_牌="
  9. set "闲_牌="
  10. set "P_明="
  11. set "msg="
  12. set "msg1="
  13. set "牌="
  14. set "s_p="
  15. for /l %%i in (1,1,5) do set "p%%i="
  16. for %%i in (!s_hs!) do for %%j in (!s_pai!) do set "s_p=%%i_%%j !s_p!"
  17. set "标准牌=!s_p!"
  18. ::洗牌 【随机5-11次洗牌,可自己改】
  19. set /a "n=%RANDOM% %% 7 + 5"
  20. :洗牌次
  21. for %%i in (!s_p!) do (
  22.     set /a "x=!RANDOM! %% 2"
  23.     if !x! equ 1 (set "牌=!牌! %%i") else set "牌=%%i !牌!"
  24. )
  25. set /a n-=1
  26. set "s_p=!牌!"
  27. if !n! GTR 0 (
  28.   set "牌="
  29.   goto :洗牌次
  30. )
  31. ::主流程
  32. call :发牌 庄
  33. call :发牌 闲 P1
  34. call :发牌 庄
  35. call :发牌 闲
  36. :loop
  37. call :玩家叫牌||goto :loop
  38. call :判断玩家值
  39. call :估计玩家值 !庄_牌值!
  40. :break
  41. ::计分重来
  42. if !庄_牌值! gEQ !闲_牌值! (
  43.   set msg1=!庄_牌值!:!闲_牌值!,庄家获胜!
  44.   set /a C+=1
  45. ) else (
  46.   set msg1=!庄_牌值!:!闲_牌值!,闲家获胜!
  47.   set /a P+=1
  48. )
  49. call :显示 2
  50. pause
  51. goto :start
  52. :爆
  53. set msg=%1家爆牌,点数!%1!。
  54. if "%1"=="庄" (
  55.   set msg1=闲家获胜!
  56.   set /a P+=1
  57.   ) else (
  58.   set msg1=庄家获胜!
  59.   set /a C+=1
  60.   )
  61. call :显示 3
  62. pause
  63. goto :start
  64. :end
  65. echo,按任意键退出!
  66. pause>nul
  67. exit
  68. :显示
  69. cls
  70. if "%*"=="" (
  71. setlocal
  72. for /l %%i in (1,1,!庄_张次!) do (set "p1=!p1!┏━━┓  "&set "p5=!p5!┗━━┛  ")
  73. for /f "tokens=2 delims=_ " %%i in ("!庄_牌!") do if "%%i"=="10" (set "p2=┃%%i  ┃  ") else set "p2=┃%%i   ┃  "
  74. for /l %%i in (2,1,!庄_张次!) do set "p2=!p2!┃++++┃  "
  75. set "p3=┃    ┃  "
  76. for /l %%i in (2,1,!庄_张次!) do set "p3=!p3!┃++++┃  "
  77. for /f "tokens=1 delims=_ " %%i in ("!庄_牌!") do set "p4=┃   %%i┃  "
  78. for /l %%i in (2,1,!庄_张次!) do set "p4=!p4!┃++++┃  "
  79. for /l %%i in (1,1,5) do echo !p%%i!
  80. endlocal
  81. ) else (
  82. setlocal
  83. for /l %%i in (1,1,!庄_张次!) do (set "p1=!p1!┏━━┓  "&set "p5=!p5!┗━━┛  ")
  84. for %%i in (!庄_牌!) do for /f "tokens=2 delims=_" %%j in ("%%i") do if "%%j"=="10" (set "p2=!p2!┃%%j  ┃  ") else set "p2=!p2!┃%%j   ┃  "
  85. for /l %%i in (1,1,!庄_张次!) do set "p3=!p3!┃    ┃  "
  86. for %%i in (!庄_牌!) do for /f "tokens=1 delims=_" %%j in ("%%i") do set "p4=!p4!┃   %%j┃  "
  87. for /l %%i in (1,1,5) do echo !p%%i!
  88. endlocal
  89. )
  90. echo,&echo,!msg!&echo,&echo,!msg1!&echo,对局: 庄[!C!] / 闲[!P!]
  91. setlocal
  92. for /l %%i in (1,1,!闲_张次!) do (set "p1=!p1!┏━━┓  "&set "p5=!p5!┗━━┛  ")
  93. for %%i in (!闲_牌!) do for /f "tokens=2 delims=_" %%j in ("%%i") do if "%%j"=="10" (set "p2=!p2!┃%%j  ┃  ") else set "p2=!p2!┃%%j   ┃  "
  94. for /l %%i in (1,1,!闲_张次!) do set "p3=!p3!┃    ┃  "
  95. for %%i in (!闲_牌!) do for /f "tokens=1 delims=_" %%j in ("%%i") do set "p4=!p4!┃   %%j┃  "
  96. for /l %%i in (1,1,5) do echo !p%%i!
  97. endlocal
  98. goto :eof
  99. :玩家叫牌
  100. choice /c HSE /n /m "拿牌(Hit:H) 停牌(Stand:S) 退出(Exit:E):"
  101. if !ERRORLEVEL! equ 0 exit /b 1
  102. if !ERRORLEVEL! equ 255 exit /b 1
  103. if !ERRORLEVEL! equ 2 exit /b 0
  104. if !ERRORLEVEL! equ 3 goto :end
  105. call :发牌 闲 ||exit /b 0
  106. exit /b 1
  107. goto :eof
  108. :发牌 [庄/闲]
  109. if !%1_张次! geq 5 (
  110.     set msg=最多只能拿5张牌!
  111.     call :显示
  112.     exit /b 1
  113. )
  114. set "msg=%1家拿牌!"
  115. for /f "tokens=1*" %%i in ("!牌!") do (
  116.     set "当前牌=%%i"
  117.     set "牌=%%j"
  118. )
  119. set "%1_牌=!%1_牌! !当前牌!"
  120. set /a %1_张次+=1
  121. if "%2"=="P1" (
  122.     set "P_明=!当前牌!"
  123.     for /f "tokens=2 delims=_" %%j in ("!当前牌!") do set /a "P_明值=%%j"
  124. )
  125. for /f "tokens=2 delims=_" %%j in ("!当前牌!") do set /a "%1_牌值=!%1_牌值! + %%j"
  126. call :显示
  127. goto :eof
  128. :判断玩家值
  129. if !闲_牌值! gtr 100 (
  130.     set /a tpp=!闲_牌值! %% 100 + 11
  131.     if !tpp! gtr 21 (set /a 闲_牌值=!闲_牌值! %% 100 + 1) else set /a 闲_牌值=tpp
  132.     if !闲_牌值! gtr 21 call :爆 闲
  133. ) else (
  134.     if !闲_牌值! gtr 21 call :爆 闲
  135. )
  136. goto :eof
  137. :估计玩家值 【电脑估计玩家牌值,因为统计学没学好,并且计算量也非常大,就采用初略估计值,否着计算各种值的可能性几分钟绝对算不完。】
  138. if !P_明值! geq 100 (
  139.     if !P_次数! equ 2 set /a P_明值=17
  140.     if !P_次数! equ 3 set /a P_明值=16
  141.     if !P_次数! equ 4 set /a P_明值=16
  142.     if !P_次数! equ 5 set /a P_明值=18
  143. ) else (
  144.     if !P_次数! equ 2 set /a P_明值=14
  145.     if !P_次数! equ 3 set /a P_明值=17
  146.     if !P_次数! equ 4 set /a P_明值=16
  147.     if !P_次数! equ 5 set /a P_明值=18
  148. )
  149. :判断电脑点数
  150. for %%i in (!庄_牌!) do set "标准牌=!标准牌:%%i=!"
  151. for %%i in (!P_明!) do set "标准牌=!标准牌:%%i=!"
  152. if !庄_牌值! GEQ 100 (
  153.     set /a 庄_牌值=%1 %% 100 + 11
  154.     if !庄_牌值! GTR 21 set /a 庄_牌值=%1 %% 100 + 1
  155.     if !庄_牌值! GEQ 17 if !庄_牌值! lss 22 goto :break
  156.     call :判断叫牌 !庄_牌值! || (
  157.         set /a 庄_牌值=%1 %% 100 + 1
  158.         if !庄_牌值! GTR 21 call :爆 庄
  159.         if !庄_牌值! GEQ 17 goto :break
  160.         call :判断叫牌 !庄_牌值!
  161.     )
  162. ) else (
  163.     if !庄_牌值! GTR 21 call :爆 庄
  164.     if !庄_牌值! GEQ 17 goto :break
  165.     call :判断叫牌 !庄_牌值!
  166. )
  167. goto :eof
  168. :判断叫牌 【分析是否叫牌】
  169. set /a jl=0,ct=0,n=0
  170. for %%i in (!标准牌!) do (
  171.     for /f "tokens=2 delims=_" %%j in ("%%i") do (
  172.         set /a num=%%j+%1,n+=1
  173.         if !num! lss 22 set /a jl+=1
  174.         if !num! lss !P_明值! set /a jl+=1
  175.     )
  176. )
  177. set /a jl=jl*100/n
  178. if !jl! gtr 55 (
  179.   set "msg=庄家叫牌!"
  180.   call :发牌 庄 || exit /b 0
  181.   call :判断电脑点数 !庄_牌值!
  182.   exit /b 0
  183. )
  184. exit /b 1
复制代码

TOP

好奇怪,复制代码得到的是LZ的牌。
set s_hs 显示空的,实际是6楼提供的ACSII码。

TOP

返回列表