Le programme que j'ai écrit crée un jeu de cartes qui peut être mélangé et un joueur qui prend quatre cartes et les met dans les colonnes correspondantes.Aide Affichage d'un vecteur dans int main()
Je peux afficher une seule carte en faisant ceci:
int main()
{
Card card;
cout << card << endl;
}
Le problème est, je veux montrer ma classe de joueur, qui est composé d'un vecteur de cartes et devrait afficher quatre cartes et les mettre en quatre colonnes distinctes. Mais en utilisant ceci:
int main()
{
Deck deck;
deck.shuffle();
Player player;
cout << player;
}
n'affiche rien, en fait, cela me donne une erreur.
Comment puis-je afficher correctement mes quatre cartes dans les quatre colonnes correspondantes?
Aussi, voici le code entier je jusqu'à présent, si vous voulez passer par vous-même:
#include <iostream>
#include <algorithm>
#include <vector>
#include <cstdlib>
#include <ctime>
using namespace std;
enum suits
{
diamond, club, heart, spade
};
class Card
{
private:
int rank;
suits suit;
public:
Card();
Card(suits, int);
int getRank() { return rank; }
suits getSuit() { return suit; }
void setRank(int rankvalue) { rank = rankvalue; }
void setSuit(suits suitvalue) { suit = suitvalue; }
};
ostream & operator<<(ostream &, Card);
Card::Card()
{
rank = 1;
suit = spade;
}
Card::Card(suits suitvalue, int rankvalue)
{
rank = rankvalue;
suit = suitvalue;
}
ostream & operator<<(ostream & out, Card aCard)
{
switch (int rank = aCard.getRank())
{
case 1: out << "Ace"; break;
case 11: out << "Jack"; break;
case 12: out << "Queen"; break;
case 13: out << "King"; break;
default: out << rank;
}
switch (suits suit = aCard.getSuit())
{
case diamond: out << " of Diamonds"; break;
case spade: out << " of Spades"; break;
case heart: out << " of Hearts"; break;
case club: out << " of Clubs"; break;
}
return out;
}
class RandomInteger
{
public:
RandomInteger();
unsigned int operator() (unsigned int max);
};
RandomInteger::RandomInteger()
{
srand(time(0));
}
unsigned int RandomInteger::operator()(unsigned int max)
{
unsigned int rval = rand();
return rval % max;
}
RandomInteger randomizer;
class Deck
{
Card cards[52];
int topCard;
public:
Deck();
void shuffle();
bool isEmpty() { return topCard <= 0; }
Card draw();
};
extern RandomInteger randomizer;
Deck::Deck()
{
topCard = 0;
for (int i = 1; i <= 13; i++)
{
Card c1(diamond, i), c2(spade, i), c3(heart, i), c4(club, i);
cards[topCard++] = c1;
cards[topCard++] = c2;
cards[topCard++] = c3;
cards[topCard++] = c4;
}
}
Card Deck::draw()
{
if (!isEmpty())
return cards[--topCard];
else
{
Card spadeAce(spade, 1);
return spadeAce;
}
}
void Deck::shuffle()
{
random_shuffle(cards, cards+52, randomizer);
}
class Player
{
public:
Player();
void print();
Card draw(Deck &);
typedef vector<Card> cards;
vector<cards> column;
};
Player::Player()
{
column.push_back(vector<Card>());
column.push_back(vector<Card>());
column.push_back(vector<Card>());
column.push_back(vector<Card>());
}
Card Player::draw(Deck & aDeck)
{
for (int i = 0; i < 4; i++)
column[i].push_back(aDeck.draw());
}
void Player::print()
{
cout << "Col 1 \t Col 2 \t Col 3 \t Col 4 \n";
bool more = true;
for (int j = 0; more; j++)
{
more = false;
for (int i = 0; i < 4; i++)
if (j < column[i].size())
{
cout << column[i][j] << "\t";
more = true;
}
else
cout << "\t\t";
cout << endl;
}
}
int main()
{
Deck deck;
deck.shuffle();
Player player;
while (!deck.isEmpty());
cout << player;
}
Désolé pour la question amateur, je sais que c'est quelque chose de simple, et merci à l'avance.
Où est la ostream Définition Surchargé pour le joueur? –
Je ne vois pas l'opérateur << étant défini pour Player. Cela devrait provoquer une erreur de compilation. Pouvez-vous ajouter votre implémentation de l'opérateur << pour Player? – Patrick
Vous avez défini 'operator << (std :: ostream &, Card)', donc vous savez clairement ho pour le faire, mais vous n'avez même pas essayé de définir la sortie 'operator << (ostream &, const Player &) ; ' –