Opis
Gra Makao.
Klasa GameMaster zajmuje się rozdawaniem. Ale aby móc rozdać graczom karty, musi mieć dostęp do ich prywatnych zmiennych cards.
Rozwiazania:
- użyć setterów w klasie Player dla cards. Ale wtedy zewsząd będzie można zmienić taką kartę, cierpi na tym hermetyczność.
- przyjaźń Klasy Player z Klasa GameMaster. Pod względem enkapsulacji wygląda to lepiej, ale teraz mam problem ponieważ, nawet jak dam wstępną deklarację klasy Player w Klasie GameMaster to i tak nie wystarczy aby dostać się do składników.
include\GameMaster.h|33|error: invalid use of incomplete type 'class Player'|
Co w takim przypadku zrobić? Czytałem aby wrzucić wszystko do jednego pliku.
Jak mądrze radzicie sobie w takich sytuacjach?
#include <Card.h>
#include <Player.h>
#include <stdlib.h>
class Player; // wczesniej musimy dac znac o takiej klasie
using namespace std;
class GameMaster
{
static const int amount = 52; // ilosc kart
Card *deck; // talia
public:
GameMaster(): deck (Card::deck()) {};
void DealsTheCards(Player *p1, Player *p2, int poIle) // rozdaj karty
{
for(int i=0; i<poIle*2; i++)
{
p1->cards[i++]= deck[i];
p2->cards[i]= deck[i];
}
}
};
#include "Card.h"
#include "GameMaster.h"
class Player
{
Card *cards; // karty
string imie;
int amount; // ilosc kart
public:
Player(){};
friend class GameMaster;
};
PS: założenie, nie mogę używać tutaj C++11