C语言:发牌的艺术

简单得发牌程序,没事可以拿来玩玩。

//任何整体出现需要同时包含多种数据,需要结构体运用
//明确代码段功能,子函,结构体声明,主函数调用,增加可读性逻辑清晰
//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");
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值