📄 card.h.txt
字号:
#include<iostream>
#include<string>
#include "math.h"
using namespace std;
struct DHcard
{
int DS;
char HS;
};
typedef struct LLinkcard
{
struct DHcard data;
struct LLinkcard *next;
}Linkcard;
class card
{
private:
string Pname;
string Rname;
string Tname;
Linkcard *Link;
int K;
public:
Linkcard *headrJ,*headrT,*headrP;
card() {Pname="Unkonwn";Rname="Unkouwn";Tname="Unkouwn";}
void Namecard(string& p,string& r,string& t) {Pname=p;Rname=r;Tname=t;}
string Playerp(){return(Pname);}
string PlayerR(){return(Rname);}
string PlayerT(){return(Tname);}
card(Linkcard *InitLink) {Link=InitLink;} //构造函数在定义Gamble时被调用
Linkcard *Showcard(); //Linkfirst
Linkcard *OutPrintcard(Linkcard *Linkcard);
Linkcard *Shufflecard(Linkcard *Lindthird); //Linkthird
Linkcard *Outprintcard(Linkcard *Linksecond); //Linksecon;
void Licesecard(Linkcard *p,int K);
Linkcard* Wincard(Linkcard* headJ,Linkcard* headT);
void Woncard(Linkcard* win,Linkcard* headP);
};
Linkcard *card::Showcard() //...........Linkfirst
{
char c=3;
Linkcard *Linkfirst;
Linkfirst=Link;
Linkcard *End;
End=new Linkcard;
Link->next=End;
int cout=0;
for(int j=1;j<=4;j++)
{
int flag=1;
int i=1;
while(flag<=9)
{
End->data.DS=i+1;
End->data.HS=c;
End->next=new Linkcard;
End=End->next;
flag++;
i++;
cout++;
}
char a='J';
char b='Q';
char m='K';
char n='A';
int x,y,z,w;
x=a;y=b;z=m;w=n;
End->data.DS=x;
End->data.HS=c;
End->next=new Linkcard;
End=End->next;
cout++;
End->data.DS=y;
End->data.HS=c;
End->next=new Linkcard;
End=End->next;
cout++;
End->data.DS=z;
End->data.HS=c;
End->next=new Linkcard;
End=End->next;
cout++;
End->data.DS=w;
End->data.HS=c;
End->next=NULL;
cout++;
if(cout<52)
{
End->next=new Linkcard;
End=End->next;
}
c++;
}
return(Linkfirst);
}
Linkcard* card::Outprintcard(Linkcard* Linksecond) //........Linksecond
{
Linkcard *L=Linksecond->next;
int flag=0;
cout<<" ........................................."<<endl;
cout<<" ";
int inout=0;
int variable=1;
while(L->next!=NULL)
{
while(variable<=9)
{
int r;
cout<<L->data.HS;
r=L->data.DS;
if(r>60)
cout<<static_cast<char>(r);
else
cout<<r;
L=L->next;
variable++;
inout++;
flag++;
}
int a,b,c,d;
a=74;b=81;c=75;d=65;
cout<<L->data.HS;cout<<static_cast<char>(a);
L=L->next;
inout++;
cout<<L->data.HS;cout<<static_cast<char>(b);
L=L->next;
inout++;
cout<<L->data.HS;cout<<static_cast<char>(c);
L=L->next;
inout++;
cout<<L->data.HS;cout<<static_cast<char>(d);
inout++;
if(inout<52)
L=L->next;
flag=flag+4;
variable=1;
if((flag%13)==0)
{
cout<<endl;
cout<<" ";
}
}
cout<<endl<<" ..................................................."<<endl;
return(Linksecond);
}
Linkcard* card::OutPrintcard(Linkcard *Linksecond)
{
Linkcard *L=Linksecond->next;
Linkcard *LinkSecond=Linksecond;
cout<<" .................................."<<endl;
cout<<" ";
int flag=0;
int r;
while(L->next!=NULL)
{
cout<<L->data.HS;
r=L->data.DS;
if(r>60)
{
cout<<static_cast<char>(r);
flag++;
}
else
{
cout<<r;
flag++;
}
L=L->next;
if((flag%13)==0)
{
cout<<endl;
cout<<" ";
}
}
cout<<L->data.HS;
r=L->data.DS;
if(r>60)
{
cout<<static_cast<char>(r);
flag++;
}
else
{
cout<<r;
flag++;
}
cout<<endl<<" .................................."<<endl;
return(LinkSecond);
}
Linkcard* card::Shufflecard(Linkcard *Linkthird)
{
int R1,R2,R3;
int R,t;
char r;
Linkcard *LinkR1;
Linkcard *LinkR2;
Linkcard *LinkR3;
int flagR1=1,flagR2=1,flagR3=1;
R=rand()%100;
while(R<50)
R=rand()%100;
cout<<"洗牌后得到的新牌为:"<<endl;
LinkR1=LinkR2=LinkR3=Linkthird->next;
for(int i=1;i<R;i++)
{
R1=rand()%52;
R2=rand()%52;
R3=rand()%52;
while(R1==R2 || R1==R3 || R2==R3 || R1*R2*R3==0)
{
//cout<<"产生的随机数有相同的数值,重新洗牌"<<endl;
R1=rand()%52;
R2=rand()%52;
R3=rand()%52;
}
while(flagR1!=R1)
{
LinkR1=LinkR1->next;
flagR1++;
}
while(flagR2!=R2)
{
LinkR2=LinkR2->next;
flagR2++;
}
while(flagR3!=R3)
{
LinkR3=LinkR3->next;
flagR3++;
}
t=LinkR2->data.DS;
LinkR2->data.DS=LinkR1->data.DS;
r=LinkR2->data.HS;
LinkR2->data.HS=LinkR1->data.HS;
LinkR1->data.DS=LinkR3->data.DS;
LinkR1->data.HS=LinkR3->data.HS;
LinkR3->data.DS=t;
LinkR3->data.HS=r;
if(LinkR1->next!=Linkthird->next)
LinkR1=Linkthird->next;
if(LinkR2->next!=Linkthird->next)
LinkR2=Linkthird->next;
if(LinkR3->next!=Linkthird->next)
LinkR3=Linkthird->next;
flagR1=flagR3=flagR2=1;
}
return(Linkthird);
}
void card::Licesecard(Linkcard *q,int K) //需要获得的是一个洗完牌之后的到的首地址
{
cout<<" 发牌规则,从选中的一张牌开始向下发,每人三张牌,一次一张"<<endl;
cout<<" ******************************"<<endl;
Linkcard *p,*r1=NULL,*r2=NULL,*r3=NULL;
Linkcard *R1=new Linkcard;
Linkcard *R2=new Linkcard;
Linkcard *R3=new Linkcard;
r1=R1;headrJ=R1;
headrT=R2;r2=R2;
headrP=R3;r3=R3;
p=q->next;
int flag=1;
while(flag!=K)
{
while(p->next==NULL)
p=q->next;
p=p->next;
flag++;
}
int i=1;
int t=1;
for(t=1;t<=9;t++)
{
if(t==1 || t==4 || t==7)
{
while(p->next==NULL)
p=q->next;
R1->data.HS=p->data.HS;
R1->data.DS=p->data.DS;
R1=R1->next=new Linkcard;
p=p->next;
}
if(t==2 || t==5 || t==8)
{
while(p->next==NULL)
p=q->next;
R2->data.HS=p->data.HS;
R2->data.DS=p->data.DS;
R2=R2->next=new Linkcard;
p=p->next;
}
if(t==3 || t==6 || t==9)
{
while(p->next==NULL)
p=q->next;
R3->data.HS=p->data.HS;
R3->data.DS=p->data.DS;
R3=R3->next=new Linkcard;
p=p->next;
}
}
//cout<<"00000";
cout<<" John:";
for(i=1;i<=3;i++)
{
int convert=r1->data.DS;
cout<<r1->data.HS;
if(convert>60)
cout<<static_cast<char>(convert);
else
cout<<r1->data.DS;
r1=r1->next;
}
cout<<endl;
cout<<" Tony:";
for(i=1;i<=3;i++)
{
int convert=r2->data.DS;
cout<<r2->data.HS;
if(convert>60)
cout<<static_cast<char>(convert);
else
cout<<r2->data.DS;
r2=r2->next;
}
cout<<endl;
cout<<" Palmer:";
for(i=1;i<=3;i++)
{
int convert=r3->data.DS;
cout<<r3->data.HS;
if(convert>60)
cout<<static_cast<char>(convert);
else
cout<<r3->data.DS;
r3=r3->next;
}
cout<<endl<<" ****************************** "<<endl;
}
Linkcard* card::Wincard(Linkcard* headJ,Linkcard* headT)
{
//Linkcard* WheadJ=headJ;
//Linkcard* WheadT=headT;
int inJ=headJ->data.DS;
int in=headJ->next->next->data.DS;
int aJ=headJ->next->data.DS;
int inT=headT->data.DS;
int out=headT->next->next->data.DS;
int bT=headT->next->data.DS;
char chJ=headJ->data.HS;
char chT=headT->data.HS;
if(headJ->data.DS=headJ->next->data.DS && headJ->data.DS==headJ->next->next->data.DS) //当一方玩家的牌出现金花时
{
if(headT->data.DS==headT->next->data.DS && headT->data.DS==headT->next->next->data.DS)
{
if(inJ==inT)
{
//cout<<"两玩家John和Tony的牌都是金花"<<endl;
return(headJ);
}
}
else
{
//cout<<"玩家John的牌大"<<endl;
return(headJ);
}
}
if(chJ==headJ->next->data.HS || chJ==headJ->next->next->data.DS) //当一方出现啦清一色的时候
{
if(headT->data.DS==headT->next->data.DS && headT->data.DS==headT->next->next->data.DS) //.....出现金花时
//cout<<"玩家Tony的牌大"<<endl;
return(headJ);
if(chT==headT->next->data.HS || chT==headT->next->next->data.DS) //...也出现啦青一色时
{
if(chJ==chT) //....同色时
{
if(inJ>=inT)
//cout<<"玩家John的牌大"<<endl;
return(headJ);
if(inJ<inT)
//cout<<"玩家Tony的牌大"<<endl;
return(headT);
}
else
{
if(chJ==6) //.....不同色时
{
if(chJ==3 || chJ==4 || chJ==5)
//cout<<"玩家John的牌大"<<endl;
return(headJ);
}
if(chJ==3)
{
if(chT==6)
//cout<<"玩家Tony的牌大"<<endl;
return(headT);
if(chT==4 || chT==5)
//cout<<"玩家John的牌大"<<endl;
return(headJ);
}
if(chJ==4)
//cout<<"玩家Tony的牌大"<<endl;
return(headT);
if(chJ==5)
{
if(chT==4)
{
//cout<<"玩家John的牌大"<<endl;
return(headJ);
}
else
//cout<<"玩家Tony的牌大"<<endl;
return(headT);
}
}
}
}
if(
((aJ==inJ+1 && headJ->next->next->data.DS==inJ+2) || (aJ=inJ+2 && headJ->next->next->data.DS==inJ+1))
||
((inJ==aJ+1 && headJ->next->next->data.DS==aJ+2) || (headJ->next->next->data.DS==aJ+1 && inJ==aJ+2))
||
((inJ==in+1 && aJ==in+2) || (inJ==in+2 && inJ==aJ+1)) //当一方出现啦顺子的时候
)
{
if(
(headT->data.DS==headT->next->data.DS && headT->data.DS==headT->next->next->data.DS)
||
(chT==headT->next->data.HS || chT==headT->next->next->data.DS)
)
{
//cout<<"玩家Tony的牌大"<<endl;
return(headT);
}
else if(
((headT->next->data.DS==inT+1 && headT->next->next->data.DS==inT+2) || (headT->next->data.DS=inT+2 && headT->next->next->data.DS==inT+1))
||
((inT==bT+1 && headT->next->next->data.DS==bT+2) || (headT->next->next->data.DS==bT+1 && inT==bT+2))
||
((inT==out+1 && bT==out+2) || (inT==out+2 && inT==aJ+1)) //当一方出现啦顺子的时候
)
{
int JM;
int TM;
inJ=(inJ>aJ)?inJ:aJ;
JM=(in>inJ)?in:inJ;
inT=(inT>bT)?inT:bT;
TM=(out>inT)?out:inT;
if(JM>TM)
{
//cout<<"玩家John的牌大"<<endl;
return(headJ);
}
else if(JM<TM)
{
//cout<<"玩家Tony的牌大"<<endl;
return(headT);
}
}
else
//cout<<"玩家John牌大"<<endl;
return(headJ);
}
if(inJ!=aJ && inJ!=in && aJ!=in) //当牌毫无规律时
{
if(inT!=bT && inT!=out && out!=bT)
{
int JM;
int TM;
inJ=(inJ>aJ)?inJ:aJ;
JM=(in>inJ)?in:inJ;
inT=(inT>bT)?inT:bT;
TM=(out>inT)?out:inT;
if(JM>TM)
{
//cout<<"玩家John的牌大"<<endl;
return(headJ);
}
else if(JM<TM)
{
//cout<<"玩家Tony的牌大"<<endl;
return(headT);
}
else
{
//cout<<"两玩家的牌一样大"<<endl;
return(headT);
}
}
else
//cout<<"玩家Tony的牌大"<<endl;
return(headT);
}
if((inJ==aJ && inJ!=in) || (inJ==in && inJ!=aJ) || (in==aJ && in!=inJ)) //当一方出现啦对子时
{
if(inJ==aJ && inJ!=in)
{
if(inT==bT && inT!=out)
{
if(inJ==inT)
{
if(in>out)
//cout<<"玩家John的牌大"<<endl;
return(headJ);
if(in==out)
//cout<<"玩家Tony的牌大"<<endl;
return(headJ);
if(in<out)
//cout<<"玩家Tony的牌大"<<endl;
return(headT);
}
if(inJ>inT)
//cout<<"玩家John的牌大"<<endl;
return(headJ);
if(inJ<inT)
//cout<<"玩家Tony的牌大"<<endl;
return(headT);
}
if(inT==out && inT!=bT)
{
if(inJ==inT)
{
if(in>bT)
//cout<<"玩家John的牌大"<<endl;
return(headJ);
if(in==bT)
cout<<"两玩家牌一样大小"<<endl;
return(headJ);
if(in<bT)
//cout<<"玩家Tony的牌大"<<endl;
return(headT);
}
if(inJ>inT)
//cout<<"玩家John的牌大"<<endl;
return(headJ);
if(inJ<inT)
//cout<<"玩家Tony的牌大"<<endl;
return(headT);
}
if(bT==out && bT!=inT)
{
if(inJ==bT)
{
if(in>inT)
//cout<<"玩家John的牌大"<<endl;
return(headJ);
if(in==inT)
cout<<"两玩家的牌一样大小"<<endl;
return(headJ);
if(in<inT)
//cout<<"玩家Tony的牌大"<<endl;
return(headT);
}
if(inJ>bT)
//cout<<"玩家John的牌大"<<endl;
return(headJ);
if(inJ<bT)
//cout<<"玩家Tony的牌大"<<endl;
return(headJ);
}
}
if(inJ==in && inJ!=aJ)
{
if(inT==bT && inT!=out)
{
if(inJ==inT)
{
if(aJ>out)
//cout<<"玩家John的牌大"<<endl;
return(headJ);
if(aJ==out)
//cout<<"玩家Tony的牌大"<<endl;
return(headJ);
if(aJ<out)
//cout<<"玩家Tony的牌大"<<endl;
return(headT);
}
if(inJ>inT)
//cout<<"玩家John的牌大"<<endl;
return(headJ);
if(inJ<inT)
//cout<<"玩家Tony的牌大"<<endl;
return(headT);
}
if(inT==out && inT!=bT)
{
if(inJ==inT)
{
if(aJ>bT)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -