初学c语言,求一个自动发牌的程序。
题目是:一副扑克有52张牌,桥牌游戏中需要将牌分给四个人。编写c语言并实现以下:1.初始化52章牌2.洗牌3.发牌。运行后效果图如下:...
题目是:一副扑克有52张牌,桥牌游戏中需要将牌分给四个人。编写c语言并实现以下:1.初始化52章牌 2.洗牌 3.发牌。运行后效果图如下:
展开
展开全部
# 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一组一次分给一个人就可以了。
展开全部
首先,可以用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按格式输出一下就行了。
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按格式输出一下就行了。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询