自动发牌,一副牌52张,发给4个人。使用数组方法设计一个C语言程序。要求:黑桃用S表示;红桃用H表示;方块用D表示;梅花用C表示
时间: 2024-03-07 08:47:05 浏览: 113
以下是一个简单的C语言程序,可以实现自动发牌的功能,每个玩家发13张牌:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define DECK_SIZE 52
#define NUM_PLAYERS 4
#define CARDS_PER_PLAYER 13
void shuffle(int *deck, int size);
void print_card(int card);
int main()
{
int deck[DECK_SIZE];
int players[NUM_PLAYERS][CARDS_PER_PLAYER];
int i, j, k;
// 初始化牌组
for (i = 0; i < DECK_SIZE; i++) {
deck[i] = i;
}
// 洗牌
shuffle(deck, DECK_SIZE);
// 发牌
k = 0;
for (i = 0; i < NUM_PLAYERS; i++) {
for (j = 0; j < CARDS_PER_PLAYER; j++) {
players[i][j] = deck[k++];
}
}
// 输出每个玩家的牌
for (i = 0; i < NUM_PLAYERS; i++) {
printf("Player %d's cards:\n", i + 1);
for (j = 0; j < CARDS_PER_PLAYER; j++) {
print_card(players[i][j]);
printf(" ");
}
printf("\n");
}
return 0;
}
// 洗牌函数
void shuffle(int *deck, int size)
{
int i, temp, rand_index;
// 初始化随机数种子
srand(time(NULL));
// 随机交换牌组中的元素
for (i = 0; i < size; i++) {
rand_index = rand() % size;
temp = deck[i];
deck[i] = deck[rand_index];
deck[rand_index] = temp;
}
}
// 打印一张牌
void print_card(int card)
{
int suit = card / 13;
int rank = card % 13;
switch (suit) {
case 0:
printf("S");
break;
case 1:
printf("H");
break;
case 2:
printf("D");
break;
case 3:
printf("C");
break;
default:
break;
}
switch (rank) {
case 0:
printf("A");
break;
case 10:
printf("T");
break;
case 11:
printf("J");
break;
case 12:
printf("Q");
break;
case 13:
printf("K");
break;
default:
printf("%d", rank + 1);
break;
}
}
```
这个程序使用了一个二维数组来存储每个玩家的牌,首先洗牌,然后按顺序将每个玩家的13张牌从牌组中依次取出。最后,使用一个打印牌的函数来输出每个玩家手中的牌。
阅读全文