当前位置:编程学习 > C/C++ >>

C++麻将游戏算法深入解析

            C++麻将游戏算法深入解析
 
 
      这两天为了工具箱的完善,整理了这些年引擎开发的一些资料,无意中发现06年写的一个麻将算法,编译运行了一下,还是有点意思的,拿出来整理一下分享给大家。
 
       麻将是一种大家最喜爱的娱乐活动之一,相信所有人都有接触过。我写的这版算法,是可以吃,碰,杠,还有把牌摸完没有人胡时的皇庄和包听。是用控制台方式来表现的,什么?控制台?
       对,因为是算法的设计,所以用控制台来表现当然最简单了。
 
      当然,在交互时要用文字输入会有少许不便,不过这种形式的游戏可是图形游戏的鼻祖哦~
 
     好,废话不多说了,来说一下设计思路:
 
     对于麻将的一个玩家,都有一个牌墙的管理,这里封装了一副牌墙的各种算法,这个类我命名为CMJ。
     另外还有一个洗牌类,负责洗牌和发牌。这个类为CMJManage。
 
     我们先来看一下CMJ类。
CMJ.h:
 
[cpp]  
#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();  
补充:软件开发 , C++ ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,