woaidaima2016 发表于 2017-6-13 11:17:00

欢乐斗地主【源码】

http://img.woaidaima.com//upload/image/20170523/1495499487615090599.pnghttp://img.woaidaima.com//upload/image/20170523/1495499489935091355.png#ifndef GAME_LOGIC_HEAD_FILE
#define GAME_LOGIC_HEAD_FILE

#pragma once

#include "Stdafx.h"

//////////////////////////////////////////////////////////////////////////

//排序类型
#define ST_ORDER                  0                                    //大小排序
#define ST_COUNT                  1                                    //数目排序
#define ST_CUSTOM                  2                                    //自定排序

//////////////////////////////////////////////////////////////////////////

//分析结构
struct tagAnalyseResult
{
    BYTE                           cbBlockCount;                  //扑克数目
    BYTE                            cbCardData;            //扑克数据
};

//出牌结果
struct tagOutCardResult
{
    BYTE                            cbCardCount;                        //扑克数目
    BYTE                            cbResultCard;            //结果扑克
};

//分布信息
struct tagDistributing
{
    BYTE                            cbCardCount;                        //扑克数目
    BYTE                            cbDistributing;                //分布信息
};

#define MAX_TYPE_COUNT 254
struct tagOutCardTypeResult
{
    BYTE                            cbCardType;                            //扑克类型
    BYTE                            cbCardTypeCount;                  //牌型数目
    BYTE                            cbEachHandCardCount;//每手个数
    BYTE                            cbCardData;//扑克数据
};

//////////////////////////////////////////////////////////////////////////

//游戏逻辑类
class CGameLogic
{
    //变量定义
protected:
    static const BYTE                m_cbCardData;            //扑克数据

    //AI变量
public:
    static const BYTE                m_cbGoodcardData;    //好牌数据
    BYTE                            m_cbAllCardData;//所有扑克
    BYTE                            m_cbLandScoreCardData;    //叫牌扑克
    BYTE                            m_cbUserCardCount;      //扑克数目
    WORD                            m_wBankerUser;                        //地主玩家

    //函数定义
public:
    //构造函数
    CGameLogic();
    //析构函数
    virtual ~CGameLogic();

    //类型函数
public:
    //获取类型
    BYTE GetCardType(const BYTE cbCardData[], BYTE cbCardCount);
    //获取数值
    BYTE GetCardValue(BYTE cbCardData) { return cbCardData&MASK_VALUE; }
    //获取花色
    BYTE GetCardColor(BYTE cbCardData) { return cbCardData&MASK_COLOR; }

    //控制函数
public:
    //混乱扑克
    VOID RandCardList(BYTE cbCardBuffer[], BYTE cbBufferCount);
    //排列扑克
    VOID SortCardList(BYTE cbCardData[], BYTE cbCardCount, BYTE cbSortType);
    //删除扑克
    bool RemoveCard(const BYTE cbRemoveCard[], BYTE cbRemoveCount, BYTE cbCardData[], BYTE cbCardCount);

    //逻辑函数
public:
    //有效判断
    bool IsValidCard(BYTE cbCardData);
    //逻辑数值
    BYTE GetCardLogicValue(BYTE cbCardData);
    //对比扑克
    bool CompareCard(const BYTE cbFirstCard[], const BYTE cbNextCard[], BYTE cbFirstCount, BYTE cbNextCount);
    //出牌搜索
    bool SearchOutCard(const BYTE cbHandCardData[], BYTE cbHandCardCount, const BYTE cbTurnCardData[], BYTE cbTurnCardCount, tagOutCardResult & OutCardResult);

    //内部函数
public:
    //构造扑克
    BYTE MakeCardData(BYTE cbValueIndex, BYTE cbColorIndex);
    //分析扑克
    VOID AnalysebCardData(const BYTE cbCardData[], BYTE cbCardCount, tagAnalyseResult & AnalyseResult);
    //分析分布
    VOID AnalysebDistributing(const BYTE cbCardData[], BYTE cbCardCount, tagDistributing & Distributing);



    //////////////////////////////////////////////////////////////////////////
    //AI函数

    //设置函数
public:
    //设置扑克
    VOID SetUserCard(WORD wChairID, BYTE cbCardData[], BYTE cbCardCount) ;
    //设置底牌
    VOID SetBackCard(WORD wChairID, BYTE cbBackCardData[], BYTE cbCardCount) ;
    //设置庄家
    VOID SetBanker(WORD wBanker) ;
    //叫牌扑克
    VOID SetLandScoreCardData(BYTE cbCardData[], BYTE cbCardCount) ;
    //删除扑克
    VOID RemoveUserCardData(WORD wChairID, BYTE cbRemoveCardData[], BYTE cbRemoveCardCount) ;

    //辅助函数
public:
    //组合算法
    VOID Combination(BYTE cbCombineCardData[], BYTE cbResComLen,BYTE cbResultCardData, BYTE &cbResCardLen,BYTE cbSrcCardData[] , BYTE cbCombineLen1, BYTE cbSrcLen, const BYTE cbCombineLen2);
    //排列算法
    VOID Permutation(BYTE *list, INT m, INT n, BYTE result[], BYTE &len) ;
    //分析炸弹
    VOID GetAllBomCard(BYTE const cbHandCardData[], BYTE const cbHandCardCount, BYTE cbBomCardData[], BYTE &cbBomCardCount);
    //分析顺子
    VOID GetAllLineCard(BYTE const cbHandCardData[], BYTE const cbHandCardCount, BYTE cbLineCardData[], BYTE &cbLineCardCount);
    //分析三条
    VOID GetAllThreeCard(BYTE const cbHandCardData[], BYTE const cbHandCardCount, BYTE cbThreeCardData[], BYTE &cbThreeCardCount);
    //分析对子
    VOID GetAllDoubleCard(BYTE const cbHandCardData[], BYTE const cbHandCardCount, BYTE cbDoubleCardData[], BYTE &cbDoubleCardCount);
    //分析单牌
    VOID GetAllSingleCard(BYTE const cbHandCardData[], BYTE const cbHandCardCount, BYTE cbSingleCardData[], BYTE &cbSingleCardCount);

    //主要函数
public:
    //分析牌型(后出牌调用)
    VOID AnalyseOutCardType(BYTE const cbHandCardData[], BYTE const cbHandCardCount, BYTE const cbTurnCardData[], BYTE const cbTurnCardCount, tagOutCardTypeResult CardTypeResult);
    //分析牌牌(先出牌调用)
    VOID AnalyseOutCardType(BYTE const cbHandCardData[], BYTE const cbHandCardCount, tagOutCardTypeResult CardTypeResult);
    //单牌个数
    BYTE AnalyseSinleCardCount(BYTE const cbHandCardData[], BYTE const cbHandCardCount, BYTE const cbWantOutCardData[], BYTE const cbWantOutCardCount, BYTE cbSingleCardData[]=NULL);

    //出牌函数
public:
    //地主出牌(先出牌)
    VOID BankerOutCard(const BYTE cbHandCardData[], BYTE cbHandCardCount, tagOutCardResult & OutCardResult) ;
    //地主出牌(后出牌)
    VOID BankerOutCard(const BYTE cbHandCardData[], BYTE cbHandCardCount, WORD wOutCardUser, const BYTE cbTurnCardData[], BYTE cbTurnCardCount, tagOutCardResult & OutCardResult) ;
    //地主上家(先出牌)
    VOID UpsideOfBankerOutCard(const BYTE cbHandCardData[], BYTE cbHandCardCount, WORD wMeChairID,tagOutCardResult & OutCardResult) ;
    //地主上家(后出牌)
    VOID UpsideOfBankerOutCard(const BYTE cbHandCardData[], BYTE cbHandCardCount, WORD wOutCardUser,const BYTE cbTurnCardData[], BYTE cbTurnCardCount, tagOutCardResult & OutCardResult) ;
    //地主下家(先出牌)
    VOID UndersideOfBankerOutCard(const BYTE cbHandCardData[], BYTE cbHandCardCount, WORD wMeChairID,tagOutCardResult & OutCardResult) ;
    //地主下家(后出牌)
    VOID UndersideOfBankerOutCard(const BYTE cbHandCardData[], BYTE cbHandCardCount, WORD wOutCardUser, const BYTE cbTurnCardData[], BYTE cbTurnCardCount, tagOutCardResult & OutCardResult) ;
    //出牌搜索
    bool SearchOutCard(const BYTE cbHandCardData[], BYTE cbHandCardCount, const BYTE cbTurnCardData[], BYTE cbTurnCardCount, WORD wOutCardUser, WORD wMeChairID, tagOutCardResult & OutCardResult);

    //叫分函数
public:
    //叫分判断
    BYTE LandScore(WORD wMeChairID, BYTE cbCurrentLandScore) ;

};

//////////////////////////////////////////////////////////////////////////

#endif
页: [1]
查看完整版本: 欢乐斗地主【源码】