麻将游戏算法深入理会及实当代码
发布时间:2020-12-31 21:47:41 所属栏目:创业 来源:网络整理
导读:麻将游戏算法深入理会及实当代码 这两天为了器材箱的完美,清算了这些年引擎开拓的一些资料,有时中发明06年写的一个麻将算法,编译运行了一下,照旧有点意思的,拿出来清算一下分享给各人。 麻将是一种各人最喜欢的娱乐勾当之一,信托全部人都有打仗过。我
副问题[/!--empirenews.page--]
麻将游戏算法深入理会及实当代码 这两天为了器材箱的完美,清算了这些年引擎开拓的一些资料,有时中发明06年写的一个麻将算法,编译运行了一下,照旧有点意思的,拿出来清算一下分享给各人。 麻将是一种各人最喜欢的娱乐勾当之一,信托全部人都有打仗过。我写的这版算法,是可以吃,碰,杠,尚有把牌摸完没有人胡时的皇庄和包听。是用节制台方法来示意的,什么?节制台? 对,由于是算法的计划,以是用节制台来示意虽然最简朴了。 虽然,在交互时要用笔墨输入会有少许未便,不外这种情势的游戏然则图形游戏的鼻祖哦~ 好,空话不多说了,来说一下计划思绪: 对付麻将的一个玩家,都有一个牌墙的打点,这里封装了一副牌墙的各类算法,这个类我定名为CMJ。 其它尚有一个洗牌类,认真洗牌和发牌。这个类为CMJManage。 我们先来看一下CMJ类。 CMJ.h: #ifndef _CMJ_H #define _CMJ_H //============================================ //Author:Honghaier //Date:2006-12-20 //QQ:285421210 //============================================ #include <windows.h> #include <iostream> #include <vector> #include <algorithm> using namespace std; #define MJPAI_ZFB 0 //中,发,白 #define MJPAI_FENG 1 //对象南冬风 #define MJPAI_WAN 2 //万 #define MJPAI_TIAO 3 //条 #define MJPAI_BING 4 //饼 #define MJPAI_HUA 5 //花 #define MJPAI_GETPAI true //起牌 #define MJPAI_PUTPAI false //打牌 //节点信息 struct stPAI { int m_Type; //牌范例 int m_Value; //牌字 } ; //吃牌顺 struct stCHI { int m_Type; //牌范例 int m_Value1; //牌字 int m_Value2; //牌字 int m_Value3; //牌字 } ; // m_Type m_Value //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-// // 0 | 中 1 发2 白 // | // 1 | 东 1 西2 南 北 // | // 2 | 一万 二万 …… 九万 // | // 3 | 一条 二条 …… 九条 // | // 4 | 一饼 二饼 …… 九饼 // | // 5 | 春 夏 秋 东 竹 兰 梅 菊 // | //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-// //胡牌信息 struct stGoodInfo { char m_GoodName[100]; //胡牌术语 int m_GoodValue; //胡牌番数 } ; //牌 class CMJ { vector< int > m_MyPAIVec[6]; //起的种牌型 vector< int > m_ChiPAIVec[6]; //吃的种牌型 vector< int > m_PengPAIVec[6]; //碰的种牌型 vector< int > m_GangPAIVec[6]; //杠的种牌型 stPAI m_LastPAI; //最后起的牌 stGoodInfo m_GoodInfo; //胡牌信息 bool m_9LBD; //是否听连宝灯牌型 bool m_13Y; //是否听十三幺 int m_MKNum; //明刻数 int m_AKNum; //暗刻数 bool m_4AK; //是否是听四暗刻 vector< stCHI > m_TempChiPAIVec; //吃的可选组合 vector< stPAI > m_TempPengPAIVec; //碰的可选组合 vector< stPAI > m_TempGangPAIVec; //杠的可选组合 public: //结构 CMJ(); //析构 ~CMJ(); //初始化 void Init(); //起牌 bool AddPai(int p_Type,int p_Value); //取得对应的牌在牌墙的索引 int GetPaiIndex(int p_Type,int p_Value); //打牌(参数为对应的牌在牌墙的索引) bool DelPai(int PaiIndex); //删除牌 bool DelPai(int p_Type,int p_Value); //清空牌 void CleanUp(); //取得胡牌信息 stGoodInfo *GetInfo(); //检测是否胡牌 bool CheckAllPai(bool GetOrPut); //对全部的牌举办输出 void PrintAllPai(); //对一张牌举办输出 void PrintPai(int p_Type,int p_Value); //吃牌 bool CheckChiPai(int p_Type,int p_Value); //吃牌 bool DoChiPai(int p_iIndex,int p_Type,int p_Value); //碰牌 bool CheckPengPai(int p_Type,int p_Value); //碰牌 bool DoPengPai(int p_Type,int p_Value); //杠牌 bool CheckGangPai(int p_Type,int p_Value); //杠牌 bool DoGangPai(int p_Type,int p_Value); //对可吃的组合举办输出 void PrintChiChosePai(); //对可碰的组合举办输出 void PrintPengChosePai(); //对可杠的组合举办输出 void PrintGangChosePai(); //取得吃牌组合数 UINT GetChiChoseNum(); private: //检测是否胡牌(张) bool CheckAAPai(int iValue1,int iValue2); //检测是否三连张 bool CheckABCPai(int iValue1,int iValue2,int iValu3); //检测是否三重张 bool CheckAAAPai(int iValue1,int iValu3); //检测是否四重张 bool CheckAAAAPai(int iValue1,int iValu3,int iValue4); //检测是否三连对 bool CheckAABBCCPai(int iValue1,int iValue3,int iValue4,int iValue5,int iValue6); //检测是否三连高压 bool CheckAAABBBCCCPai(int iValue1,int iValue6,int iValue7,int iValue8,int iValue9); //检测是否三连刻 bool CheckAAAABBBBCCCCPai(int iValue1,int iValue9,int iValue10,int iValue11,int iValue12); //检测是否六连对 bool CheckAABBCCDDEEFFPai(int iValue1,int iValue12); //带将牌检测=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= //检测是否胡牌(张) bool Check5Pai(int iValue1,int iValue5); //检测是否胡牌(张) bool Check8Pai(int iValue1,int iValue8); //检测是否胡牌(张) bool Check11Pai(int iValue1,int iValue11); //检测是否胡牌(张) bool Check14Pai(int iValue1,int iValue12,int iValue13,int iValue14); //不带将牌检测-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= //检测是否胡牌(张) bool Check3Pai(int iValue1,int iValue3); //检测是否胡牌(张) bool Check6Pai(int iValue1,int iValue6); //检测是否胡牌(张) bool Check9Pai(int iValue1,int iValue9); //检测是否胡牌(张) bool Check12Pai(int iValue1,int iValue12); private: //胡牌判定 //检测是否胡大四喜 bool CheckD4X_HU(); //检则是否胡大三元 bool CheckD3Y_HU(); //检测是否胡绿一色 bool CheckL1S_HU(); //检测是否胡九莲宝灯 bool Check9LBD_HU(); //检测是否胡四杠 bool Check4Gang_HU(); //检测是否胡连七对 bool CheckL7D_HU(); //检测是否胡十三幺 bool Chekc13Y_HU(); //检测是否胡清幺九 bool CheckQY9_HU(); //检测是否胡小四喜 bool CheckX4X_HU(); //检测是否胡小三元 bool CheckX3Y_HU(); //检测是否胡字一色 bool CheckZ1S_HU(); //检测是否四暗刻 bool Check4AK_HU(); //检测是否一色双龙会 bool Check1S2LH_HU(); //检测是否一色四同顺 bool Check1S4TS_HU(); //检测是否一色四节高? bool Check1S4JG_HU(); //检测是否一色四步高? bool Check1S4BG_HU(); //检测是否三杠 bool Check3Gang_HU(); //检测是否混幺九 bool CheckHY9_HU(); //检测是否七对 bool Check7D_HU(); //检测是否七星不靠 bool Check7XBK_HU(); //检测是否全双刻? bool CheckQSK_HU(); //清一色 bool CheckQ1S_HU(); //检测是否一色三同顺 bool Check1S3TS_HU(); //检测是否一色三节高 bool Check1S3JG_HU(); //检测是否全大 bool CheckQD_HU(); //检测是否全中 bool CheckQZ_HU(); //检测是否全小 bool CheckQX_HU(); //检测是否青龙 bool CheckQL_HU(); //检测是否三色双龙会 bool Check3S2LH_HU(); //检测是否一色三步高 bool Check1S3BG_HU(); //全带五 bool CheckQD5_HU(); //三同刻 bool Check3TK_HU(); //三暗刻 bool Check3AK_HU(); //单钓将 bool CheckDDJ_HU(); //检测胡 bool CheckHU(); private: //听牌判定 //检测是否听九莲宝灯 bool Check9LBD_TING(); //检测是否听十三幺 bool Check13Y_TING(); //检测是否听四暗刻 bool Check4AK_TING(); //检测是否听牌 bool CheckTING(); } ; #endif (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |