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

CMD下批处理小游戏21点

规则:
发牌与叫牌为先闲后庄
庄为电脑,闲为玩家
首次发牌一家两张,一明一暗,庄家的明牌显示在屏幕上给闲家参考,闲家的明牌做为一个值提供给电脑判断是否要牌,然后闲家首先决定是否叫牌
当闲家爆掉(大于21点)时,庄家直接赢得本局,庄家不用再叫牌
闲家牌总数达到五张时,自动结束闲家叫牌,转为庄家选择叫牌
闲家放弃叫牌后转为庄家叫牌
相同点数庄吃闲,五张牌大4-20点
要求:
在CMD下不能显示扑克牌图案,用汉字代替
需要有总局数,庄闲胜局纪录
胜利判定需要你自定义一个渐进递归的算式,例如
总局为1-5局时需要对战比分 1:2
6-15局时比分 1:1.9
...
具体局数自定义,递归单位也自定义
游戏的结局有三个结果,第一是庄胜闲,第二是闲胜庄,第三是累死电累(达到总局上限)
牌的正面:
  1. ┏━━┓
  2. ┃A   ┃
  3. ┃    ┃
  4. ┃  梅┃
  5. ┗━━┛
复制代码
牌的背面
  1. ┏━━┓
  2. ┃++++┃
  3. ┃++++┃
  4. ┃++++┃
  5. ┗━━┛
复制代码
操作界面
  1. ┏━━┓┏━━┓
  2. ┃6   ┃┃++++┃
  3. ┃    ┃┃++++┃
  4. ┃  方┃┃++++┃
  5. ┗━━┛┗━━┛
  6. ┏━━┓┏━━┓
  7. ┃10  ┃┃A   ┃
  8. ┃    ┃┃    ┃
  9. ┃  黑┃┃  梅┃
  10. ┗━━┛┗━━┛
复制代码
我自已也在写,但判断方面比较困难
首先电脑叫牌与否取决于自已牌面大小,对家明牌,对家叫了几张牌,接近21点时叫牌判断不但要考虚这些,还需要添加一个随机数
再者就是代码的效率,这个每个人的爱好不同,就不多讲了

抛砖引玉,我只写了一半,逻辑方面还没有完成
  1. @ECHO OFF
  2. :Init
  3. ECHO A=0 B=0 >ll.txt
  4. SETLOCAL ENABLEDELAYEDEXPANSION
  5. Set _String=黑红梅方
  6. Set _Replace1=1  A   1  1
  7. Set _Replace2=A3 K  13 10
  8. Set _Replace3=A2 Q  12 10
  9. Set _Replace4=AA J  11 10
  10. Set _Replace5=A0 10 10 10
  11. Set /A _ZFen=0,_XFen=0,Total+=1
  12. :Start
  13. Set /A Count+=1,1/(2/Count) 2>nul||Set Count=2&&Goto SelectP
  14. If Not Defined _Computer2 (
  15.    CALL :FaPai Computer%Count%
  16.    If Not Defined _Computer2 (
  17.       CALL :Screen "A" "!DianShu:~0,2!" "!HuaSe!"
  18.       CAll :Back "A"
  19.    )
  20. )
  21. CALL :FaPai Players%Count%
  22. CALL :Screen "B" "!DianShu:~0,2!" "!HuaSe!"
  23. Goto Start
  24. :SelectP
  25. Set /A CountP+=1,1/(3/CountP) 2>nul||Set CountP=3&&Goto SelectC
  26. If Not Defined _Players3 (
  27.    Set ACount=2
  28.    CALL :JiFen Players SelectP
  29. )
  30. CALL :Output
  31. Set /P Instr="(Quit;Enter any key;Enter):"
  32. If Defined Instr (
  33.    If /I *!Instr! == *quit (
  34.       Goto :eof
  35.    ) Else (
  36.       Set /A CountP=CountP-1
  37.       Goto SelectC
  38.    )
  39. )
  40. CALL :Console "Players" "B" "SelectP" %CountP%
  41. Goto %_Label%
  42. :SelectC
  43. Set /A CountC+=1,1/(3/CountC) 2>nul||Set CountC=3&&Goto End
  44. Set /A _Chk1=Players1+10,_Chk2=(21-ComputerFen-CountP)/2
  45. Set /A _Chk3=%random%%%2,_Chk4=%random%%%100
  46. If Not Defined _Computer3 (
  47.    Set ACount=2
  48.    CALL :JiFen Computer SelectC
  49. )
  50. If %ComputerFen% LSS 15 (
  51.    Goto Next) Else (
  52.    If !_Chk1! GTR !ComputerFen! (
  53.       If !CountP! GTR 0 (
  54.          If !_Chk2! GEQ 2 (
  55.            If !_Chk3! EQU 1 (Goto Next)
  56.          ) Else (
  57.          If !_Chk2! LEQ -2 (
  58.            If !_Chk4! EQU 99 (Goto Next)
  59.          )
  60.          )
  61.       )
  62.    )
  63. )
  64. Set /A CountC-=1
  65. Goto End
  66. :Next
  67. CALL :Console "Computer" "A" "SelectC" %CountC%
  68. Goto %_Label%
  69. :Console
  70. ::%1=Players(Computer) %2=B(A) %3=Select+C(P)
  71. Set /A ACount=Count+%~4
  72. CALL :FaPai %~1%ACount%
  73. CALL :JiFen %~1 %~3
  74. CALL :Screen "%~2" "!DianShu:~0,2!" "!HuaSe!"
  75. Goto :eof
  76. :FaPai
  77. ::%1=Computer(Players)+Count
  78. Set /A DianShu=%random%%%13+1
  79. If *!Set%DianShu%! == *Not Goto FaPai
  80. Set _%~1=%DianShu%
  81. If Not Defined Set%DianShu% (
  82. CALL :Strto
  83. Set Set%DianShu%=!Str!
  84. )
  85. Set Set%DianShu%=!Set%DianShu%:Not=!
  86. Set HuaSe=!Set%DianShu%:~0,1!
  87. Set Set%DianShu%=!Set%DianShu%:%HuaSe%=!Not
  88. :Conver
  89. For /F "tokens=2-5 delims== " %%a in ('
  90. Set _Replace') DO (
  91. Set "DianShu=!DianShu:%%a=%%b! "
  92. Set _%~1=!_%~1:%%c=%%d!
  93. )
  94. Set _x%~1=!DianShu:~0,2! !HuaSe!
  95. Goto :eof
  96. :Strto
  97. Set Str=%_String%
  98. Set /A _str1=%random%%%4
  99. Set _str2=!Str:~%_str1%,4!
  100. Set Str=%_str2%!Str:%_str2%=!
  101. Set /A _str1=%random%%%3+1
  102. Set _str2=!Str:~0,-%_str1%!
  103. Set Str=%_str2%!Str:%_str2%=!
  104. Goto :eof
  105. :JiFen
  106. Set /A Shangx=21,Fen=0,aaa=0,bbb=0,xxx=0
  107. For /L %%i in (1,1,%ACount%) DO (
  108. Set /A aaa=!_%~1%%i!,bbb=aaa/^(aaa*aaa^)*10,Fen+=aaa+bbb,Shangx+=bbb
  109. Set /A xxx+=aaa/^(aaa*aaa^)
  110. )
  111. If %xxx% GTR 0 Set /A Fen=Fen-(xxx-1)*10
  112. If %Fen% LEQ %Shangx% (
  113. Set _Label=%~2
  114. If !Fen! GTR 21 Set /A Fen-=10
  115. ) Else (
  116. Set _Label=Overflow
  117. Set _Lose=%~2
  118. If !Shangx! GTR 21 Set /A Fen-=10)
  119. Set %~1Fen=%Fen%
  120. Goto :eof
  121. :Screen
  122. ::%1=A(B) %2=DianShu %3=HuaSe
  123. Set %~11=!%~11!┏━━┓
  124. Set %~12=!%~12!┃%~2  ┃
  125. Set %~13=!%~13!┃    ┃
  126. Set %~14=!%~14!┃  %~3┃
  127. Set %~15=!%~15!┗━━┛
  128. Goto :eof
  129. :Back
  130. Set %~11=!%~11!┏━━┓
  131. Set %~12=!%~12!┃++++┃
  132. Set %~13=!%~13!┃++++┃
  133. Set %~14=!%~14!┃++++┃
  134. Set %~15=!%~15!┗━━┛
  135. Goto :eof
  136. :Output
  137. CLS
  138. CALL :Show 5 A
  139. CALL :Show 9
  140. ECHO.%_XFen%/%Total%
  141. CALL :Show 5 B
  142. CALL :Show 2
  143. Goto :eof
  144. :Show
  145. For /L %%i in (1,1,%~1) DO ECHO.!%~2%%i!
  146. Goto :eof
  147. :Overflow
  148. If *%_Lose% == *SelectC (
  149. Set _Lose=闲) Else (Set _Lose=庄)
  150. Goto Pri
  151. :End
  152. If %ComputerFen% GEQ %PlayersFen% (
  153. Set _Lose=庄) Else (Set _Lose=闲)
  154. Goto Pri
  155. :Pri
  156. Set /A CountC+=Count
  157. For /L %%i in (1,1,5) DO Set "A%%i="
  158. For /L %%i in (1,1,%CountC%) DO CALL :Screen "A" "!_xComputer%%i:~0,2!" "!_xComputer%%i:~-1!"
  159. CALL :Output
  160. ECHO %_Lose%赢
  161. For /F "tokens=1,2" %%i in (ll.txt) DO Set /a %%i,%%j
  162. If *%_Lose% == *庄 (
  163. Set /A A+=1) Else (
  164. Set /A B+=1)
  165. ECHO A=%A% B=%B% >ll.txt
  166. PAUSE>nul
  167. ENDLOCAL
  168. Goto :Init
复制代码

TOP

返回列表