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

[游戏娱乐] 批处理做扑克“斗地主”

“斗地主的艰苦岁月”:
6.10 以前:

界面,洗牌,发牌,整理牌面,选牌,出牌等基本框架已经完成,就差电脑方如何出牌了。

6.13 更新:
做好了叫地主功能,好做了各方随机说话功能。
做好了各方出牌演示,只是还不能正常打牌,是乱出的。

6.14 更新:
1、做到了各方只能根据规则从小到大出牌,但是只能做到单式出牌(单个,双,三个,四个),还“不懂”什么是“三带一”。
2、可以判断赢牌方。

7.3 更新:
批处理“斗地主”的雏形出来了!!!!激动啊。。。
不过还在存很多bug,电脑方没有智能,只懂规则(已经很难搞了)

9.29 更新:
*改正了开始玩家可以不出的问题
*增加了ai对4炸的“认识”
*ai出牌从原来的单到双,改为从小出牌,
*增加了少于两长牌时警告提示
*增加了ai打三带1或三带2时的灵活性。
*对于玩家出牌的功能,已经基本善。

目前歉缺:
ai不分敌友,
ai先出牌时没有技巧可言,“不懂”发组合牌型
无计分功能
无音效,(准备用QQ游戏斗地主的声音)




有时间还将陆续更新。。。

(由于文件太大,只能用上传附件了。为了节约空间,6.16发的附件已经删除)


还将继续完善,敬请留意。。。
附件: 您需要登录才可以下载或查看附件。没有帐号?注册
2

评分人数

    • Seter: 非常好玩...PB + 10
    • foxJL: 虽不实用但批本身很有意义PB + 10

回复 3楼 的帖子

谢谢,握手,相信我们可以完成的。

目前还要解决这几个问题:
1,如何显示玩家选择牌时,牌的凸出效果
已然采用了显示缓存方式,只要修改缓存中相应的变量即可,我已经有方案,主要是效率问题

2,如何让电脑方“明白”他有什么牌,选择什么出牌方案
先得匹配出电脑方的各种符合规则的牌,然后再选择,在打牌过程中还要根据已出牌面出牌。

TOP

特效(玩家选择的凸出效果)做出来了,效率很高,大家可以接着做其它部分。
是根据变量chu中的#和@来区别是否选择来进行显示的,对后面的开发很方便。
代码如下,欢迎测试。
  1. @echo off
  2. ::用于特效显示的数所初始化
  3. (set chu0=$
  4. set m1=1
  5. set m2=2
  6. set m3=3
  7. set m4=
  8. set a$#0=        &rem 定义尾巴
  9. set b$#0=—=—=╮
  10. set c$#0=      │
  11. set d$#0=      │
  12. set e$#0=      │
  13. set f$#0=批  §│
  14. set g$#0=  处  │
  15. set h$#0=§  理│
  16. set i$#0=━=━=╯
  17. set a$@0=—=—=╮
  18. set b$@0=      │
  19. set c$@0=      │
  20. set d$@0=      │
  21. set e$@0=批  §│
  22. set f$@0=  处  │
  23. set g$@0=§  理│
  24. set h$@0=━=━=╯
  25. set i$@0=
  26. set a$#1=—=╮
  27. set b$#1=—=┷=╮
  28. set c$#1=      │
  29. set d$#1=      │
  30. set e$#1=      │
  31. set f$#1=批  §│
  32. set g$#1=  处  │
  33. set h$#1=§  理│
  34. set i$#1=━=━=╯
  35. set a$@1=—=—=╮
  36. set b$@1=      │
  37. set c$@1=      │
  38. set d$@1=      │
  39. set e$@1=批  §│
  40. set f$@1=  处  │
  41. set g$@1=§  理│
  42. set h$@1=━=┯=╯
  43. set i$@1=━=╯
  44. set a$#2=╮
  45. set b$#2=┷=—=╮
  46. set c$#2=      │
  47. set d$#2=      │
  48. set e$#2=      │
  49. set f$#2=批  §│
  50. set g$#2=  处  │
  51. set h$#2=§  理│
  52. set i$#2=━=━=╯
  53. set a$@2=—=—=╮
  54. set b$@2=      │
  55. set c$@2=      │
  56. set d$@2=      │
  57. set e$@2=批  §│
  58. set f$@2=  处  │
  59. set g$@2=§  理│
  60. set h$@2=┯=━=╯
  61. set i$@2=╯
  62. set a@00$=╭=
  63. set b@00$=│!ob!
  64. set c@00$=│!oc!
  65. set d@00$=│
  66. set e@00$=│
  67. set f@00$=│
  68. set g@00$=│
  69. set h@00$=╰=
  70. set i@00$=   &rem 突出第一个,第一位
  71. set a@10=╭=
  72. set b@10=┥!ob!
  73. set c@10=┊!oc!
  74. set d@10=┊
  75. set e@10=┊
  76. set f@10=┊
  77. set g@10=┊
  78. set h@10=╰-
  79. set i@10=━=&rem 突出第N个,第N位,变换
  80. set a@12=╭=
  81. set b@12=┥!ob!
  82. set c@12=┊!oc!
  83. set d@12=┊
  84. set e@12=┊
  85. set f@12=┊
  86. set g@12=┊
  87. set h@12=╰-
  88. set i@12=━=&rem 突出第N个,第1,2位,变换
  89. set a@13=╭=
  90. set b@13=┥!ob!
  91. set c@13=┊!oc!
  92. set d@13=┊
  93. set e@13=┊
  94. set f@13=┊
  95. set g@13=┊
  96. set h@13=╰-
  97. set i@13=━=&rem 突出第N个,第3位,变换
  98. set a@0=╭=
  99. set b@0=┊!ob!
  100. set c@0=┊!oc!
  101. set d@0=┊
  102. set e@0=┊
  103. set f@0=┊
  104. set g@0=┊
  105. set h@0=╰=
  106. set i@0=   &rem 突出第N个,第N位
  107. set a@2=╭=
  108. set b@2=┊!ob!
  109. set c@2=┊!oc!
  110. set d@2=┊
  111. set e@2=┊
  112. set f@2=┊
  113. set g@2=┊
  114. set h@2=╰-
  115. set i@2=━=&rem 突出第N个,第2位
  116. set a@3=╭=
  117. set b@3=┊!ob!
  118. set c@3=┊!oc!
  119. set d@3=┊
  120. set e@3=┊
  121. set f@3=┊
  122. set g@3=┊
  123. set h@3=╰-
  124. set i@3=╯ &rem 突出第N个,第3位
  125. set a#00$=   &rem 不突第一个
  126. set b#00$=╭=
  127. set c#00$=│!ob!
  128. set d#00$=│!oc!
  129. set e#00$=│
  130. set f#00$=│
  131. set g#00$=│
  132. set h#00$=│
  133. set i#00$=╰=
  134. set a#10=—=&rem 不突第N个,第N位,变换
  135. set b#10=╭=
  136. set c#10=┊!ob!
  137. set d#10=┊!oc!
  138. set e#10=┊
  139. set f#10=┊
  140. set g#10=┊
  141. set h#10=┤
  142. set i#10=╰=
  143. set a#12=—=&rem 不突第N个,第1,2位,变换
  144. set b#12=╭=
  145. set c#12=┊!ob!
  146. set d#12=┊!oc!
  147. set e#12=┊
  148. set f#12=┊
  149. set g#12=┊
  150. set h#12=┤
  151. set i#12=╰=
  152. set a#13=—=&rem 不突第N个,第3位,变换
  153. set b#13=╭=
  154. set c#13=┊!ob!
  155. set d#13=┊!oc!
  156. set e#13=┊
  157. set f#13=┊
  158. set g#13=┊
  159. set h#13=┤
  160. set i#13=╰=
  161. set a#0=   &rem 不突第N个,第1位
  162. set b#0=╭=
  163. set c#0=┊!ob!
  164. set d#0=┊!oc!
  165. set e#0=┊
  166. set f#0=┊
  167. set g#0=┊
  168. set h#0=┊
  169. set i#0=╰=
  170. set a#2=—=&rem 不突第N个,第2位
  171. set b#2=╭=
  172. set c#2=┊!ob!
  173. set d#2=┊!oc!
  174. set e#2=┊
  175. set f#2=┊
  176. set g#2=┊
  177. set h#2=┊
  178. set i#2=╰=
  179. set a#3=╮ &rem 不突第N个,第3位
  180. set b#3=╭=
  181. set c#3=┊!ob!
  182. set d#3=┊!oc!
  183. set e#3=┊
  184. set f#3=┊
  185. set g#3=┊
  186. set h#3=┊
  187. set i#3=╰=
  188. )
  189. setlocal enabledelayedexpansion
  190. ::为了显示方便,用p代替10
  191. ::定义花色数据
  192. set a1=&set a2=&set a3=&set a4=&set a5=&set a6=
  193. (::定义显示缓存
  194. set ec1=  ┌──┐
  195. set ec2=  │ 17 │
  196. set ec3=  │    │  ┍=┑
  197. set ec4=  │ 张 │  │1│
  198. set ec5=  │    │  │!a6!│
  199. set ec6=  ╘≡≡╛  ┕=┙
  200. set ec7=
  201. set ec8=
  202. set ec9=                                                                                  ┌──┐
  203. set ec10=                                                                                  │ 12 │
  204. set ec11=                                                                      ┍=┑       │    │
  205. set ec12=                                                                      │2│       │ 张 │
  206. set ec13=                                                                      │!a5!│       │    │
  207. set ec14=                                                                      ┕=┙       ╘≡≡╛
  208. set ec15=
  209. set ec16=
  210. set ec17=
  211. set ec18=
  212. set ec19=
  213. set ec20=
  214. set ec21=
  215. set ec22=
  216. set ec23=     ┍=┑
  217. set ec24=     │8│
  218. set ec25=     │!a6!│
  219. set ec26=     ┕=┙
  220.     set ec36=       a  b  c  d  e  f  g  h  i  j  k  l  m  n  o  p  q
  221. )
  222. set n=0
  223. for %%a in (a b c d e f g h i j k l m n o p q) do (set w%%a=!n!&set/a n=n+1)
  224. ::随机排序54张牌(洗牌)
  225. for %%a in (3 4 5 6 7 8 9 p J Q K A 2) do (for %%b in (!a3! !a5! !a4! !a6!) do (set #p!random!.%%a-%%b=1))
  226. set #P!random!.w-!a1!=1
  227. set #P!random!.W-!a2!=1
  228. ::发牌,并留三张底
  229. set/a m=0,n=0
  230. for /f "tokens=2 delims==." %%a in ('set #p') do (
  231. set /a m=m%%3+1,n+=1
  232. if !n! leq 51 (
  233. for %%c in (!m!) do (
  234.   set he%%c=!he%%c! %%a
  235. )
  236. ) else (set di=!di! %%a)
  237. )
  238. set he&echo 显示三家牌
  239. echo.
  240. set di&echo 显示底牌
  241. echo.
  242. ::整理各家手上的牌
  243. for /l %%a in (1,1,3) do (
  244. setlocal enabledelayedexpansion
  245. for %%b in (!he%%a!) do (
  246.   for /f "tokens=1,2 delims=-" %%c in ("%%b") do (
  247.    set p.d%%c=!p.d%%c! %%c
  248.    set p.f%%c=!p.f%%c! %%d
  249.   )
  250. )
  251. for %%b in (3 4 5 6 7 8 9 p J Q K A 2 w) do (
  252.   set pai%%ad=!pai%%ad!!p.d%%b!
  253.   set pai%%af=!pai%%af!!p.f%%b!
  254. )
  255. for /f "tokens=1,2 delims=." %%b in ("!pai%%ad:* =!.!pai%%af:* =!") do (
  256.   endlocal
  257.   set pai%%ad=%%b
  258.   set pai%%af=%%c
  259. )
  260. )
  261. set pai&echo 显示整理好各家的牌
  262. echo.
  263. pause
  264. mode con: cols=100 lines=200
  265. echo.
  266. set pad=!pai1d: =!
  267. set paf=!pai1f: =!
  268. ::测试用,玩家选择的为:@,没选为:#
  269. set chu=#########################
  270. :loop
  271. set c#=@
  272. set c@=#
  273. set a1=
  274. set/a n=16,@=4,#=4
  275. set is@=$
  276. setlocal enabledelayedexpansion
  277. for /l %%a in (0,1,!n!) do (
  278.         for %%z in (!chu:~%%a^,1!) do (
  279.                 set hu=&set var=
  280.                 if %%z neq !is@! (
  281.                         set/a var=!is@!
  282.                         set/a hu=m!var!
  283.                         set is@=%%z&set %%z=1
  284.                         if %%a equ 0 set %%z=4
  285.                 ) else (set /a !is@!+=1)
  286.                 if !is@! equ @ (set/a n@#=m!@!) else (set/a n@#=m!#!)
  287.                 set var=!n@#!!hu!
  288.                 if !n@#!!hu! equ 11 set var=12
  289.         for /f "tokens=1-4" %%b in ("!pad:~%%a,1! !paf:~%%a,1! !var! !chu%%a!") do (
  290.                 set oc=%%c&set ob=%%b
  291. rem 测试用变量显示:echo b%%z%%d%%e        !@!-!#!        !b%%z%%d%%e!  !var!
  292.                 for %%i in (a b c d e f g h i) do (
  293.                         for %%j in ("!%%i%%z%%d%%e!") do (
  294.                                 set %%iN=!%%iN!%%~j
  295.                 )        )
  296.         ))
  297. )
  298. if !n@#! equ 3 set n@#=0
  299. for %%i in (a b c d e f g h i) do (
  300.         for %%j in ("%%i$!is@!!n@#!") do (
  301.                 set %%iN=!%%iN!!%%~j!
  302. )        )
  303. set "spac=     "
  304. endlocal&(set ec27=%spac%%an%
  305. set ec28=%spac%%bn%
  306. set ec29=%spac%%cn%
  307. set ec30=%spac%%dn%
  308. set ec31=%spac%%en%
  309. set ec32=%spac%%fn%
  310. set ec33=%spac%%gn%
  311. set ec34=%spac%%hn%
  312. set ec35=%spac%%in%)
  313. ::把玩家的牌处理结果送到显示缓存
  314. :error
  315. ::把显示缓存进行显示输出
  316. cls
  317. (for /l %%a in (1,1,36) do echo;!ec%%a!
  318. set /p input=选择要出牌:
  319. set chu=%chu%
  320. for %%a in (a b c d e f g h i j k l m n o p q) do (for %%b in (!w%%a!) do set input=!input:%%a= %%b !)
  321. for %%a in (!input!) do (
  322.         if %%a gtr 20 goto :error
  323.         if %%a lss 0 goto :error
  324.         set/a var=1+%%a
  325.         for /f "tokens=1,2" %%b in ("!chu:~%%a,1! !var!") do (
  326.                 set chu=!chu:~,%%a!!c%%b!!chu:~%%c!
  327.         )
  328. ))
  329. goto :loop
  330. echo !a1!  !a2!  !a3!  !a4!  !a5!  !a6!
  331. pause
复制代码

TOP

发一个可以实现牌型判断的子功能
“3#3-2.1.1” 代表333444带两个单牌(飞机)
第一位为关键点数3,#3表示3个3,-2表示连继两组333444,
后面的.1.1表示带两个牌。
下面的代码可以把牌组(如:33344479)转换成上述规则串。
  1. @echo off&setlocal enabledelayedexpansion
  2. set kkk=3456789pJQKA2vw#
  3. set /a var=10-1
  4. set pad=33344479
  5. set paf=xyxyxyxyxyxyxyx
  6. for /l %%a in (0,1,!var!) do (
  7.         for %%b in ("!pad:~%%a,1!") do (
  8.                 set/a pd.%%~b+=1
  9.                 set pds.%%~b=!pds.%%~b!!pad:~%%a,1!
  10.                 set pfs.%%~b=!pfs.%%~b!!paf:~%%a,1!
  11.         )
  12. )
  13. for %%a in (3 4 5 6 7 8 9 p J Q K A 2 v w) do (
  14.         for %%b in (!pd.%%a!) do (
  15.                 set pd.#%%b=!pd.#%%b! %%a
  16.         )
  17. )
  18. for /l %%a in (4,-1,1) do (
  19.         set vkk=0!kkk!
  20.         set pstr=
  21.         set n=1
  22.         if defined pd.#%%a (
  23.                 for %%b in (!pd.#%%a!) do (
  24.                         if not defined ptop (
  25.                                 if "!vkk:~,1!" equ "%%b" (set /a n+=1) else (set pstr=!pstr!.!n!&set n=1)
  26.                                 set vkk=!vkk:*%%b=!
  27.                         ) else (set pstr=!pstr!.%%a)
  28.                 )
  29.                 if not defined ptop (set ptop=!pd.#%%a:~1,1!#%%a-!n!!pstr:~2!) else (set pstr1=!pstr1!.%%a!pstr:~2!)
  30.         )
  31. )
  32. set ppp=!ptop!!pstr1!                        
  33. set ppp
  34. set ps
  35. set pt
  36. set pd
  37. pause
复制代码
如此一为,可以把所的斗地主牌型规则进行如下定义:
  1. (rem 牌型定义
  2. set #3-1.1=三带一
  3. set #3-1.2=三带二
  4. set #3-2.1.1=飞机
  5. set #3-2.2=飞机
  6. set #3-2.2.2=飞机
  7. set #3-3=三顺
  8. set #3-3.1.1.1=三顺拖
  9. set #3-3.2.2.2=三顺拖
  10. set #4-1.1.1=四带二
  11. set #4-1.2.2=四带二
  12. set #2-3=连对
  13. set #2-4=连对
  14. set #2-5=连对
  15. set #2-6=连对
  16. set #2-7=连对
  17. set #2-8=连对
  18. set #2-9=连对
  19. set #2-10=连对
  20. set #1-5=顺子
  21. set #1-6=顺子
  22. set #1-7=顺子
  23. set #1-8=顺子
  24. set #1-9=顺子
  25. set #1-10=顺子
  26. set #1-11=顺子
  27. set #1-12=顺子
  28. set #1-1=n
  29. set #2-1=一对n
  30. set #3-1=三个n
  31. set #4-1=炸弹
  32. set v#1-2=王炸)
复制代码
欢迎感兴趣的人一起来讨论!

[ 本帖最后由 netbenton 于 2009-6-18 20:57 编辑 ]

TOP

谢谢提出意见。

我明白你的意思,可是一行字母不够用呀?!最多时可是有20张牌哦!

我觉得好像不是很麻烦,选错了再改过就是了,因为是可以多次选,重选(乒乓),并且不用按顺序的
如:
akbc = abck
abcdab  = cd


最后更新请注意一楼的附件

[ 本帖最后由 netbenton 于 2009-8-2 22:12 编辑 ]

TOP

返回列表