我的代码已经制作了一副牌,但我该如何改变呢?我的随机播放功能似乎无法正常工作。 我可能在其他地方也有一些错误,如果你能看到它们,请告诉我。它编译并运行,但它按顺序列出了卡片。
#include <iostream>
#include <string>
#include <ctime>
#include <vector>
using namespace std;
class Card{
public:
int face;
int suit;
void setData(int f, int s){
face = f;
suit = s;
}
string toString(int F, int S){
static string faces[13] = {"Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Jack", "Queen", "King", "Ace"};
static string suits[4] = {"Clubs", "Spades", "Diamonds", "Hearts"};
string FandS = faces[F] + " of " + suits[S] + "\n";
return FandS;
}
};
class DeckOfCards:public Card{
public:
Card deck[13][4];
int currentCard;
void shuffle(){
srand (time(0));
Card temp[13][4]; int R, r;
for(int shuf=0; shuf<52; shuf++){
for(int i=0; i<13; i++){
for(int j=0; j<4; j++){
R = rand()%13;
r = rand()%4;
temp[i][j] = deck[i][j];
deck[i][j] = deck[R][r];
deck[R][r] = temp[i][j];
}
}
}
}
bool moreCards(){
currentCard=52;
currentCard--;
if(currentCard>0){
return true;
}else
return false;
}
void dealCard(){
for(int i=0; i<13; i++){
for(int j=0; j<4; j++){
cout << toString(i, j);
}
}
}
DeckOfCards(){
for(int i=0; i<13; i++){
for(int j=0; j<4; j++){
deck[i][j].setData(face, suit);
}
}
}
};
int main(){
DeckOfCards myDeck;
myDeck.shuffle();
myDeck.dealCard();
return 0;
}
答案 0 :(得分:2)
这就是你的牌按顺序“处理”的原因:
void dealCard(){
for(int i=0; i<13; i++){
for(int j=0; j<4; j++){
cout << toString(i, j);
}
}
}
你根本不使用甲板。你只需按顺序打印出来。
试试这个:
cout << toString(deck[i][j].face, deck[i][j].suit);
您应该真正编写一个没有参数的Card::toString
函数,并让它使用其face
和suit
成员。
cout << deck[i][j].toString();
为了记录,我真的不喜欢你,你把你的套牌安排为2D阵列。绝对没有必要这样做。我更喜欢DeckOfCards
继承自Card
。
由于我在挑剔,你不需要一个整个甲板大小的数组用于你的临时交换变量。你只需要一个Card
。实际上,您应该使用std::swap
代替。
答案 1 :(得分:1)
除了其他答案之外,我认为您对套牌的初始分配不起作用。
DeckOfCards(){
for(int i=0; i<13; i++){
for(int j=0; j<4; j++){
deck[i][j].setData(face, suit);
}
}
}
您将每张卡片设置为'(脸,套装)'。那时候那是什么?我认为你的意思是将它们设置为'(i,j)'。我很惊讶这个编译,因为face和suit只被声明为卡片对象的属性。
答案 2 :(得分:0)
我建议你避免使用数组并使用std::vector,并使用std::random_shuffle来改组你的套牌。
以下是我对您的代码进行的快速编辑,以向您展示如何完成
#include <ctime>
#include <vector>
#include <algorithm>
using namespace std;
class Card{
public:
int face;
int suit;
void setData(int f, int s){
face = f;
suit = s;
}
};
class DeckOfCards:public Card{
public:
std::vector<Card> deck;
void shuffle(){
srand (time(0));
std::random_shuffle(deck.begin(), deck.end());
}
DeckOfCards(){
deck.reserve(13 * 4);
for(int i=0; i<13; i++){
for(int j=0; j<4; j++){
Card card;
card.setData(i, j);
deck.push_back(card);
}
}
}
};
int main(){
DeckOfCards myDeck;
myDeck.shuffle();
return 0;
}