⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 man.h

📁 一个麻将程序。我的。
💻 H
字号:
#ifndef manH
#define manH


#include "mjpai.h"
#include "mjpaizu.h"
#include "mjpaikuaizu.h"
#include "huform.h"
//2003.2-4 九江麻将 ---张浩
//
//man 类的头文件
//man为电脑类和玩家类的父类
//
//
//
//
class man
{
protected:
    mjpaikuaizu zushowed;
    mjpaizu zuhand;
    mjpai painewget; //无牌在此位 为0

    int beginx,beginy; //起始作图位置
        //右边电脑为 最下方一子的左上角
        //上边    最右边一子左上角
        //...

    bool isting;//已经听牌了
    bool fainhandhavedetected;//zuhand中的发只检测一次,如果检测过,就为真,下次
    //摸,碰,杠,补杠时就不再检测了


    mjpai discard();//电脑选择出那一张牌
    void setbeginpos(int bx,int by){beginx=bx;beginy=by;}



    enum {yise,pengpeng,dui,nothing} wantto; //几个大的方向,在discard函数中
    enum {wan,tiao,bing} se;

    int numofdui()const;//对的个数
    int numofse(int c)const;//1色的个数  enum {wan,tiao,bing}
    mjpaizu yise_(const mjpai * mj,int c,mjpai newget)const;
    mjpaizu dui_(const mjpai * mj,int c,mjpai newget)const;
    mjpaizu pengpeng_(const mjpai * mj,int c,mjpai newget)const;
    //返回几张可以出的牌,(取出个数为1的,如果没有就个数为2......)

public:
    man(){painewget=0;isting=false;wantto=nothing;isting=false;}

    virtual void resetbegin()=0; //根据麻将数重新排列,draw前要用
    virtual void draw(int image)const=0;
    virtual TRect picrect(mjpai mj)const=0;//返回麻将在图片中的位置

    void clear()
        {zushowed.clear();zuhand.clear();painewget=0;isting=false;
        wantto=nothing;fainhandhavedetected=false;}

    void insertmj(mjpai mj); //用于一开始分牌的时候,在zuhand中插入
                           //返回0如果插入发
    int getcount()const{return zushowed.getcount()+zuhand.getcount()+((painewget==0)?0:1);}

    bool wanttopeng()const;  //player不用此3函数
    bool wanttogang()const;  //想不想碰,杠? 到mjontableshowed取最新一张判断
    bool wanttobugang()const;//把painewget放到zushowed的刻里,或者将手上4张放到刻里,再摸一张
    bool wanttohu(bool iszimo);//询问要不要和,

    void peng();  //碰杠的动作,到mjontableshowed和mjontable取牌
    void gang();
    void bugang();

    virtual void chu()=0;//出牌
    bool mo();//摸牌,返回值表示有没有改变位置,即有没有补过发财



    //------------------------------------------------------和牌后使用的函数
    bool hu()const;//胡了?
    //看牌是否成胡牌牌型,手上3n+1张,摸1张
    //包括七对.不检测牌数是否为14,如果不为14,则不会检测七对
    //
    bool duting()const;//独听?//手上3n+1张
    int pengpenghu()const;//碰碰和?  潇洒 返回2
    bool qingyise()const;//清一色?   不记混一色
    bool hunyise()const;//混一色?  包括清一色,可以先用清一色检测一下,不是,再用混一色
    //检测,确保是混一色
    int qidui()const;//七对?
                                                //非门清及非七对返回0,七对返回1
                                                //一个潇洒+100  一个豪华+10
                                                //如 豪华七对 11  双豪华 21
                                                //   七对 1     双潇洒 201
                                                //须保证 相同牌最多4张
                                                //计算潇洒时已经排序,但为动过pmj_arr
    bool yitiaolong()const;//一条龙
    int  hongqipiaopiao()const;//红旗飘飘,应确保和,明1,暗2,无0     不记字刻
    bool menqing()const;//门清?
    int fa()const;//发?  程序中应保证每次摸到发,自动放到showed里
    int zimingke()const;//字明刻? 红旗飘飘则不记
    int zianke()const;//字暗刻?  红旗飘飘则不记
    int ziminggang()const;//字明杠?
    int ziangang()const;//字暗杠?
    int minggang()const;//普通明杠?
    int angang()const;//普通暗杠?


    //=-----------------------------------



    void sort(){zuhand.sort();};//test
    friend class TForm1;
    friend class Thupai;
};



#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -