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

2019-06-18 11:09 浏览

上一章我们已经确立了基本的业务逻辑处理流程。从本章开始,我们便进入开发阶段。

首先就是明确我们都需要哪些数据,且它们以怎样的形式存储。

首先从上一章反复提到的手牌权值结构说起,也就是F()的返回值,他包含了两个成员,①手牌总价值②需要打几手牌。

image.png

这个不难理解吧,我们出牌的时候总是希望把牌划分成手数少且相对价值又大的组合方式,比如说AKQJ10,虽然都挺大,但你总不见得故意拆开出吧。

接下来就是组合牌型的数据结构,就算是上一章G()的返回值吧,因为G()主要返回的就是一个组合牌结构及出牌的序列

image.png

说明一下nMaxCard,比如说99,他的nMaxCard就是9,比如说33366,他的nMaxCard就是3。被动出牌规则便是通过这个值进行判断是否可以出牌。

cgType是所有牌型的枚举,具体定义为:

image.png

接下来便是两个主要的类,首先是游戏全局类,主要用于储存当前游戏的发展情况

image.png

  1. //地主玩家
  2. int nDiZhuID = -1;
  3. //本局叫分
  4. int nLandScore = 0;
  5. //当前地主玩家——还未确定
  6. int nNowDiZhuID = -1;
  7. //当前本局叫分——还未确定
  8. int nNowLandScore = 0;
  9. //三张底牌
  10. int DiPai[3] = { 0 };
  11. //已经打出的牌——状态记录,便于一些计算,值域为该index牌对应的数量0~4
  12. int value_aAllOutCardList[18] = { 0 };
  13. //三名玩家已经打出的手牌记录
  14. int value_aUnitOutCardList[3][18] = { 0 };
  15. //三名玩家已经剩余手牌个数
  16. int value_aUnitHandCardCount[3] = { 0 };
  17. //本局当前底分倍数
  18. int nMultiple = 0;
  19. //当前控手对象(用于区分是否可以自身任意出牌以及是否地主已经放弃出牌从而不去管队友)
  20. int nCardDroit = 0;
  21. //当前打出牌的类型数据,被动出牌时玩家根据这里做出筛选
  22. CardGroupData uctNowCardGroup;
  23. //本局游戏是否结束
  24. bool Over = false;

然后是自身手牌的数据类,这里重点说明的是手牌序列相关,大家可以看到,类成员里定义了很多,感觉蛮晕的。

 


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

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

点击关闭
  • 在线客服1

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

    电话咨询:
    15623571666

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

    ↓微信客服↓

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

分享:

支付宝

微信