Na zajęciach mamy za zadanie rozszerzyć, udoskonalić działanie gry w oczko. M.in. chciałabym dodać kolejnych graczy. I tu jest problem, że nie do końca wiem jak. Myślałam o tablicy obiektów, że użytkownik na początku napiszę liczbę graczy i tyle się utworzy. Tylko nie do końca rozumiem działanie programu, nie było mnie na jednych zajęciach. Czy mógłby ktoś spojrzeć na plik oczko.cpp i może w jakiś krótkich słowach wytłumaczy mi działanie, bo tego fragmentu nie rozumiem, nie wiem do końca jak działa.
oczko.cpp
Kod: Zaznacz cały
#include "oczko.h"
#include <iostream>
using namespace std;
Oczko::Oczko()
{
t=new Talia(52);
t->wartosciOczko();
for(int i=0;i<5;++i)
{
g[i]=NULL;
}
g[0]=new Gracz;
g[1]=new Czlowiek;
}
Oczko::~Oczko()
{
delete t;
for(int i=0;i<5;++i)
if(g[i]!=NULL)
delete g[i];
}
void Oczko::graj()
{
t->tasuj();
bool warunek;
do
{
warunek=false;
for(int i=0;i<5;++i)
{
if(g[i]!=NULL && g[i]->czyNastepna())
{
warunek=true;
g[i]->dodajKarte(t->dajKarte());
}
}
}while(warunek);
for(int i=0;i<5;++i)
{
if(g[i]!=NULL)
{ g[i]->wyswietl();
cout<<"Punkty: "<<g[i]->policzPunkty()<<endl;
}
}
}
Kod: Zaznacz cały
#ifndef OCZKO_H
#define OCZKO_H
#include "talia.h"
#include "czlowiek.h"
class Oczko
{
Talia *t;
Gracz *g[5];
public:
Oczko();
~Oczko();
void graj();
};
#endif // OCZKO_H
Kod: Zaznacz cały
#ifndef TALIA_H
#define TALIA_H
#include "karta.h"
class Talia
{
Karta **tablica;
int ilosc;
int indeks;
public:
Talia(int ilosc=52);
~Talia();
Karta *dajKarte();
void wyswietl();
void wartosciWojna();
void wartosciOczko();
void tasuj();
};
#endif // TALIA_H
Kod: Zaznacz cały
#include "talia.h"
#include <ctime>
#include <cstdlib>
#include <algorithm>
using namespace std;
Talia::Talia(int ilosc):ilosc(ilosc),indeks(0)
{
tablica=new Karta*[ilosc];
for(int i=0;i<ilosc;++i)
tablica[i]=new Karta(i%4,12-(i%52)/4,0);
}
Talia::~Talia()
{
for(int i=0;i<ilosc;++i)
if(tablica[i]!=NULL)
delete tablica[i];
delete []tablica;
}
Karta * Talia::dajKarte()
{
return tablica[indeks++];
}
void Talia::wyswietl()
{
for(int i=indeks;i<ilosc;++i)
tablica[i]->wyswietl();
}
void Talia::wartosciWojna()
{
for(int i=0;i<ilosc;++i)
tablica[i]->ustawWartosc(tablica[i]->dajFigure());
}
void Talia::wartosciOczko()
{
for(int i=0;i<ilosc;++i)
{
int numer=tablica[i]->dajFigure();
tablica[i]->ustawWartosc(numer==12?11:(numer%9)+2);
}
}
void Talia::tasuj()
{
srand(time(NULL));
random_shuffle(tablica,tablica+ilosc);
/*for(int i=0;i<ilosc;++i)
{
int a=rand()%ilosc;
int b=rand()%ilosc;
//Karta * temp=tablica[a];
//tablica[a]=tablica[b];
//tablica[b]=temp;
swap(tablica[a],tablica[b]);
}*/
}