一个发四个玩家,共52张牌的发牌程序,是根据C程序改写的,改进了rand()每次发牌情况都一样的缺点,并且在打印格式上修正了一下:
有几点注意的 :
1,srand()函数要在循环体外,不然程序运行不出结果;
2,使用标准库自带的qsort(...)函数,最后一个参数是用函数返回值表示,其实意思是表示从小到大还是从大(正序)到小排序(倒序)。
#include <iostream>
#include <cstdlib>
#include <Ctime>
using namespace std;
int comp(const void *j,const void *i);
void p(int b[],char n[]);
int main()
{
static char n[]={'2','3','4','5','6','7','8','9','T','J','Q','K','A'};
int a[53],b1[13],b2[13],b3[13],b4[13];
int b11=0,b22=0,b33=0,b44=0,t=1,m,flag,i;
srand((int)time(0));
while(t<=52)
{
m=rand()%52;
for(flag=1,i=1;i<=t&&flag;i++)
if(m==a[i]) flag=0;
if(flag)
{
a[t++]=m;
if(t%4==0) b1[b11++]=a[t-1];
else if(t%4==1) b2[b22++]=a[t-1];
else if(t%4==2) b3[b33++]=a[t-1];
else if(t%4==3) b4[b44++]=a[t-1];
}
}
qsort(b1,13,sizeof(int),comp); /*将每个人的牌进行排序*/
qsort(b2,13,sizeof(int),comp);
qsort(b3,13,sizeof(int),comp);
qsort(b4,13,sizeof(int),comp);
cout<<"player1:"<<endl;
p(b1,n);
cout<<"\nplayer2:"<<endl;
p(b2,n);
cout<<"\nplayer3:"<<endl;
p(b3,n);
cout<<"\nplayer4:"<<endl;
p(b4,n); /*分别打印每个人的牌*/
return 0;
}
void p(int b[],char n[])
{
int i;
cout<<"\006 ";
for(i=0;i<13;i++)
if(b[i]/13==0) cout<<n[b[i]%13]<<" ";
cout<<"\n\003 ";
for(i=0;i<13;i++)
if(b[i]/13==1) cout<<n[b[i]%13]<<" ";
cout<<"\n\004 ";
for(i=0;i<13;i++)
if(b[i]/13==2) cout<<n[b[i]%13]<<" ";
cout<<"\n\005 ";
for(i=0;i<13;i++)
if(b[i]/13==3) cout<<n[b[i]%13]<<" ";
cout<<endl;
}
int comp(const void *j,const void *i) /*qsort调用的排序函数*/
{
return(*(int*)i-*(int*)j);
}