如何在c++中生成一副牌
How to generate a deck of cards in c++?
我正在尝试用C++制作一副扑克牌。我的方法如下:-每张卡都需要一套套装和一个价值-每套套装需要13张卡
所以我决定做的是有一个前缀(西装)和一个后缀(价值)。然后,我会为每件衣服生成13个值,并将该值存储在一个数组中。我的问题是我当前的设置只输出"T"。这是当前代码:
main.cpp
#include <iostream>
#include <string>
enum cardValues{joker, ace, two, three, four, five, six, seven, eight, nine, ten};
struct card
{
int value;
char suit;
};
class CardDeck
{
public:
void create_deck(char prefix, int suffix);
std::string deckOfCards[51];
};
void CardDeck::create_deck(char prefix, int suffix)
{
char cardPrefix = prefix;
int cardSuffix = suffix;
std::string finalCard;
for(int numberOfCardsProcessed = 0; numberOfCardsProcessed < sizeof(cardValues); numberOfCardsProcessed++){
finalCard = cardPrefix + cardSuffix;
deckOfCards[numberOfCardsProcessed] = finalCard;
}
}
int main()
{
CardDeck CD;
card spades;
card diamonds;
card clubs;
card hearts;
spades.suit = 'S';
diamonds.suit = 'D';
clubs.suit = 'C';
hearts.suit = 'H';
CD.create_deck(spades.suit, 1);
std::cout << CD.deckOfCards[0];
}
最终的结果是,我希望能够将值的枚举传递给函数。这样做现在会产生错误"在')'标记之前需要主表达式"。你知道我做错了什么吗?
在向字符添加整数时,会将字符更改为其他字符。我认为您正在尝试串联,这将需要某种字符串。
您可以将卡片编号从0到53。包是包含从0到53的所有数字的向量。每个数字只允许使用一次。
现在我们取卡片n
如果n是52或53,那么是一个小丑
对于其余的卡:
卡片值应为n % 13
的结果
你得到的数字应该在数组{2,3,4,5,6,7,8,9,10,J,Q,K,A}
中为你提供索引
卡片类型应为n / 13
的结果
您得到的数字应该为数组{spade,heart,diamond,club}
提供索引
只对卡的数据使用整数一定更简单。很容易将其转换为数字或名称。
#include <iostream>
#include <random>
#include <algorithm>
#include <chrono>
class Card {
public:
static const int NUMSUITS = 4;
static const int NUMVALUES = 13;
Card() { num = nextNum++; }
int nSuit() { return num / NUMVALUES; }
int nValue() { return num % NUMVALUES + 1; }
const char *sSuit() { return suits[nSuit()]; }
const char *sValue() { return values[nValue() - 1]; }
void print() { std::cout << sValue() << " of " << sSuit(); }
void set(int n) { num = n; }
private:
int num;
static int nextNum;
static const char *suits[NUMSUITS];
static const char *values[NUMVALUES];
};
int Card::nextNum = 0;
const char *Card::suits[Card::NUMSUITS] = {
"Clubs", "Hearts", "Diamonds", "Spades"
};
const char *Card::values[Card::NUMVALUES] = {
"Ace", "Two", "Three", "Four", "Five", "Six", "Seven",
"Eight", "Nine", "Ten", "Jack", "Queen", "King"
};
class Deck {
public:
static const int NUMCARDS = Card::NUMSUITS * Card::NUMVALUES;
Deck() : top(0) {
seed = std::chrono::system_clock
::now().time_since_epoch().count();
}
void shuffle() {
std::shuffle(cards, cards + NUMCARDS,
std::default_random_engine(seed));
}
Card nextCard() {
if (top >= NUMCARDS) {;} // error
return cards[top++];
}
private:
Card cards[NUMCARDS];
int top;
unsigned seed;
};
int main() {
Deck deck;
deck.shuffle();
for (int i=0; i<Deck::NUMCARDS; i++) {
Card c = deck.nextCard();
c.print();
std::cout << 'n';
}
return 0;
}
相关文章:
- 使用strcpy将char数组的元素复制到另一个数组
- 有符号的int和int-有没有一种方法可以在C++中区分它们
- 有一个打印语句的函数是一种糟糕的编程实践吗
- 在 c++ 中拥有一组结构的正确方法是什么?
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 如何将三维尺寸不固定的三维阵列展平为一维阵列
- 初始化一副牌C++
- 将一副牌循环100次(一副牌)
- 链表一副牌,只出现51张牌,没有出现52张
- 在一副牌上得分
- 放置在结构中的一副牌
- 使用向量c++存储和洗牌一副牌
- C++ - 使用枚举生成一副纸牌
- 我需要帮助在C++中生成一副纸牌
- 如何在c++中生成一副牌
- 如何初始化一副纸牌的 3D 数组
- 从一副牌中发牌(不重复的牌)
- 制作一副纸牌
- 链表vs.动态数组实现一副牌?c++
- 构建一副纸牌的多个错误