#define _CRT_SECURE_NO_WARNINGS 1
#define ROW 5
#define COLUMN 13
#define PLAYER_NUM 3
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int visited[ROW][COLUMN] = { 0 };
// 用户
char players[PLAYER_NUM][17][256] = { 0 };
int main_ddz()
{
void sendCard(char(*cards)[COLUMN]);
void showPlayerCards();
void showBottomCards(char(*cards)[COLUMN]);
// 存储牌
// 第一行 1梅花 2红桃 3 黑桃 4方块 5 大小王
char cards[ROW][COLUMN] = { {'A','2','3','4','5','6','7','8','9','T','J','Q','K'},
{'A','2','3','4','5','6','7','8','9','T','J','Q','K'} ,
{'A','2','3','4','5','6','7','8','9','T','J','Q','K'} ,
{'A','2','3','4','5','6','7','8','9','T','J','Q','K'} ,{'W','w'} };
// 发牌
sendCard(cards);
// 打印玩着的牌
showPlayerCards();
// 打印底牌
printf("打印底牌:\n");
showBottomCards(cards);
return 1;
}
// 函数名sendCard,参数个数(1个)及类型 &cards[0] char (*)[])
void sendCard(char(*cards)[COLUMN]) {
void getColor(int color, int* p_pointNum, char* card);
// 播种
srand((unsigned int)time(NULL));
int i = 0;
for (; i < 51; ) {
// 随机发牌
int color = rand() % 5;
int pointNum = rand() % 13;
char card[128] = { 0 };
getColor(color, &pointNum, card);
// 判断是否已经出现过
if (visited[color][pointNum] == 0) {
char num[2] = { *(*(cards + color) + pointNum) ,'\0' };
// 将花色和点数拼接成牌
strcat(card, num);
// 将牌发给用户
strcpy(players[i / 17][i % 17], card);
visited[color][pointNum] = 1;// 表示已经随机过
i++;
}
}
}
// 获取花色
void getColor(int color, int* p_pointNum, char* card) {
switch (color)
{
case 0:
strcpy(card, "梅花 ");
break;
case 1:
strcpy(card, "红桃 ");
break;
case 2:
strcpy(card, "黑桃 ");
break;
case 3:
strcpy(card, "方块 ");
break;
case 4:
// 解决:随机大小王的问题
*p_pointNum = (*p_pointNum) % 2;
strcpy(card, "");
break;
}
}
void showPlayerCards() {
for (int i = 0; i < PLAYER_NUM; i++) {
printf("player%d:\n", i + 1);
for (int j = 0; j < 17; j++) {
printf("%-8s", *(players + i) + j);
}
printf("\n");
}
}
// 显示底牌
void showBottomCards(char(*cards)[COLUMN]) {
void getColor(int color, int* p_pointNum, char* card);
int count = 1;
// 遍历visited数组
for (int i = 0; i < ROW; i++) {
for (int j = 0; j < COLUMN; j++) {
if (count > 3) {
return;//终止循环
}
if (*(*(visited + i) + j) == 0) {
char card[128] = { 0 };
int pointNum = j;
getColor(i, &pointNum, card);
char num[2] = { *(*(cards + i) + pointNum) ,'\0' };
// 将花色和点数拼接成牌
strcat(card, num);
printf("%-8s", card);
count++;
}
}
}
}
/*
54张牌
4种花色,每种花色13张牌
大小王
<1>如何存储牌
数组
二维数组[5][13], 特殊的10使用T来代替
<2>发牌
随机发
3个用户,17张,3张底牌
rand函数(花色 ------ 点数)(组成一张牌)【考虑重复的问题】---》重新随机
<3> 将用户的牌打印出来
底牌打印出来
*/
模拟斗地主发牌
最新推荐文章于 2024-07-03 18:58:50 发布