当前位置:首页 > C语言
模拟洗牌与发牌程序
来源:靑龍一笑的博客  作者:靑龍一笑  发布时间:2022-04-10 20:30:05  点击量:190  评论:0

    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');
    }
}

    运行效果:

方块J   梅花A
红桃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
版权所有 © 2005-2023 靑龍一笑的博客  Powered by C.S.Ricen
Copyright © 2005-2023 by www.ricensoftwares.com.cn  All Rights Reserved.

欢迎光临本站,这里是靑龍一笑的博客。

因资金匮乏,本站已迁到国外的免费空间,可能导致本站的访问速度较慢,由此给您带来的不便,敬请谅解。

您可以通过下方的“支持本站建设”链接,给本站提供资金支持。

Free Web Hosting