初学c语言,求一个自动发牌的程序。

题目是:一副扑克有52张牌,桥牌游戏中需要将牌分给四个人。编写c语言并实现以下:1.初始化52章牌2.洗牌3.发牌。运行后效果图如下:... 题目是:一副扑克有52张牌,桥牌游戏中需要将牌分给四个人。编写c语言并实现以下:1.初始化52章牌 2.洗牌 3.发牌。运行后效果图如下: 展开
 我来答
龍不悔
2013-11-18 · TA获得超过1139个赞
知道小有建树答主
回答量:271
采纳率:0%
帮助的人:499万
展开全部
# include <stdio.h>
#include <time.h>
#include <stdlib.h>
int card[52];
void Display(int i)//将0~51之间的数映射成牌号和花色 
{
              switch(i%4)
              {
                               case 0:printf("红桃");break;
                               case 1:printf("黑桃");break;
                               case 2:printf("梅花");break;
                               case 3:printf("方块");break;
              }
              if(i/4+1<11)
                                printf("%d\t",i/4+1); 
              else if(i/4+1==11)
                  printf("%c\t",'J'); 
              else if(i/4+1==12)
                   printf("%c\t",'Q'); 
              else if(i/4+1==13)
                   printf("%c\t",'K'); 
}
void InitCard()
{
     int i,j,temp;
     srand((int)time(0));
     for(i=0; i<52; i++)//随机生成52个数 
     {
              temp = rand()%52;
              for(j=0; j<i; j++)
              {
                       if(card[j] == temp) break;
              }
              if(j==i) card[i] = temp;
              else i--;
     }
     
     for(i=0; i<52; i++)//初始化输出 
     {
              if(i%5==0 && i!=0) printf("\n");
              Display(card[i]);
     }
}
void deal()
{
     int i,j,temp;
     srand((int)time(0));
     for(i=0; i<52; i++)
     {
              temp = rand()%52;
              for(j=0; j<i; j++)
              {
                       if(card[j] == temp) break;
              }
              if(j==i) card[i] = temp;
              else i--;
     }
     
     for(i=0; i<52; i++)//发牌输出 
     {
              
              if(i%5==0 && i!=0) printf("\n");
              if(i%13==0 && i!=0) printf("\n\n");
              if(i%13==0)
                         printf("第%d个玩家的牌:\n",i/13+1);
                         
              Display(card[i]);
     }
}
int main(void)
{
    int key=0; 
    printf("================主菜单==============\n");//菜单 
    printf("=============1、 初始化扑克=========\n");
    printf("=============2、 洗牌、发牌=========\n");
    printf("=============3、 退出 ==============\n");
    
    while(key!=3)//选择菜单 
    {
                 printf("请输入菜单功能编号:");
                 scanf("%d",&key);
                 
                 switch(key)
                 {
                            case 1:InitCard();break;//初始化 
                            case 2:deal();//发牌 
                            default: break;
                 }
                 
                 printf("\n\n");
    }
    return 0;
}

代码如上,测试结果:

基本思想就是,只要随机生成的数,发给谁都一样;所以初始化和发牌时候先随机生成52个不同的数0~51,初始化时,直接输出就可以了。发牌时按13一组一次分给一个人就可以了。

百度网友25c71217c
2013-11-18 · 超过31用户采纳过TA的回答
知道答主
回答量:54
采纳率:0%
帮助的人:25.6万
展开全部
首先,可以用0-51表示52张牌,用n%13+1表示大小,n/13+1表示花色。
int a[52];
for (int i = 0; i <52; ++i) a[i] = i;
那么洗牌可以通过随机数实现。有人证明过下面方法可以让各种牌局具有均匀的分布。
for (int i = 0; i < 52; ++i) { int j = rand() % 52; int k = a[i]; a[i] = a[j]; a[j] = k; }
发牌则是4选1循环。假如用card[4][13]表示结果,那么
for (int i = 0; i < 52; ++i) card[i%4][i/4] = a[i];
图看不到,不过你看着把card按格式输出一下就行了。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式