棋牌游戏源码教程解析之斗地主AI(4)

2019-06-21 15:30 浏览

上一章我们定义了基本的数据结构,相信大家看到手牌类里面那么多出牌序列时一定会比较愤慨。。。

前几篇文章的地址链接整理:

棋牌游戏源码教程解析之斗地主AI(1)

棋牌游戏源码教程解析之斗地主AI(2)

棋牌游戏源码教程解析之斗地主AI数据结构(3)

其实一开始写的时候我也是觉得很脑残,不过后续开发证明了这样的结构还是可以的,因为只要我封装了一层数据转换,接下来所有的算法策略都只用到2个成员变量,状态数据及手牌数量。特别便于调试、管理。那么接下来就写出类成员函数的实现方法。

//手牌数据类

class HandCardData

{

public:

    //构造函数

    HandCardData::HandCardData()

    {

    }

    //析构函数

    virtual HandCardData::~HandCardData()

    {

    }

 

public:

      //手牌序列——无花色,值域3~17

    vector <int> value_nHandCardList; 

      //手牌序列——状态记录,便于一些计算,值域为该index牌对应的数量0~4

    int value_aHandCardList[18] = { 0 }; 

      //手牌序列——有花色,按照从大到小的排列  56,52:大王小王……4~0:红3黑3方3花3

    vector <int> color_nHandCardList;

      //手牌个数

    int nHandCardCount = 17 ;

      //玩家角色地位       0:地主    1:农民——地主下家   2:农民——地主上家

    int nGameRole = -1;

      //玩家座位ID 

    int nOwnIndex = -1;

    //玩家要打出去的牌类型

    CardGroupData uctPutCardType;

    //要打出去的牌——无花色

    vector <int> value_nPutCardList;

    //要打出去的牌——有花色

    vector <int> color_nPutCardList;

    HandCardValue uctHandCardValue;

public:

    //要打出的牌序列清空

    void ClearPutCardList(); 

    //手牌排序,大牌靠前

    void SortAsList(vector <int> &arr); 

    //出一张牌,返回操作是否合法

    bool PutOneCard(int value_nCard, int &clear_nCard); 

    //出一组牌,返回操作是否合法

    bool PutCards(); 

    //通过有花色手牌获取无花色手牌(包含两种结构)

    void get_valueHandCardList();

    //初始化

    void Init(); 

    //输出所有成员变量,用于测试

    void PrintAll();

};

void HandCardData::ClearPutCardList() 是把要出的牌打入出牌序列前清空现列表的操作,含有花色和无花色,顺便把之前出牌类型的值初始化一下

image.

void HandCardData::SortAsList(vector <int> & arr )简单的排序,这个就不说了

image.

void HandCardData::get_valueHandCardList()根据获取的有花色手牌序列转换成无花色手牌序列

我们的花色定义是按照从大到小的排列  56,52:大王小王……4~0:红3黑3方3花3  所以花色值/4再加上最小的牌3就是我们要的无花色权值

注:2对应的值是15 A对应的值是14

image.

void HandCardData::Init()手牌的初始化,主要用于根据获取的有花色手牌序列转换成无花色手牌序列,手牌序列排序, 计算出手牌个数。

image.

敬请关注下一章:棋牌游戏源码教程解析之斗地主AI(5)


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

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

点击关闭
  • 在线客服1

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

    电话咨询:
    15623571666

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

    ↓微信客服↓

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

分享:

支付宝

微信