简单得发牌程序,没事可以拿来玩玩。
//任何整体出现需要同时包含多种数据,需要结构体运用
//明确代码段功能,子函,结构体声明,主函数调用,增加可读性逻辑清晰
//C语言只能学到语法,却学不到算法
#include<stdio.h>
#include<stdlib.h>
#include<time.h>//涉及随机函数,发牌随机性
#include<string.h>
typedef struct _card
{
int face;//牌面
int suit;//花色
}card;//牌由牌面加花色整体出现。故用结构体表示一张牌的样子
typedef struct _deal
{
card cards;
int person;
}deal;//结构体套用,int person每人得到一张牌时的花色随机
typedef struct _person
{
int person;
card cards[13];
}person;//一个人你一共得多少牌——数组
void initailize(card cards[],deal dealresult[]);//初始化52张牌
void dealing(deal dealresult[],person personnal[]);//发牌
void output(person personnal[]);//输出
int main()
{
card cards[52];//52张牌
deal dealresult[52];//52张牌分属4个人
person personnal[4]={{1},{2},{3},{4}};//4个人每人13张牌
initailize(cards,dealresult);
dealing(dealresult,personnal);
output(personnal);
return 0;
}
void initailize(card cards[],deal dealresult[])
{
int i,j;
//生成52张牌
for(i=0;i<13;i++)
{
for(j=0;j<4;j++)
{
cards[i+13*j].face=i;//必定之后得输出为14张牌,且有0,避免出现可做一些小的处理
cards[i+13*j].suit=j;
}
}
for(i=0;i<52;i++)
{
dealresult[i].cards=cards[i];
}
}
void dealing(deal dealresult[],person personnal[])
{
int i,j;
char tempperson[8]="1234";
int temp[4]={0};
int random;
srand((unsigned)time(NULL));
for(i=0;i<52;i++)
{
random=rand()%strlen(tempperson);//生成随机数
dealresult[i].person=tempperson[random]-49;
personnal[tempperson[random]-49].cards[temp[random]]=dealresult[i].cards;
temp[random]++;
if(temp[random]==13)
{
for(j=random;(unsigned)j<strlen(tempperson)-1;j++)
{
temp[j]=temp[j+1];
tempperson[j]=tempperson[j+1];
}
tempperson[j]=tempperson[j+1];
}
;
}
}
void output(person personnal[])
{
int i,j;
char suit[8]={0x06,0x03,0x04,0x05};//"SHDC"框格
char face[16]="A234567890JQK";
for(i=0;i<4;i++)
{
printf("第%d位玩家: ",i+1);
for(j=0;j<13;j++)
{
printf("%c",suit[personnal[i].cards[j].suit]);
if(face[personnal[i].cards[j].face]!='0')
{
printf("%c",face[personnal[i].cards[j].face]);
}
else
{
printf("10");
}
}
printf("\n");
}
}