题目:
挖坑是一种比较流行的三人游戏,一副牌去掉大小王不用,共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("叫分最大的人获得最后四张底牌");
}
运行截图: