怎么样编写一个扑克牌发牌函数

先定义一个结构体,里面的成员有存储花色和牌面的数组,然后在主函数里面声明一个结构体数组p大小为52,用来存储花色跟牌面,还有一个的整型数组arc大小也是52,用来存储牌面跟花色的顺序。
1.void baoc(CHUC p[])函数:首先先编写一个void baoc(CHUC p[])函数,这个函数用来保存52张扑克牌,这个函数里面用了两个数组指针来分别保存花色与牌面,如果把52张扑克牌按1到52的牌面顺序来排序,那么strcpy函数里面的(i/13)的意思是i<13的相除都是0那么就可以把存储花色的数组指针的黑桃赋给结构体的huase数组。红桃,梅花,方格的存储方法都是如此,那么(i%13)又是什么意思呢,意思是每隔一个周期(13)就重新赋值下一轮,例p.paimian[12]=King,而p.paimian[13]=“A”,
2.void XIPAI1(int arc[])函数:这个函数是通过一个数组来存储对应下标的数组,是用来配合发牌函数与洗牌函数的.
3.void XIPAI(int arg[])洗牌函数:这个函数通过srand函数time函数以及rand函数来取得一个随机数,然后将这个随机数跟正常存储扑克牌顺序交换达到洗牌的目的。
4.void fapai(CHUC p[],int arc[])发牌函数:通过洗牌函数打乱的顺序来发牌。

/*#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <time.h>
#include <stdlib.h>

typedef struct chuc
{
	char huase[10];//花色
	char paimian[10];//牌面
}CHUC;

void fapai(CHUC p[],int arc[]);//发牌函数
void baoc(CHUC p[]);//保存52张扑克牌
void XIPAI1(int arc[]);//按新排顺序排列
void XIPAI(int arg[]);//洗牌程序

int main(void)
{
	CHUC p[52];//存储扑克牌
	int arc[52];//存储新牌

	baoc(p);//调用函数保存扑克牌
	XIPAI1(arc);//存储新牌顺序
	fapai(p,arc);//调用函数进行发牌
	XIPAI(arc);
	printf("洗牌后----------------------------------------------------------------------------\n");
	fapai(p,arc);//调用函数进行发牌

	return 0;
}
void baoc(CHUC p[])//保存52张扑克牌
{
	char *HUASHE[] = { "黑桃", "梅花", "方格", "红桃" };
	char *PAIMIAN[] = { "A","2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King" };
	int i;
	for (i = 0; i < 52; i++){
		strcpy(p[i].huase, HUASHE[i / 13]);
		strcpy(p[i].paimian, (PAIMIAN[i % 13]));
	}
}
void fapai(CHUC p[],int arc[])//发牌函数
{
	int i;
	int count = 0;
	for (i = 0; i < 52; i++){
		printf("%s%s  ", p[arc[i]].huase, p[arc[i]].paimian);
		count++;
		if (count % 13 == 0&&count!=0)
			printf("\n\n");
	}

}
void XIPAI1(int arc[])//按新排顺序排列
{
	int i;
	for (i = 0; i < 52; i++)
		arc[i] = i;
}
void XIPAI(int arg[])//洗牌程序
{
	int i, j, step;

	srand(time(NULL));
	for (i = 0; i < 52; i++)
	{
		j = rand() % 52;
		step = arg[i];
		arg[i] = arg[j];
		arg[j] = step;
	}
}
*/

这个是程序运行之后的结构
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值