Witam, mam do napisania program - grę w oczko, po drodze w jego pisaniu pojawił mi się problem z pobieraniem atrybutu poszczególnego obiektu z tablicy obiektów(za pomocą metody). Jeżeli chodzi o sam program to mamy go podzielić na 3 klasy - Karta, Gracz oraz Kasyno. Klasę karta otrzymaliśmy gotową oraz mamy do wykonania poszczególne zadania(np. ze Kasyno ma się składać z 51 kart itd. Mam świadomość że powinienem się posłużyć wskaźnikami, ale nie za bardzo wiem jak. Napisałem wstępnie coś takiego ale wydaję mi się że nie będzie to działać. Ale może od początku :
To są podstawowe atrybuty/metody klasy kasyno :
class Kasyno {
public:
Karta* Karty[51];
Gracz* Gracze[20];
int daj_karte;
void Tworz_talie()
{
int licznik = 0;
for (int i = 0; i < 4; i++) // Tworzy 52 obiektow klasy karta
{
for (int j = 0; j < 13; j++) {
Karty[licznik] = new Karta(i, j);
licznik++;
cout << Karty[licznik] << endl;
}
}
}
void tasowanie()
{
for (int i = 0; i < 100; i++) {
srand(time(NULL));
swap(Karty[rand() % 51 + 0], Karty[rand() % 51 + 0]); // zamienia miejscami karty 100 razy
}
}
Karta* dajKarte()
{
srand(time(NULL));
do {
int daj_karte = rand() % 51 + 0;
} while (Karty[daj_karte] != NULL);
Karty[daj_karte] = NULL;
return Karty[daj_karte];
}
Jeżeli chodzi o klase Karta to wygląda to tak:
w cpp mamy rozpisane wartosci, kolory i figury poszczegolnych
class Karta {
private:
char kolor;
char figura;
int wartosc;
public:
Karta(int _kolor = 0, int _wartosc = 0);
void setKolor(int _kolor);
void setWartosc(int _wartosc);
char getKolor() const { return kolor; }
char getFigura() const { return figura; }
int getWartosc() const { return wartosc; }
void wypisz() const { std::cout << figura << kolor << "\n"; }
};
karta cpp const char kolory[] = { 3, 4, 5, 6 };
const char figury[] = { '2', '3', '4', '5', '6', '7', '8', '9', 'D', 'J', 'Q', 'K', 'A' };
const int wartosci[] = { 2, 3, 4, 5, 6, 7, 8, 9, 10, 2, 3, 4, 11 };
Karta::Karta(int _kolor, int _wartosc)
{
setKolor(_kolor);
setWartosc(_wartosc);
}
void Karta::setKolor(int _kolor)
{
if (_kolor < 4) {
kolor = kolory[_kolor];
}
}
void Karta::setWartosc(int _wartosc)
{
if (_wartosc < 13) {
figura = figury[_wartosc];
wartosc = wartosci[_wartosc];
}
}
A w klasie gracz wygląda to tak:
class Gracz {
Karta* Karty_gracz[10];
int suma = 0;
int licznik_kart = 0;
bool pass = false;
//size_t liczba_kart = sizeof(Karty_gracz) / sizeof(Karty_gracz[10]);
string nazwa_gracza;
char PosiadaneKarty(Karta* _Karty_gracz)
{
for (int i = 0; i < licznik_kart; i++) {
char kolor = _Karty_gracz.getKolor();
char figura = _Karty_gracz.getFigura();
switch (kolor) {
case 3:
cout << figura << endl;
cout << "Trefl" << endl;
break;
case 4:
cout << figura << endl;
cout << "Pik" << endl;
break;
case 5:
cout << figura << endl;
cout << "Kier" << endl;
break;
case 6:a
cout << figura << endl;
cout << "Karo" << endl;
break;
default:
cout << "Brak Kart" << endl;
break;
}
}
}
Niżej zadam pytanie :
- Czy to w ogóle, będzie działać ? czy muszę pokombinować na wskaźnikach ?
- Czy takie metody jak tu zrobiłem mają sens ? Ma to jakąś rację bytu, w sensie czy używanie metody wysyłając do niej poszczególny obiekt z tablicy obiektów jest w ogóle możliwe ? czy najpierw muszę się dostać do poszczególnego obiektu a dopiero potem wysłać go jako pojedyńczy obiekt, a nie obiekt w tablicy ?
dodatkowe:
3. Jak dopisać do konstruktora klasy,w której jest użyta zmienna char[20] nazwe podawaną przez użytkownika ? Trzeba przeciążyć operator ?
Pozdrawiam i z góry dziękuję za pomoc :)