我正在尝试用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];
}
最终结果是我希望能够将枚举值传递给函数。现在这样做会产生错误&#34;预期的主要表达式在&#39;)之前#39;令牌&#34 ;.知道我做错了什么吗?
答案 0 :(得分:2)
向char添加整数时,将字符更改为其他字符。我认为你正在尝试连接,这需要某种字符串。
答案 1 :(得分:0)
您可以将卡片编号从0到53。 pack是一个包含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}
答案 2 :(得分:0)
使用整数表示卡的数据必须更简单。将其转换为数字或名称很容易。
#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;
}