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

📄 everyman.cpp

📁 一个麻将程序。我的。
💻 CPP
📖 第 1 页 / 共 3 页
字号:
#include "everyman.h"
#include "unit1.h"

player::player()
{
    setbeginpos(153,467);
}    //修改此处需再修改resetbegin()

bool player::cangang()const
{
    mjpai mj[13];
    int mjs;

    for(int i=0;i<zuhand.getcount();i++)
        mj[i]=zuhand.getmj(i);

    mjs=Form1->mjots.getnewest();
    return (::pengandgang(mj,zuhand.getcount(),mjs)==2)?true:false;
}

bool player::canpeng()const
{

    mjpai mj[13];
    int mjs;

    for(int i=0;i<zuhand.getcount();i++)
        mj[i]=zuhand.getmj(i);

    mjs=Form1->mjots.getnewest();
    return (::pengandgang(mj,zuhand.getcount(),mjs)>=1)?true:false;
}
bool player::canbugang()const
{
    int i,j,s;
    int mja[14];

    i=zushowed.findke(painewget);
    if(i!=100) return true;

    for(i=0;i<zuhand.getcount();i++)
    {
        mja[i]=zuhand.getmj(i);
        if(zushowed.findke(mja[i])!=100)
            return true;
    }

    mja[i]=painewget;

    for(i=0;i<zuhand.getcount()+1;i++)
    {
        s=0;
        for(j=i+1;j<zuhand.getcount()+1;j++)
            if(mja[i]==mja[j]) s++;
        if(s==3)
            break;
    }

    if(i!=zuhand.getcount()+1)
        return true;
    return false;
}
bool player::canting(int index)const
{   //此时 painewget已经有牌,且参数表示用户选择准备出的牌(i=50未为painewget),

//除去这张,判断是否听
    mjpai mj[14];

    int c=zuhand.getcount();
    assert(index<c||index==50);
    int i;
    if(index!=50)
    {
        for(i=0;i<c;i++)
            mj[i]=(mjpai)zuhand.getmj(i);
        mj[index]=painewget;
    }
    else
        for(i=0;i<c;i++)
            mj[i]=zuhand.getmj(i);

    for(i=mjpai::wan1;i<=mjpai::wan9;i++)
        if(::hu(mj,c,i)) return true;

    for(i=mjpai::tiao1;i<=mjpai::tiao9;i++)
        if(::hu(mj,c,i)) return true;

    for(i=mjpai::bing1;i<=mjpai::bing9;i++)
        if(::hu(mj,c,i)) return true;

    if(::hu(mj,c,mjpai::zhong)) return true;
    if(::hu(mj,c,mjpai::bai)) return true;

    return false;

}
bool player::canhu(bool iszimo)const
{
    player tempplayer;

    tempplayer=* const_cast<player*>(this);

    if(!iszimo) //不是自摸,则到桌上取别人刚出的牌
    {
        mjpai mj=Form1->mjots.getnewest();

        tempplayer.painewget=mj;
    }

    if(!tempplayer.hu()) return false;

    if(iszimo) return true;

    if(zushowed.getkuaicount()==0) return true;
    if(tempplayer.fa()||tempplayer.zimingke()||tempplayer.zianke()||
        tempplayer.ziminggang()||tempplayer.ziangang()||tempplayer.minggang()||
        tempplayer.angang())
        return true;

    if(tempplayer.hunyise()||tempplayer.pengpenghu()||tempplayer.qidui()||tempplayer.yitiaolong())
        return true;

    return false;
    //碰了以后若无发、字刻、杠:普通和只能自摸,大和(碰碰和、清一色、混一色、七对)可以炮、摸
}

TRect player::picrect(mjpai mj) const
{
    if(mj>=11&&mj<=19)
        return Rect((mj-11)*25,0,24+(mj-11)*25,34);
    else if(mj>=31&&mj<=39)
        return Rect((mj-31)*25,35,24+(mj-31)*25,69);
    else if(mj>=51&&mj<=59)
        return Rect((mj-51)*25,70,24+(mj-51)*25,104);
    else if(mj==91)
        return Rect(0,105,24,139);
    else if(mj==81)
        return Rect(25,105,49,139);
    else if(mj==71)
        return Rect(50,105,74,139);
    else if(mj==100)
        return Rect(175,105,199,139);


    return Rect(0,0,0,0);
}
void player::draw(int image)const
{
    int showedcount,handcount;

    TCanvas *imming,*iman;

    showedcount=zushowed.getkuaicount();
    handcount=zuhand.getcount();
       switch(image)
        {
        case 1:
            imming=Form1->imdownming1o->Canvas;
            iman=Form1->imdownan1o->Canvas;
            break;
        case 2:
            imming=Form1->imdownming2o->Canvas;
            iman=Form1->imdownan2o->Canvas;
            break;
        }

        int i; int current=beginx,c=0,j;

        for(i=0;i<showedcount;i++)
            if(zushowed.iske(i)||zushowed.isshun(i))
            {
                for(j=0;j<3;j++)
                {
                    mjpai mj;
                    mj=zushowed.getmj(c++);
                    Form1->PaintBox1->Canvas->CopyRect(Rect(current,beginy,current+24,beginy+34),
                        imming, picrect(mj));
                    current+=25;
                }
                current +=5;
            }
            else if(zushowed.isgang(i))
            {
                for(j=0;j<4;j++)
                {
                    mjpai mj;
                    mj=zushowed.getmj(c++);
                    if(zushowed.isgang(i)==1)//明杠
                        if(j==2)
                            Form1->PaintBox1->Canvas->CopyRect(Rect(current,beginy-13,current+24,beginy+34-13),
                                imming, picrect(mj));
                        else
                            Form1->PaintBox1->Canvas->CopyRect(Rect(current,beginy,current+24,beginy+34),
                                imming, picrect(mj));
                    else
                        if(j==2)
                            Form1->PaintBox1->Canvas->CopyRect(Rect(current,beginy-13,current+24,beginy+34-13),
                                imming, picrect(mj));
                        else
                            Form1->PaintBox1->Canvas->CopyRect(Rect(current,beginy,current+24,beginy+34),
                                imming, picrect(100));
                    if(j!=1)
                        current+=25;

                }
                current +=5;
            }
            else if(zushowed.whatcolor(i)==5)
            {
                    mjpai mj;
                    mj=zushowed.getmj(c++);
                    Form1->PaintBox1->Canvas->CopyRect(Rect(current,beginy,current+24,beginy+34),
                        imming, picrect(mj));
                    current+=25;

                    current+=5;
            }
        //current +=15;

        for(i=0;i<handcount;i++)
        {
            mjpai mj;
            mj=zuhand.getmj(i);
            Form1->PaintBox1->Canvas->CopyRect(Rect(current,
                beginy-5,current+24,beginy+34-5), iman,
                picrect(mj));
            current+=25;

        }
        current+=5;

        if(painewget!=0)
            Form1->PaintBox1->Canvas->CopyRect(Rect(current,
                beginy-5,current+24,beginy+34-5), iman,
                picrect(painewget));
}


void player::select(int s,int image)
{
    int c=zushowed.getkuaicount();

    int sum=0;int i;
    for(i=0;i<c;i++)
    {
        if(zushowed.iske(i)||zushowed.isshun(i)||zushowed.isgang(i))
            sum+=3*25;
        else
            sum+=25;

        sum+=5;
    }

    int x=beginx+sum;
    int x2=x+zuhand.getcount()*25;


    TImage *iman;
    switch(image)
        {
        case 1:
            iman=Form1->imdownan1o;
            break;
        case 2:
            iman=Form1->imdownan2o;
            break;
    }
    if(selected!=100)
        if(selected==50){
            Form1->PaintBox1->Canvas->FillRect(Rect(x2+5,457,x2+5+24,457+34+5));
            Form1->PaintBox1->Canvas->CopyRect(Rect(x2+5,457+5,x2+5+24,457+34+5),
                iman->Canvas,picrect(painewget));
        }
        else{
            Form1->PaintBox1->Canvas->FillRect(Rect(x+25*selected,457,x+25*selected+24,457+34+5));
            Form1->PaintBox1->Canvas->CopyRect(Rect(x+25*selected,457+5,x+25*selected+24,457+34+5),
                iman->Canvas,picrect(zuhand.getmj(selected)));
        }

    selected=s;

    if(selected==50){
        Form1->PaintBox1->Canvas->FillRect(Rect(x2+5,457,x2+5+24,457+34+5));
        Form1->PaintBox1->Canvas->CopyRect(Rect(x2+5,457,x2+5+24,457+34),
            iman->Canvas,picrect(painewget));
    }
    else{
        Form1->PaintBox1->Canvas->FillRect(Rect(x+25*selected,457,x+25*selected+24,457+34+5));
        Form1->PaintBox1->Canvas->CopyRect(Rect(x+25*selected,457,x+25*selected+24,457+34),
            iman->Canvas,picrect(zuhand.getmj(selected)));
    }

}


void player::chu()
{
    if(selected==50)
        Form1->mjots.insertmjdown(painewget);
    else
    {
        Form1->mjots.insertmjdown(zuhand.takemj(selected));
        zuhand.insertmj(painewget);
        sort();
    }
    painewget=0;

    selected=100;


}

 void player::sort(){

    zuhand.sort();
 }
 void player::sortall(){
    mjpai mja[14];
    int c;
    c=zuhand.getcount();
    for (int i=0;i<c;i++)
        mja[i]=zuhand.getmj(i);
    assert(painewget);
    mja[c]=painewget;

    mishel(mja,c+1);

    zuhand.clear();
    for (int i=0;i<c;i++)
        zuhand.insertmj(mja[i]);

    painewget=mja[c];

    //zuhand.sort();
 }
//------------------------------------------------

TRect computerright::picrect(mjpai mj) const
{
    if(mj>=11&&mj<=19)
        return Rect(0,(19-mj)*25,35,(19-mj)*25+24);
    else if(mj>=31&&mj<=39)
        return Rect(35,(39-mj)*25,70,(39-mj)*25+24);
    else if(mj>=51&&mj<=59)
        return Rect(70,(59-mj)*25,105,(59-mj)*25+24);
    else if(mj==91)
        return Rect(35*3,25*4,35*4,25*5);
    else if(mj==81)
        return Rect(35*3,25*3,35*4,25*4);
    else if(mj==71)
        return Rect(35*3,25*2,35*4,25*3);
    else if(mj==100)
        return Rect(35*3,25*1,35*4,25*2);
    else if(mj==200)
        return Rect(78,110,89,135);
    return Rect(0,0,0,0);
}

void computerright::draw(int image)const
{
    int showedcount,handcount;

    TImage *imming,*iman;

    showedcount=zushowed.getkuaicount();
    handcount=zuhand.getcount();



    switch(image)
    {
        case 1:
            imming=Form1->imright1;
            iman=Form1->imdownan1o;//imleft1;
            break;
        case 2:
            imming=Form1->imright2;
            iman=Form1->imdownan2o;
            break;
    }
        
    int i; int current=beginy,c=0,j;

    for(i=0;i<showedcount;i++)
            if(zushowed.iske(i)||zushowed.isshun(i))
            {
                for(j=0;j<3;j++)
                {
                    mjpai mj;
                    mj=zushowed.getmj(c++);
                    Form1->PaintBox1->Canvas->CopyRect(Rect(beginx,current,beginx+34,current+24),
                        imming->Canvas, picrect(mj));
                    current-=25;
                }
                current -=5;
            }
            else if(zushowed.isgang(i))
            {
                for(j=0;j<4;j++)
                {
                    //mage *temp=isgang(i)==1?
                    mjpai mj;
                    mj=zushowed.getmj(c++);
                    if(zushowed.isgang(i)==1)//明杠
                        if(j==2)
                            Form1->PaintBox1->Canvas->CopyRect(Rect(beginx+13,current,beginx+34+13,
                                current+24),imming->Canvas, picrect(mj));
                        else
                            Form1->PaintBox1->Canvas->CopyRect(Rect(beginx,current,beginx+34,
                            current+24),imming->Canvas, picrect(mj));
                    else
                        if(j==2)
                            Form1->PaintBox1->Canvas->CopyRect(Rect(beginx+13,current,beginx+34+13,current+24),
                                imming->Canvas, picrect(100));
                        else
                            Form1->PaintBox1->Canvas->CopyRect(Rect(beginx,current,beginx+34,current+24),
                                imming->Canvas, picrect(100));
                    if(j!=1)
                        current-=25;

                }
                current -=5;
            }
            else if(zushowed.whatcolor(i)==5)
            {
                    mjpai mj;
                    mj=zushowed.getmj(c++);
                    Form1->PaintBox1->Canvas->CopyRect(Rect(beginx,current,beginx+34,current+24),
                        imming->Canvas, picrect(mj));
                    current-=25;

                    current-=5;
            }
        //current +=15;

    for(i=0;i<handcount;i++)
        {
            mjpai mj;
            mj=zuhand.getmj(i);
            Form1->PaintBox1->Canvas->CopyRect(Rect(beginx+24,current,beginx+10+24,current+24),
/*         #ifndef NVIEWMAN
                imming->Canvas ,picrect(mj));
         #else   */
                iman->Canvas,picrect(200));//test
    //     #endif
            current-=25;

        }
    current-=5;

    if(painewget!=0)
        Form1->PaintBox1->Canvas->CopyRect(Rect(beginx+24,current,beginx+10+24,current+24),
/*         #ifndef NVIEWMAN
                imming->Canvas ,picrect(painewget));
         #else   */
                iman->Canvas,picrect(200));//test
    //     #endif

⌨️ 快捷键说明

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