2015-09-08 5 views
1

Хорошо, сначала я рассмотрел различные вопросы, которые задавали вопрос о создании колоды карт, но каждый, кого я смотрел, использовал векторную вещь, я не уверен, как ее написать , потому что я не взял этот предмет в классе, поэтому я не знаю, как его применять.Создание колоды карт

Card.H и Card.cpp все в порядке, не нужно ничего менять в них

Мне не нужна помощь в Deck.H и Deck.cpp.

Функция initialize() не закончена, и я не могу понять, как ее закончить и с другими методами в классе Deck. Я не пытался писать ни один из них, так как я не могу создать колоду карт.

CARD.H

Class Card 
{ 

    int m_face; 
    char m_suit; 


public: 

Card(int _face = 2 , char _suit = 3); 

~Card(); 

int GetFace() const; 
char GetSuit() const; 

void SetFace(int _face); 
void SetSuit(char _suit); 

void Show() const; 
} 

CARD.CPP

#include "Card.h" 
Card::Card(int _face, char _suit) 
{ 

    m_face = _face; 
    m_suit = _suit; 
} 

Card::~Card() 
{ 

} 
int Card ::GetFace() const 
{ 
    return m_face; 
} 

char Card ::GetSuit() const 
{ 
    return m_suit; 
} 

void Card::SetFace(int _face) 
{ 
    m_face = _face; 
} 

void Card::SetSuit(char _suit) 
{ 
    m_suit = _suit; 
} 

void Card::Show() const 
{ 
    if (m_face == 11) 
     cout << " J " << m_suit << endl; 
    else if (m_face == 12) 
     cout << " Q " << m_suit << endl; 
    else if (m_face == 13) 
     cout << " K " << m_suit << endl; 
    else if (m_face == 14) 
     cout << " A " << m_suit << endl; 
    else 
     cout << m_face << m_suit << endl; 
} 

deck.h

#pragma once 
#include "stdafx.h" 
#include "Card.h" 

Class Deck 
{ 
    Card m_cards[52]; 

public: 

    Deck(); 
    void Initialize(); 
    void Shuffle(); 
    bool Draw(Card& _card); 
    void Clear(); 
    bool IsEmpty() const; 
} 

DECK.CPP

#include "Deck.h" 
#include"Card.h" 

void Deck::Initialize() 
{ 
int count = 0; 
    char Suits[] = { 3, 4, 5, 6 }; 

    for (int i = 0; i < 4; ++i) //Suits 
    { 

     for (int F = 2; F < 14; ++F) //faces 
     { 
      m_cards[count].SetSuit(Suits[i]); 
      m_cards[count].SetFace(F); 

     } 
    } 

} 

    void Deck::Shuffle() 
{ 
} 
    bool Deck::Draw(Card& _card 
{ 
} 
    void Deck::Clear() 
{ 
} 
    bool Deck::IsEmpty() const 
{ 
} 
+0

Ваш вопрос? Ваш 'initialize' кажется полным для меня. Это должно быть в конструкторе. –

+3

Используйте _vector thing_! Нет смысла решать проблемы управления памятью в C++. Это просто склонность к ошибкам, и у вас есть много ошибок, которых следует избегать. Любой учитель, рассказывающий что-то другое в базовом курсе C++, не стоит своей зарплаты, и вы должны немедленно покинуть этот курс. –

+0

мой вопрос в том, как я могу закончить свою функцию инициализации –

ответ

0

Я не думаю, что ваша функция Initialize требует гораздо больше работы.

только 2 замечания:

  1. Вы забыли ++count в конце внутреннего цикла (теперь вы устанавливаете ту же карту, каждый раз).
  2. Как вы написали внутренний цикл, переменной F разрешено доходить до 13 (поскольку вы использовали < 14). Это означает, что ваша колода не будет содержать никаких тузов ... для меня логичным было бы вместо этого использовать <= 14.
+0

Спасибо, что ответили. Я сделал это, и я запустил тестовую функцию, которую учитель написал в решении, которая позволяет нам знать, работает ли функция или нет, и я все еще не могу создать 52 карты. –

+0

Это то, что проверяет вещь, когда я запускаю ее. Тестирование колоды :: Инициализация. Проверка 52 уникальных карт. . E: \ full sail \ pg2 \ pg2 project \ card game \ lab3_test.cpp (715): ошибка: ошибка в PG2_Lab3_Deck_Initialize:! memcmp (refDeck, deck.m_cards, sizeof (Card) * 52) FAILURE: 1 из 1 тестов не удалось (1 отказ). –

0

Небольшая настройка и она работает.

#include <iostream> 
#include <algorithm> 
using namespace std; 

class Card 
{ 
private: 
    int m_face; 
    char m_suit; 
public: 
    Card(int _face = 2 , char _suit = 3) 
    { 
     m_face = _face; 
     m_suit = _suit; 
    } 
    ~Card(){} 
    int GetFace() const { return m_face; } 
    char GetSuit() const { return m_suit; } 

    void SetFace(int _face) { m_face = _face; } 
    void SetSuit(char _suit) { m_suit = _suit; } 
    void Show() const 
    { 
     if (m_face == 11) 
      cout << " J " << m_suit << endl; 
     else if (m_face == 12) 
      cout << " Q " << m_suit << endl; 
     else if (m_face == 13) 
      cout << " K " << m_suit << endl; 
     else if (m_face == 14) 
      cout << " A " << m_suit << endl; 
     else 
      cout << m_face << m_suit << endl; 
    } 
}; 
class Deck 
{ 
private: 
    Card m_cards[52]; 
    int current; 
public: 
    Deck() { Initialize(); } 
    void Initialize() 
    { 
     current = 51; 
     int count = 0; 
     char Suits[] = { 3, 4, 5, 6 }; 

     for (int i = 0; i < 4; ++i) //Suits 
     { 

      for (int F = 2; F <= 14; ++F) //faces 
      { 
       m_cards[count++].SetSuit(Suits[i]); 
       m_cards[count++].SetFace(F); 

      } 
     } 
    } 
    void Shuffle() { std::random_shuffle(m_cards, m_cards + current + 1); } 
    bool Draw(Card& _card) 
    { 
     if (IsEmpty()) return false; 
     _card = m_cards[current--]; 
     return true; 
    } 
    void Clear() { current = -1; } 
    bool IsEmpty() const { return current < 0; } 
}; 
int main() 
{ 
    Deck deck; 
    while(!deck.IsEmpty()) 
    { 
     Card c; 
     deck.Draw(c); 
     c.Show(); 
    } 
    return 0; 
} 
+0

Я знаю, но я не могу использовать это, Это поворот в проекте, и я не могу использовать это, я получаю ошибки, спасибо, хотя за то, что вы нашли время –

+0

Я не получаю никаких ошибок с вышеуказанным кодом. Что именно вы хотите? Потому что я не вижу никаких проблем с вашей инициализацией, которая еще не была выделена @Jos Bosmas –

+0

Я редактировал код. Сделал небольшие изменения в 'initialize'. Это то, чего вы ожидаете? Я также понял, что вы пишете 'class' с верхним регистром c. –

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