棋牌源码教程解析之斗地主AI数据处理(5)

2019-06-22 13:59 浏览

上一章我们定义了基本的数据处理,

前几篇文章的地址链接整理:
棋牌游戏源码教程解析之斗地主AI(1)
棋牌源码教程解析之斗地主AI(2)
棋牌源码教程解析之斗地主AI数据结构(3)
棋牌源码教程解析之斗地主AI(4)

void HandCardData::PrintAll()就是输出一些类成员变量,测试时使用:

image.

接下来就说出牌的函数了

bool  HandCardData::PutCards()出一组牌,返回操作是否合法

其函数实现为:遍历无花色手牌序列逐一映射到有花色手牌,然后将其加入有花色出牌数组里。说白了PutCards就是循环调用PutOneCard

bool  HandCardData::PutCards()

{

    for (vector<int>::iterator iter = value_nPutCardList.begin(); iter != value_nPutCardList.end(); iter++)

    {

    int color_nCard = -1;

    if (PutOneCard(*iter, color_nCard))

    {

    color_nPutCardList.push_back(color_nCard);

    }

    else

    {

    return false;

    }

    }

    nHandCardCount -= value_nPutCardList.size();

    return true;

}

重点就是出一张牌的实现方法了,bool PutOneCard(int value_nCard, int &clear_nCard);

这里我们需要做的事情可以分成两部分,第一部分,返回一个有花色的手牌以供PutCards加入有花色出牌序列,也就是引用的 int &clear_nCard

第二个就是处理我们的这几个数组(value状态数组、value列表数组、color列表数组

bool  HandCardData::PutOneCard(int value_nCard, int &color_nCard)

{

    bool ret = false;

    //value状态数组处理

    value_aHandCardList[value_nCard]--;

    if (value_aHandCardList[value_nCard] < 0)

    {

    return false;

    }

    //value列表数组处理

    for (vector<int>::iterator iter = value_nHandCardList.begin(); iter != value_nHandCardList.end(); iter++)

    {

    if (*iter == value_nCard)

    {

    value_nHandCardList.erase(iter);

    ret = true;

    break;

    }

    }

    // color列表数组处理

    int k = (value_nCard - 3) * 4;      //数值转换 

    for (vector<int>::iterator iter = color_nHandCardList.begin(); iter != color_nHandCardList.end(); iter++)

    { 

    for (int i = k; i < k + 4; i++) 

    {

    if (*iter == i)

    {

    color_nCard = i;

    color_nHandCardList.erase(iter);

    return ret;

    }

    }

    }

    return false;

}

至此,手牌类成员的数据处理函数就做完了,而全局类并没有什么需要我们处理的,因为那些都应该是我们从服务器获取的信息。

如果说这些都算是准备工作的话,那么接下来便是开始进入AI逻辑环节了,我们先从手牌权值的定义说起。

作者:九日王朝

敬请关注下一章:棋牌源码教程解析之斗地主AI权值定义(6)

 


本套棋牌游戏开发源码,承接搭建维护一条龙服务,需要的老板联系15623571666.微信同号,货真价实!

免责申明:本站源码仅提供学习和交流,所有资料源码均来自于网络,版权归原创者所有!本站不提供任何保证,并不承担任何法律责任,如果对您的版权或者利益造成损害,请提供相应的资质证明,我们将于3个工作日内予以删除。

点击关闭
  • 在线客服1

    -------------------

    电话咨询:
    15623571666

    -------------------

    ↓微信客服↓

    ------------------- 2

分享:

支付宝

微信