先讲一下 在编写斗地主中 验证牌型的算法吧
在验证牌型的算法中 我的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
}