Хорошо, я создаю колоду карт, как и многие другие, и я могу получить все карты, чтобы они отображались в моем коде, но проблема в том, что они в том же порядке каждый раз. Я получил класс карты, как хочет мой профессор, но класс Deck - моя проблема. Несколько вещей, она хотела, чтобы мы использовали перечисление для костюма, и она хотела, чтобы мы поставили методы набора наедине, чтобы понять, почему мы не должны этого делать. (Не спрашивайте меня, как это имеет смысл, но это то, что она хотела). В инструкциях по этому поводу говорится:Палуба карт, выберите случайную карту и используйте два массива
Конструктор Deck построит массив из всех 52 карточных объектов. То есть он будет создавать объекты Карты. Он должен иметь массив, параллельный массиву, который указывает, была ли карта удалена из колоды. У него должен быть способ выбрать случайную карту из колоды. Этот метод удалит и вернет карту.
Я просто застрял в части параллельного массива, как мне получить его, чтобы проверить, что что-то было удалено из исходного массива? И как мне подойти, чтобы выбрать случайную карту?
Любая обратная связь будет оценена!
Вот мой код также:
#include <iostream>
#include <string>
#include <cmath>
#include <iomanip>
#include <cstdlib>
#include <ctime>
using namespace std;
enum suit { CLUBS, DIAMONDS, HEARTS, SPADES };
class Card
{
friend class Deck;
private:
string rankname[14];
string suitname;
int rank;
int suitnum;
suit s;
void privatesetsuit(suit arg_suit)
{
s = arg_suit;
}
void privatesetrank(int arg_rank)
{
rank = arg_rank;
}
public:
Card()
{
}
void setsuit(suit arg_suit)
{
privatesetsuit(arg_suit);
}
void setrank(int arg_rank)
{
privatesetrank(arg_rank);
}
int getsuit()
{
return s;
}
int getrank()
{
return rank;
}
void toString()
{
rankname[1] = "ACE";
rankname[2] = "TWO";
rankname[3] = "THREE";
rankname[4] = "FOUR";
rankname[5] = "FIVE";
rankname[6] = "SIX";
rankname[7] = "SEVEN";
rankname[8] = "EIGHT";
rankname[9] = "NINE";
rankname[10] = "TEN";
rankname[11] = "JACK";
rankname[12] = "QUEEN";
rankname[13] = "KING";
if (suitnum == 1)
{
suitname = "DIAMONDS";
}
if (suitnum == 3)
{
suitname = "SPADES";
}
if (suitnum == 2)
{
suitname = "HEARTS";
}
if (suitnum == 0)
{
suitname = "CLUBS";
}
cout << rankname[rank] << " OF " << suitname << endl;
}
};
void privatesetsuit(int s);
void setsuit(int s);
void privatesetrank(int arg_rank);
void setrank(int arg_rank);
void toString();
class Deck
{
public:
Deck()
{
Card currentcard[52];
Card parallel[52];
srand(time(NULL));
for (int i = 0; i < 52; i++)
{
currentcard[i].rank = i % 52;
currentcard[i].rank = currentcard[i].rank % 13 + 1;
parallel[i].rank = currentcard[i].rank;
currentcard[i].suitnum = i % 4;
currentcard[i].toString();
}
}
};
int main()
{
Deck d;
d;
// Test for Class!//
//c.setrank(rank);
//c.setsuit(s);
//c.toString();
// Test for Class!//
}
Выход:
ACE OF CLUBS
TWO OF DIAMONDS
THREE OF HEARTS
FOUR OF SPADES
FIVE OF CLUBS
SIX OF DIAMONDS
SEVEN OF HEARTS
EIGHT OF SPADES
NINE OF CLUBS
TEN OF DIAMONDS
JACK OF HEARTS
QUEEN OF SPADES
KING OF CLUBS
ACE OF DIAMONDS
TWO OF HEARTS
THREE OF SPADES
FOUR OF CLUBS
FIVE OF DIAMONDS
SIX OF HEARTS
SEVEN OF SPADES
EIGHT OF CLUBS
NINE OF DIAMONDS
TEN OF HEARTS
JACK OF SPADES
QUEEN OF CLUBS
KING OF DIAMONDS
ACE OF HEARTS
TWO OF SPADES
THREE OF CLUBS
FOUR OF DIAMONDS
FIVE OF HEARTS
SIX OF SPADES
SEVEN OF CLUBS
EIGHT OF DIAMONDS
NINE OF HEARTS
TEN OF SPADES
JACK OF CLUBS
QUEEN OF DIAMONDS
KING OF HEARTS
ACE OF SPADES
TWO OF CLUBS
THREE OF DIAMONDS
FOUR OF HEARTS
FIVE OF SPADES
SIX OF CLUBS
SEVEN OF DIAMONDS
EIGHT OF HEARTS
NINE OF SPADES
TEN OF CLUBS
JACK OF DIAMONDS
QUEEN OF HEARTS
KING OF SPADES
Press any key to continue . . .
У меня есть srand (время (NULL)); там, потому что я изначально использовал rand, но я получал дубликаты других карточек, и я просто забыл его вытащить. Любые улучшения в этом будут оценены! –
Параллельный массив - это просто логическое значение, которое говорит вам, было ли выбрано количество, уже означающее, что карта уже была обработана. – ChiefTwoPencils
Чтобы проверить, была ли карта удалена, выполните функцию, которая будет выполнять итерацию по картам и проверит против ранга/костюма прилагаемого экземпляра карты. Если ни один не найден, что соответствует, то карта была удалена из колоды. Для перетасовки карт это может помочь: http://www.cplusplus.com/reference/algorithm/shuffle/ – ryanlutgen