我以前写过一个斗地主机器人。思路如下,希望对你有帮助。};^}
2
Xo+
斗地主AI设计}Fm\+JOS
一、牌型7u|%^Ao6
1 火箭:大小王在一起的牌型,即双王牌,此牌型最大,什么牌型都可以打。QhsVIta
2 炸弹:相同点数的四张牌在一起的牌型,比如四条A。除火箭外,它可以打任何牌型,炸弹对炸弹时,要比大小。-qfnUh
3 单支(一手牌):单张牌,如一支3。xdqK.Z%?
4 对子(一手牌):相同点数的两张牌在一起的牌型,比如55。a}dw9wU!:
5 三条:相同点数的三张牌在一起的牌型,比如三条4。3[.3d
y7,Z
6 三带一手:三条 + 一手牌的牌型,比如AAA+9或AAA+77。.'&V#D0
7 单顺:五张或更多的连续单支牌组成的牌型,比如45678或345678910JQKA。2和大小王不可以连。bLco:-G1E1
8 双顺:三对或更多的连续对子组成的牌型,比如334455或445566778899。2和大小王不可以连。n7S;
Xve#
9 三顺:二个或更多的连续三条组成的牌型,比如777888或444555666777。2和大小王不可以连。83Uw
10 飞机带翅膀:三顺 + 同数量的一手牌,比如777888+3+6或444555666+33+77+88。[1U{ci&=p
11 四带二:四条+两手牌。比如AAAA+7+9或9999+33+55。o[oqPN3$Y
二、牌型分析p(?g-
1 单顺的确定xj7vI&u.
a) 选取五连,先取出最小的一个五连,再在剩余的牌中取出最小的一个五连,依此类推,直到没有五连为止。zIm-X,~I$
b) 扩展五连,将剩余的牌与已经取出的牌进行比对,如果某张剩余的牌与已知的连牌能组成更大的连牌,则将其合并。一直到无法合并为止。%4/xH9
c) 合并连牌,如果某两组连牌能无缝连接成更大的连牌,则将其合并成一组。TaWaHf
经过上述选取、扩展和合并,则将一手牌中的所有连牌提取出来了,举例如下:r>O|L%xpv
假定一手牌是:2AKQJ1099877766543qlvwK&W
第一步,选取出34567,678910两个连牌组。剩余的牌还有79JQKA25NFRPGYX
第二步,剩余的JQKA能和678910组成新的连牌678910JQKA。h7*O.Opm=
第三步,已知的两个连牌组不能合并成新的、更大的连牌组,则这手牌就被分成了34567、678910JQKA两个连牌组和7、9、2三张单牌。\%4|t,en
Yt*vqm[WV
2 双顺的确定rs_h}+6"s
将一副牌中所有的对子检测出来,然后将对子排序,按照检测三连的方式可以将所有的双顺都提取出来。-N4z-ozhC
BsH{QRYQ
3 三条的确定0) @jc=
一副牌中的所有三条都能比较方便地提取出来。%qi%$
]5)"gL%H`
4 三顺的确定*IqVY&
在三条的基础上进行比较,如果有相连的三条,则将其合并成(尽可能大的)三顺。xW0Z'==
,5w]\z
5 炸弹的确定#D0W7a
所有的四头都能很方便地确定。[S)?G$JW
Kr]W
o8dWy
6 火箭的确定#fj[kq)&S
只要牌张包含大小王,就将其组成火箭。~QCA -Yud
gb(#DbI
7 牌张的分类方法Q0WY$w1<
a) 先确定火箭:判断是否有大小王。7*MU2gb
b) 再确定炸弹:判明是否有四头。fyrd`R
c) 再确定三条:在除了炸弹以外的牌中判断是否