C++ 扑克牌类设计与实现:洗牌、抽牌、点数比较
以下是一个使用 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张牌,并显示双方的牌。最后根据总点数大小判断输赢。请注意,此示例中的点数是按照牌面大小来表示的,而不是实际的点数值。如果需要使用实际的点数值,请根据需要进行修改。
原文地址: https://www.cveoy.top/t/topic/bDh3 著作权归作者所有。请勿转载和采集!