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

📄 card.h.txt

📁 用面相对象的思想
💻 TXT
📖 第 1 页 / 共 2 页
字号:
#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 + -