斗地主算法的设计与实现 二 --如何判断一手牌的类型 单 对子 三不带 三带一 四代二等

               

本篇主要讲解斗地主中如何判断一手牌的牌型。

牌型
  火箭:即双王(大王和小王),最大的牌。
  炸弹:四张点数相同的牌,如: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

    /**
  

  * 判断牌是否为31     *     * @param myCards     *            牌的集合     * @return 如果为31,被带牌的位置,03,否则返回-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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值