C++设计例子(4)

一个发四个玩家,共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);
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值