C语言数据结构实验——挖坑游戏

题目:

       挖坑是一种比较流行的三人游戏,一副牌去掉大小王不用,共52张牌,发牌时每人随机发16张牌,剩余4张为底牌。最后由三人叫分,谁的分多,4张底牌全部归谁。一张扑克牌包括花色和值,请采用结构体,编写程序模拟挖坑的发牌程序:洗牌、发牌、叫分。

//模拟发牌 
#include<stdio.h>
#include<stdlib.h>
#include<time.h> 
#define endl '\n'
//结构体 
struct card {
	char *num, color; 
};
//规则 
void printrule() {
	printf("\t\t***********");
	printf("*");
	printf("*****************\n");
	printf("\t\t\t   Welcome \n");
	printf("\t\t***********");
	printf("*");
	printf("*****************\n");
	printf("\t\t*   一副扑克牌去除大小王    *\n");
	printf("\t\t*   共52张牌,发给三个人     *\n");
	printf("\t\t*   每人16张牌余四张底牌    *\n");	
	printf("\t\t*   通过叫分判断底牌归谁    *\n");
}
//洗牌 
void shuffle(card* c) {
	srand((unsigned)time(NULL));	//生成随机数 
	for (int i = 0; i < 52; i++) {
		card temp = c[i];
		int n = rand() % 52; 
		c[i] = c[n];
		c[n] = temp;
	}
}
//打印牌堆 
void show(card* c, int t) {
	printf("第%d个人的牌为:\n", t);
	--t *= 16;
	for (int i = 0; i < 16; i++) {
		printf("%s----", c[i + t].num);                                                                                                                         
		if(c[i + t].color=='3')	printf("%c\t",3);
	else	if(c[i + t].color=='4')	printf("%c\t",4);
	else	if(c[i + t].color=='5')	printf("%c\t",5);
	else	if(c[i + t].color=='6')	printf("%c\t",6);
	}
	putchar(endl);
}
//储存文件 
void saveFile(card *c) {
	FILE *fp = fopen("1.dat", "wb");//fopen函数打开数据文件 
	fwrite(c, sizeof(card), 52, fp);
	fclose(fp);
}
//读取文件 
void readFile(card *c) {
	FILE *fp = fopen("1.dat", "wb");
	fread(c, sizeof(card), 52, fp);
	fclose(fp);
}
//主函数 
int main() {
	char *num[] = {"A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"};
	char *color= {"3456"};
	card c[52];
	char y;
	int sum;
	for (int i = 0; i <= 51; i++) {
		c[i].num = num[i % 13];
		c[i].color = color[i / 13];
	}
	printrule();//规则 
	shuffle(c);//洗牌 
	saveFile(c);//储存文件
	readFile(c);//读取文件
	int t,s[t],j,max,temp;
    for(t=1;t<=3;t++)
	{
		show(c, t);}
	printf("接下来是叫分环节,请叫1~3分\n");
	for(t=1;t<=3;t++)
	{
		printf("第%d个人叫分:\n",t);
		scanf("%d",&s[t]);
	 }

	printf("叫分最大的人获得最后四张底牌");
}

运行截图:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值