先讲一下 在编写斗地主中 验证牌型的算法吧
在验证牌型的算法中 我的JS斗地主已经实现了!
{用伪代码简述}
基本上 验证一个牌型主要是要得到所选择牌型的两个重要的参数!
1 所选牌型的 长度
2 所选牌型的最大相同数的牌面 如 21333444 我们就要想办法去获得 4这个值
A型排序 = 按大到小排序 如 WW21KQJ109876543
B型排序 = 按重复出现次数最多的 并且按大到小排序 如 22221111KKKQQ55W987
从斗地主的规则上来分析
除了 Len 是 2 和 4 以为 其余的牌型 如果要比较大小 必须是一样的!
斗地主的细牌型一共有 15 种
1火箭 L=2 大小王
2炸弹 L=4 四张一样
3单牌 L=1
4对牌 L=2 两张一样
5三张牌 L=3 三张一样
6三带一 L=4 其中3张一样
7三带对 L=5 这里 我们先用B型排序函数排一次顺序 如 23323 ->33322 然后判断前面3张一样 后两张一样
8单顺 L>=5 这里用A型排序 然后依次 判断前一张比后一张大1 去掉2和王 1+13=14 可以排AKQJ10
9双顺 L>=6 L%2=0 用B型排序 依次判断 奇数=偶数 间隔的 奇数-间隔的奇数=1
10三顺 道理同上 L>=6 L%3=0 用B型排序 依次判断 1=2=3 间隔的 1-1=1
11飞机带翅膀(单) L>=8 L%4=0 S=L/4 S为飞行三张相同数 先用 B型排序 判断 前 S*3张是否是三顺
12飞机带翅膀(对) L>=10 L%5=0 S=L/5 先用 B型排序 判断 前 S*3张是否是三顺 后S*2 张 是否奇偶相同
13四带二(单)L=6 前4张一样
14四带二(对)L=8 前4张一样 后两张奇偶相同
15空牌型 L=0
然后我们来一一分析他们的特征
那么 排序已经可以验证了 怎么样比较牌型的大小呢
K=B型排序后 取第一张牌
{比较前 如果 K=1 K要加上13}
{比较前 如果 K=2 K要加上13}
C
为客牌牌型
D
为主牌牌型
F=FALSE
T=TRUE
R=比较结果
D
=15 R
=T 这里是如果主客牌选择不出牌 是可以允许通过的
C
=1 即 C
的牌型为火箭 R
=F
D
=1 R
=T
C
=2 D
=2 C
.K>D
.K R
=F 否则 R
=T
C
=2 D
>2 R
=F
D
=2 C
>2 R
=T
D
>2 C
>2 C
.L<>D
.L R
=F
D
>2 C
>2 C
.L=D
.L
{
C
.K >=D
.K R
=F 否则 R
=T
}