cocos2dx《单机斗地主》源码解剖之七 对电脑玩家手中的牌进行分拆

在电脑玩家跟牌和出牌之前首先对电脑玩家的牌进行拆分:

根据文档需求(见本博客“斗地主规则“)拆分牌按以下顺序,先分析炸弹---飞机---连对---连牌--三带,对子,单张。请看如下代码:

void GameScene::FenChaiNpcPai(Player* npc){
    /************************************************************************/
    /* 1.首先分析出来牌的类型(如:四张,三张,两张,一张)                                              */
    /************************************************************************/
    std::vector<PaiXing> vec;
    PaiXing xing;
    CCArray* arr = CCArray::create();//临时数组
    arr->addObjectsFromArray(npc->getArrPk());
    //提取双鬼
    Poker* pk = (Poker *)arr->objectAtIndex(0);
    Poker* pk1 = (Poker *)arr->objectAtIndex(1);
    if(pk->getHuaSe() == Gui && pk1->getHuaSe() == Gui){
        xing.type = BOMB_CARD;
        xing.vec.push_back(pk);
        xing.vec.push_back(pk1);
        arr->removeObject(pk);
        arr->removeObject(pk1);
        vec.push_back(xing);
    }
    //分析牌型
    for(int i=0; i<arr->count();)
    {
        pk = (Poker*)arr->objectAtIndex(i);
        xing.vec.clear();//清除数组
        //找出与pk相同的牌
        for (int j=i; j<arr->count(); ++j)
        {
            pk1 = (Poker*)arr->objectAtIndex(j);
            if(pk->getNum() == pk1->getNum())
            {
                ++i;
                xing.vec.push_back(pk1);
            }
            else
            {
                break;
            }
        }
        if(xing.vec.size() == 4)
            xing.type = BOMB_CARD;
        if(xing.vec.size() == 3)
            xing.type = THREE_CARD;
        if(xing.vec.size() == 2)
            xing.type = DOUBLE_CARD;
        if(xing.vec.size() == 1)
            xing.type = SINGLE_CARD;
        vec.push_back(xing);
    }
    /************************************************************************/
    /* 2.按优先级(先分析炸弹---飞机---连对---连牌--三带,对子,单张)提取牌型并保存用于出牌或跟牌                               */
    /************************************************************************/
    //提取炸弹
    for(std::vector<PaiXing>::iterator iter = vec.begin(); iter != vec.end(); )
    {
        if(iter->type == BOMB_CARD)
        {
            xing.type = BOMB_CARD;
            xing.vec.clear();
            xing.vec = iter->vec;
            npc->
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值