斗地主牌型基本算法升级版本
扫描二维码,添加好友,一起探讨斗地主游戏开发
好久没更新博客了,前段时间和朋友一起开了一个公司 做APP,最后失败了。现在又开始做棋牌游戏了,最近在看网狐的源码,发现里面斗地主的基本算法太强大了,现在想想我原来的算法简直是弱爆了,分享一下 希望能对你有一点点帮助。以下主要涉及到判断牌型,牌型大小比较2块,如果你想了解更多关于棋牌游戏的东西请访问我的棋牌游戏专栏
大家写过游戏都会发现,每一种游戏牌的组成类型不一样的,比如斗地主判断牌型,和德州判断牌型就不一样,最近写德州扑克游戏发现其实所有判断牌型的算法都是一样的。
挑出牌出4张,3张,2张,1张出现的次数,然后各自组合看能出什么样的牌型,最后就能确定下来具体的牌型。下面是具体的代码实现。。。。
一.判断牌型
定义一个结构来表示每张相同牌的信息。
//分析结构
structtagAnalyseResult
{
BYTE cbFourCount; //四张数目
BYTE cbThreeCount; //三张数目
BYTE cbDoubleCount; //两张数目
BYTE cbSignedCount; //单张数目
BYTE cbFourCardData[MAX_COUNT]; //四张克
BYTE cbThreeCardData[MAX_COUNT]; //三张扑克
BYTE cbDoubleCardData[MAX_COUNT]; //两张扑克
BYTE cbSignedCardData[MAX_COUNT]; //单张扑克
};
当我们需要判断牌型的时候,先分析牌把对应的数据存放到上面的结构体。然后根据不同牌型的规则来判断即可。主要通过下面2个函数.话不多说直接上源代码:
1. //分析扑克(参数:1将要出牌的数据,出牌的张数,out存放分析的结构体)
void CGameLogic::AnalysebCardData(constBYTE cbCardData[], BYTE cbCardCount, tagAnalyseResult & AnalyseResult)
{
//设置结果
ZeroMemory(&AnalyseResult,sizeof(AnalyseResult));
//扑克分析
for(BYTE i=0;i<cbCardCount;i++)
{
//变量定义
BYTE cbSameCount=1,cbCardValueTemp=0;
BYTE cbLogicValue=GetCardLogicValue(cbCardData[i]);
//搜索同牌
for(BYTE j=i+1;j<cbCardCount;j++)