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

📄 everyman.cpp

📁 一个麻将程序。我的。
💻 CPP
📖 第 1 页 / 共 3 页
字号:


}


//------------------------------------------------

TRect computerup::picrect(mjpai mj) const
{
    if(mj>=11&&mj<=19)
        return Rect((19-mj)*25,35*3,(19-mj)*25+25,35*4);
    else if(mj>=31&&mj<=39)
        return Rect((39-mj)*25,35*2,(39-mj)*25+25,35*3);
    else if(mj>=51&&mj<=59)
        return Rect((59-mj)*25,35*1,(59-mj)*25+25,35*2);
    else if(mj==91)
        return Rect(25*4,0,25*5,35);
    else if(mj==81)
        return Rect(25*3,0,25*4,35);
    else if(mj==71)
        return Rect(25*2,0,25*3,35);
    else if(mj==100)
        return Rect(25*1,0,25*2,35);
    else if(mj==200)
        return Rect(90,110,115,121);
    return Rect(0,0,0,0);    
}

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

    TCanvas *imming,*iman;

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



    switch(image)
    {
        case 1:
            imming=Form1->imup1->Canvas;
            iman=Form1->imdownan1o->Canvas;
            break;
        case 2:
            imming=Form1->imup2->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++)
                {
                    //mage *temp=isgang(i)==1?
                    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(100));
                        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,current+24,beginy+10),
/*         #ifndef NVIEWMAN
                imming ,picrect(mj));
         #else  */
                iman,picrect(200));//test
        // #endif
            current-=25;

        }
    current-=5;

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

  //030325换联众图片
}

//------------------------------------------------

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

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

    TImage *imming,*iman;

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



    switch(image)
    {
        case 1:
            imming=Form1->imleft1;
            iman=Form1->imdownan1o;
            break;
        case 2:
            imming=Form1->imleft2;
            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,current,beginx+10,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,current,beginx+10,current+24),
 /*        #ifndef NVIEWMAN
                imming->Canvas ,picrect(painewget));
         #else  */
                iman->Canvas,picrect(200));//test
    //     #endif

}


//---------------------------
TRect mjontable::picrect(int direct,int color)const
{
    assert(direct>0&&direct<3&& color>0&&color<3);

     if(direct==1&&color==1)
        return Rect(0,0,19,15);
     else if(direct==2&&color==1)
        return Rect(19,0,34,19);
     else if(direct==1&&color==2)
        return Rect(15,19,34,34);
     else if(direct==2&&color==2)
        return Rect(0,15,15,34);

     return Rect(0,0,0,0);
}

void mjontable::reset()    //插入120张牌
{
    int i,j;
    clear();
    for(i=mjpai::wan1;i<=mjpai::wan9;i++)
        for(j=0;j<4;j++)
            mjpaizu::insertmj(i);
    for(i=mjpai::tiao1;i<=mjpai::tiao9;i++)
        for(j=0;j<4;j++)
            mjpaizu::insertmj(i);
    for(i=mjpai::bing1;i<=mjpai::bing9;i++)
        for(j=0;j<4;j++)
            mjpaizu::insertmj(i);
    for(i=mjpai::zhong;i<=mjpai::bai;i+=10)
        for(j=0;j<4;j++)
            mjpaizu::insertmj(i);

    takenfromhead=takenfromtail=0;
}

void mjontable::wash()   //洗牌
{
    assert(mjpaizu::getcount()==120);
    randomize();

    int i;
    int r=random(120);

    for(i=0;i<r;i++)        //先取出头上random张放到尾部
        mjpaizu::insertmj(mjpaizu::takemj(0));
    for(i=0;i<480;i++)
    {
        r=random(120);      //再取第random张放到尾部,做480次
        mjpaizu::insertmj(mjpaizu::takemj(random(2)?r:(119-r)));
    }

}

void mjontable::setfirst(int pos,int num) //设置第一张牌从哪里取
{
    assert(num%2==0);
    firstpos=pos;
    firstpai=num;

}

void mjontable::drawonedirect(int image,int from,int to,int direct)const
{
    assert(from>=0&&to<30&&to>=from);
    int i,head,tail,length,lengthup,begin,beginup;

        head=from/2;
        tail=(30-to-1)/2;

        length=15-head-tail;

        lengthup=(from%2)?(length-1):length;
        lengthup=((to+1)%2)?(lengthup-1):lengthup;

        begin=head;
        beginup=begin+from%2;

    switch(direct)
    {
    case down:
        for(i=0;i<length;i++)
            Form1->PaintBox1->Canvas->CopyRect(Rect(bxdown-(i+begin)*15,bydown,bxdown-(i+begin)*15+15,bydown+19),
                Form1->imgai->Canvas, picrect(2,image));
        for(i=0;i<lengthup;i++)
            Form1->PaintBox1->Canvas->CopyRect(Rect(bxdown-(i+beginup)*15+2,bydown-2,bxdown-(i+beginup)*15+15+2,bydown+19-2),
                Form1->imgai->Canvas, picrect(2,image));
        break;
    case up:
        for(i=0;i<length;i++)
            Form1->PaintBox1->Canvas->CopyRect(Rect(bxup+(i+begin)*15,byup,bxup+(i+begin)*15+15,byup+19),
                Form1->imgai->Canvas, picrect(2,image));
        for(i=0;i<lengthup;i++)
            Form1->PaintBox1->Canvas->CopyRect(Rect(bxup+(i+beginup)*15+2,byup-2,bxup+(i+beginup)*15+15+2,byup+19-2),
                Form1->imgai->Canvas, picrect(2,image));
        break;
    case left:
        for(i=0;i<length;i++)
            Form1->PaintBox1->Canvas->CopyRect(Rect(bxleft,byleft-(i+begin)*15,bxleft+19,byleft-(i+begin)*15+15),
                Form1->imgai->Canvas, picrect(1,image));
        for(i=0;i<lengthup;i++)
            Form1->PaintBox1->Canvas->CopyRect(Rect(bxleft+2,byleft-(i+beginup)*15-2,bxleft+19+2,byleft-(i+beginup)*15+15-2),
                Form1->imgai->Canvas, picrect(1,image));
        break;
    case right:
        for(i=0;i<length;i++)
            Form1->PaintBox1->Canvas->CopyRect(Rect(bxright,byright+(i+begin)*15,bxright+19,byright+(i+begin)*15+15),
                Form1->imgai->Canvas, picrect(1,image));
        for(i=0;i<lengthup;i++)
            Form1->PaintBox1->Canvas->CopyRect(Rect(bxright+2,byright+(i+beginup)*15-2,bxright+19+2,byright+(i+beginup)*15+15-2),
                Form1->imgai->Canvas, picrect(1,image));
        break;
    }

}
void mjontable::draw(int image)const
{
    //int count=getcount();

    assert(takenfromhead+takenfromtail<=120);
    int i,j,th,fp,tt;
    int taken[4][2];

    for(i=0;i<4;i++)
        for(j=0;j<2;j++)
            taken[i][j]=0;


    th=takenfromhead;

    th-=30-firstpai;

    fp=(firstpos==3)?0:(firstpos+1);

    while(th>=30)
    {
        th-=30;
        taken[fp][0]=taken[fp][1]=30;
        fp=(fp==3)?0:(fp+1);
    }

     if(th>0)taken[fp][0]=th;
     //-------
     tt=takenfromtail;

     tt-=firstpai;

     fp=(firstpos==0)?3:(firstpos-1);

     while(tt>=30)
    {
        tt-=30;
        taken[fp][0]=taken[fp][1]=30;
        fp=(fp==0)?3:(fp-1);
    }

    if(tt>0)taken[fp][1]=tt;
    //-------以上 得到除了第一方外的3方的麻将堆的被取情况,[0]为顺时针方向取的
    fp=(firstpos==3)?0:(firstpos+1);
    for(i=0;i<3;i++)
    {
        if(taken[fp][0]==30&&taken[fp][1]==30);
        else
            if(taken[fp][0]<=29-taken[fp][1])
                drawonedirect(image,taken[fp][0],29-taken[fp][1],fp);
        fp=(fp==3)?0:(fp+1);
    }  //由前面得到的taken[][]来画3方牌

    //下面画初始取牌的一方
    if(takenfromtail==0&&takenfromhead==0)
    {
        drawonedirect(image,0,29,firstpos);
        return;
    }
    if(takenfromtail<firstpai)
        if(taken[firstpos][0]<=firstpai-takenfromtail-1)
            drawonedirect(image,taken[firstpos][0],firstpai-takenfromtail-1,firstpos);

    if(takenfromhead<30-firstpai)
        if(firstpai+takenfromhead<=29-taken[firstpos][1])
            drawonedirect(image,firstpai+takenfromhead,29-taken[firstpos][1],firstpos);

}

int player::getindex(int mousex,int mousey)const
{
    int c=zushowed.getkuaicount();

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

        s+=5;
    }

    int x=beginx+s;

⌨️ 快捷键说明

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