2015-02-01 2 views
0

Хорошо, я создаю колоду карт, как и многие другие, и я могу получить все карты, чтобы они отображались в моем коде, но проблема в том, что они в том же порядке каждый раз. Я получил класс карты, как хочет мой профессор, но класс 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 . . . 
+0

У меня есть srand (время (NULL)); там, потому что я изначально использовал rand, но я получал дубликаты других карточек, и я просто забыл его вытащить. Любые улучшения в этом будут оценены! –

+0

Параллельный массив - это просто логическое значение, которое говорит вам, было ли выбрано количество, уже означающее, что карта уже была обработана. – ChiefTwoPencils

+0

Чтобы проверить, была ли карта удалена, выполните функцию, которая будет выполнять итерацию по картам и проверит против ранга/костюма прилагаемого экземпляра карты. Если ни один не найден, что соответствует, то карта была удалена из колоды. Для перетасовки карт это может помочь: http://www.cplusplus.com/reference/algorithm/shuffle/ – ryanlutgen

ответ

0

Он должен иметь параллельный массив в массив, который указывает, является ли карта была удалена из колоды.

Фраза «указывает, является ли» подделкой, требуемой булевыми значениями. В вашем случае это массив из 52 булевых значений, поэтому bool is_removed[52];.

[& hellip;] как его получить, чтобы проверить, что что-то было удалено из исходного массива?

Вы не хотите проверять, что что-то было удалено из исходного массива, потому что вы действительно не хотите удалять что-либо из исходного массива. Когда-либо. Вместо этого, чтобы удалить карту из колоды, вы просто устанавливаете is_removed[i] в true (где i - соответствующий индекс); и чтобы проверить, удалена ли карта из колоды, вы просто изучаете is_removed[i].

+0

Как я могу проверить его на конкретную карту? Как «ACE OF SPADES», если ACE является частью ранга, а SPADES является частью перечисления? Должен ли я, возможно, установить его там, где он станет строкой после того, как он найдет ранг и костюм и просто сделает массив строк с каждой их собственной конкретной картой? –

+0

@AustinHolbrook: Учитывая, что ваш учитель описывает случайный выбор и удаление карты из колоды, я понимаю, что она * не * ожидает, что колода будет в случайном порядке. Таким образом, вы можете проверить «ACE OF SPADES», применяя ту же логику, которую вы использовали для заполнения колоды: SPADES = 3 (из 0-3) и ACE = 0 (из 0-12), поэтому ACE OF SPADES 3 * 13 + 0. Итак, просто проверьте 'is_removed [3 * 13 + 0]'. – ruakh

Смежные вопросы