以下是一个使用 C++ 实现的扑克牌类 Card 的示例代码:

#include <iostream>
#include <string>
#include <algorithm>
#include <ctime>

class Card {
public:
    enum Suit { CLUBS, DIAMONDS, HEARTS, SPADES };
    enum Rank { ACE, TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE, TEN, JACK, QUEEN, KING };

    Card(Suit suit, Rank rank) : suit(suit), rank(rank) {}

    std::string getSuit() {
        switch (suit) {
            case CLUBS: return 'Clubs';
            case DIAMONDS: return 'Diamonds';
            case HEARTS: return 'Hearts';
            case SPADES: return 'Spades';
            default: return '';
        }
    }

    std::string getRank() {
        switch (rank) {
            case ACE: return 'Ace';
            case TWO: return '2';
            case THREE: return '3';
            case FOUR: return '4';
            case FIVE: return '5';
            case SIX: return '6';
            case SEVEN: return '7';
            case EIGHT: return '8';
            case NINE: return '9';
            case TEN: return '10';
            case JACK: return 'Jack';
            case QUEEN: return 'Queen';
            case KING: return 'King';
            default: return '';
        }
    }

private:
    Suit suit;
    Rank rank;
};

void shuffle(Card* deck, int size) {
    srand(static_cast<unsigned int>(time(0)));
    for (int i = size - 1; i > 0; --i) {
        int j = rand() % (i + 1);
        std::swap(deck[i], deck[j]);
    }
}

Card pick(Card* deck, int& currentIndex) {
    return deck[currentIndex++];
}

int main() {
    Card deck[52];
    int currentCardIndex = 0;

    // 创建一副扑克牌
    int cardIndex = 0;
    for (int suit = Card::CLUBS; suit <= Card::SPADES; ++suit) {
        for (int rank = Card::ACE; rank <= Card::KING; ++rank) {
            deck[cardIndex++] = Card(static_cast<Card::Suit>(suit), static_cast<Card::Rank>(rank));
        }
    }

    // 洗牌
    shuffle(deck, 52);

    // 模拟两个玩家各抽取3张牌
    Card player1Cards[3];
    Card player2Cards[3];
    for (int i = 0; i < 3; ++i) {
        player1Cards[i] = pick(deck, currentCardIndex);
        player2Cards[i] = pick(deck, currentCardIndex);
    }

    // 显示玩家的牌
    std::cout << 'Player 1's cards:' << std::endl;
    for (int i = 0; i < 3; ++i) {
        std::cout << 'Card ' << (i + 1) << ': ' << player1Cards[i].getSuit() << ' ' << player1Cards[i].getRank() << std::endl;
    }

    std::cout << std::endl;

    std::cout << 'Player 2's cards:' << std::endl;
    for (int i = 0; i < 3; ++i) {
        std::cout << 'Card ' << (i + 1) << ': ' << player2Cards[i].getSuit() << ' ' << player2Cards[i].getRank() << std::endl;
    }

    // 根据总点数大小判断输赢
    int player1TotalPoints = 0;
    int player2TotalPoints = 0;
    for (int i = 0; i < 3; ++i) {
        player1TotalPoints += player1Cards[i].getRank();
        player2TotalPoints += player2Cards[i].getRank();
    }

    std::cout << std::endl;

    if (player1TotalPoints > player2TotalPoints) {
        std::cout << 'Player 1 wins!' << std::endl;
    }
    else if (player1TotalPoints < player2TotalPoints) {
        std::cout << 'Player 2 wins!' << std::endl;
    }
    else {
        std::cout << 'It's a tie!' << std::endl;
    }

    return 0;
}

这个程序创建了一副扑克牌,进行了洗牌操作,并模拟了两个玩家各抽取3张牌,并显示双方的牌。最后根据总点数大小判断输赢。请注意,此示例中的点数是按照牌面大小来表示的,而不是实际的点数值。如果需要使用实际的点数值,请根据需要进行修改。

C++ 扑克牌类设计与实现:洗牌、抽牌、点数比较

原文地址: https://www.cveoy.top/t/topic/bDh3 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录