本篇主要讲解斗地主中如何判断一手牌的牌型。
牌型
火箭:即双王(大王和小王),最大的牌。
炸弹:四张点数相同的牌,如:7777。
单牌:任意一张单牌。
对牌:任意两张点数相同的牌。
三张:任意三张点数相同的牌,如888。
三带一:点数相同的三张牌+一张单牌或一对牌。如:333+6 或 444+99。
单顺:任意五张或五张以上点数相连的牌,如:45678或78910JQK。不包括 2和双王。
双顺:三对或更多的连续对牌,如:334455、7788991010JJ。不包括 2 点和双王。
三顺:二个或更多的连续三张牌,如:333444 、555666777888。不包括 2 点和双王。
飞机带翅膀:三顺+同数量的单牌或同数量的对牌。如:444555+79 或333444555+7799JJ
四带二:四张牌+两手牌。(注意:四带二不是炸弹)。如:5555+3+8 或 4444+55+77 。
友情提示:本篇是接着上1篇讲述的,建议先看看上1篇一张牌Card的构造过程。
http://blog.csdn.net/fansunion/article/details/12516411
/**
* 游戏规则 牌的类型共有10种:
*
* 1. 单 2.对子 3.3不带 4.3带1 5.炸弹 6.顺子 7.4带2 8.连队 9.飞机 10.对王
*
* @author LeiWen@FansUnion.cn,http://FansUnion.cn,
* http://blog.csdn.net/FansUnion
*
*/
1.单
/** * 判断牌是否为单 * * @param myCards * 牌的集合 * @return 如果为单,返回true;否则,返回false。 */ public static boolean isDan(List<Card> myCards) { // 默认不是单 boolean flag = false; if (myCards != null && myCards.size() == 1) { flag = true; } return flag; }
2.对子
/** * 判断牌是否为对子 * * @param myCards * 牌的集合 * @return 如果为对子,返回true;否则,返回false。 */ public static boolean isDuiZi(List<Card> myCards) { // 默认不是对子 boolean flag = false; if (myCards != null && myCards.size() == 2) { int grade1 = myCards.get(0).grade; int grade2 = myCards.get(1).grade; if (grade1 == grade2) { flag = true; } } return flag; }
3.3带1
/**
* 判断牌是否为3带1 * * @param myCards * 牌的集合 * @return 如果为3带1,被带牌的位置,0或3,否则返回-1。炸弹返回-1。 */ public static int isSanDaiYi(List<Card> myCards) { int flag = -1; // 默认不是3带1 if (myCards != null && myCards.size() == 4) { // 对牌进行排序 CardUtil.sortCards(myCards); int[] grades = new int[4]; grades[0] = myCards.get(0).grade; grades[1] = myCards.get(1