C 语言实现代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
struct card {
const char *suit; // 牌的花色
const char *face; // 牌的点数
};
// 使用 typedef 给结构体类型 struct card 起个别名 Card
typedef struct card Card;
/*
* 上述价码也可以采用如下写法:
* typedef struct {
* const char *suit;
* const char *face;
* }Card;
*/
// 装牌
void fillDeck(Card * const cDeck, const char * cSuit[], const char * cFace[]);
// 洗牌
void shuffle(Card * const cDeck);
// 发牌
void deal(const Card * const cDeck);
int main() {
Card deck[52]; // 52 张牌
// 牌的花色
const char *suit[] = {"黑桃", "梅花", "方块", "红桃"};
// 牌的点数
const char *face[] = {"A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"};
/*
* 使用当前时间进行随机数发生器的初始化
* 为了防止随机数重复,常常使用系统时间来初始化
* 只需在主程序开始处调用 srand((unsigned)time(NULL)); 后面直接用 rand 就可以了。
*/
srand(time(NULL));
fillDeck(deck, suit, face); // 装牌
shuffle(deck); // 洗牌
deal(deck); // 发牌
return 0;
}
// 装牌
void fillDeck(Card * const cDeck, const char * cSuit[], const char * cFace[]) {
int i;
for (i = 0; i < 52; i++) {
// 花色:0 ~ 3
cDeck[i].suit = cSuit[i/13];
// 点数:0 ~ 12
cDeck[i].face = cFace[i%13];
}
}
// 洗牌
void shuffle(Card * const cDeck) {
int i, j;
Card tempCard;
for (i = 0; i < 52; i++) {
// 产生一个 0 ~ 51 之间的随机数
j = rand() % 52;
// 当前牌与随机牌进行交换,实现洗牌效果
tempCard = cDeck[i];
cDeck[i] = cDeck[j];
cDeck[j] = tempCard;
}
}
// 发牌
void deal(const Card * const cDeck) {
int i;
for (i = 0; i < 52; i++) {
// 交替给两个人发牌
printf("%s%s%c", cDeck[i].suit, cDeck[i].face, (i+1)%2 ? '\t' : '\n');
}
}
运行效果:
红桃4 方块7
黑桃8 方块10
梅花3 方块2
红桃10 方块9
红桃2 红桃8
梅花J 黑桃6
黑桃10 梅花9
黑桃K 红桃A
方块6 梅花7
方块4 方块A
黑桃5 梅花8
梅花10 梅花4
黑桃3 红桃J
梅花2 红桃6
红桃Q 梅花K
方块Q 梅花5
红桃5 黑桃4
梅花Q 黑桃Q
红桃7 红桃3
红桃K 红桃9
方块K 方块8
黑桃A 梅花6
黑桃7 方块3
黑桃2 方块5
黑桃J 黑桃9
Copyright © 2005-2023 by www.ricensoftwares.com.cn All Rights Reserved.