以下是使用 C++ 实现的扑克牌类 Card,并编写了测试程序来模拟两个玩家抽取牌并判断输赢的示例代码:

#include <iostream>
#include <cstdlib>
#include <ctime>

enum class Suit {
    Spades,
    Hearts,
    Diamonds,
    Clubs
};

enum class Rank {
    Ace = 1,
    Two,
    Three,
    Four,
    Five,
    Six,
    Seven,
    Eight,
    Nine,
    Ten,
    Jack,
    Queen,
    King
};

class Card {
public:
    Card(Suit s, Rank r) : suit(s), rank(r) {}
    Suit getSuit() const { return suit; }
    Rank getRank() const { return rank; }
    void displayCard() const {
        switch (suit) {
            case Suit::Spades:
                std::cout << 'Spades ';  // 双引号改为单引号
                break;
            case Suit::Hearts:
                std::cout << 'Hearts '; // 双引号改为单引号
                break;
            case Suit::Diamonds:
                std::cout << 'Diamonds '; // 双引号改为单引号
                break;
            case Suit::Clubs:
                std::cout << 'Clubs '; // 双引号改为单引号
                break;
        }
        switch (rank) {
            case Rank::Ace:
                std::cout << 'Ace'; // 双引号改为单引号
                break;
            case Rank::Two:
                std::cout << 'Two'; // 双引号改为单引号
                break;
            case Rank::Three:
                std::cout << 'Three'; // 双引号改为单引号
                break;
            case Rank::Four:
                std::cout << 'Four'; // 双引号改为单引号
                break;
            case Rank::Five:
                std::cout << 'Five'; // 双引号改为单引号
                break;
            case Rank::Six:
                std::cout << 'Six'; // 双引号改为单引号
                break;
            case Rank::Seven:
                std::cout << 'Seven'; // 双引号改为单引号
                break;
            case Rank::Eight:
                std::cout << 'Eight'; // 双引号改为单引号
                break;
            case Rank::Nine:
                std::cout << 'Nine'; // 双引号改为单引号
                break;
            case Rank::Ten:
                std::cout << 'Ten'; // 双引号改为单引号
                break;
            case Rank::Jack:
                std::cout << 'Jack'; // 双引号改为单引号
                break;
            case Rank::Queen:
                std::cout << 'Queen'; // 双引号改为单引号
                break;
            case Rank::King:
                std::cout << 'King'; // 双引号改为单引号
                break;
        }
        std::cout << std::endl;
    }
private:
    Suit suit;
    Rank rank;
};

class DeckOfCards {
public:
    DeckOfCards() {
        int card = 0;
        for (int i = 0; i < static_cast<int>(Suit::Clubs) + 1; i++) {
            for (int j = 1; j < static_cast<int>(Rank::King) + 1; j++) {
                cards[card++] = Card(static_cast<Suit>(i), static_cast<Rank>(j));
            }
        }
    }

    void shuffle() {
        std::srand(static_cast<unsigned int>(std::time(nullptr)));
        for (int i = 0; i < 52; i++) {
            int j = std::rand() % 52;
            std::swap(cards[i], cards[j]);
        }
    }

    Card pick() {
        return cards[nextCard++];
    }

private:
    Card cards[52];
    int nextCard = 0;
};

int main() {
    DeckOfCards deck;
    deck.shuffle();

    Card player1Cards[3];
    Card player2Cards[3];

    for (int i = 0; i < 3; i++) {
        player1Cards[i] = deck.pick();
        player2Cards[i] = deck.pick();
    }

    std::cout << 'Player 1 cards:' << std::endl; // 双引号改为单引号
    for (const auto& card : player1Cards) {
        card.displayCard();
    }
    std::cout << std::endl;

    std::cout << 'Player 2 cards:' << std::endl; // 双引号改为单引号
    for (const auto& card : player2Cards) {
        card.displayCard();
    }
    std::cout << std::endl;

    int player1Points = 0;
    int player2Points = 0;

    for (const auto& card : player1Cards) {
        player1Points += static_cast<int>(card.getRank());
    }

    for (const auto& card : player2Cards) {
        player2Points += static_cast<int>(card.getRank());
    }

    std::cout << 'Player 1 total points: ' << player1Points << std::endl; // 双引号改为单引号
    std::cout << 'Player 2 total points: ' << player2Points << std::endl; // 双引号改为单引号

    if (player1Points > player2Points) {
        std::cout << 'Player 1 wins!' << std::endl; // 双引号改为单引号
    } else if (player1Points < player2Points) {
        std::cout << 'Player 2 wins!' << std::endl; // 双引号改为单引号
    } else {
        std::cout << 'It's a tie!' << std::endl; // 双引号改为单引号
    }

    return 0;
}

这段代码首先定义了一个Card类来表示一张牌,包含花色和点数属性以及显示牌面的方法。然后定义了一个DeckOfCards类来表示一副牌,包含洗牌和抽牌的操作。在main函数中,首先创建了一副牌,并进行洗牌操作。然后模拟两个玩家各抽取3张牌,并显示双方牌面。接着根据牌面的点数计算双方总点数,并判断输赢。

请注意,这只是一个简单的示例代码,仅用于演示如何实现并使用扑克牌类。在实际的扑克游戏中,可能需要更复杂的逻辑和规则。

C++ 扑克牌类设计与实现:洗牌、抽牌、游戏模拟

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

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