Dzień Dobry
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
#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; } } }
oczko.h
#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
talia.h
#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
talia.cpp
#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]); }*/ }
gracz.h
#ifndef GRACZ_H #define GRACZ_H #include "karta.h" #include <vector> class Gracz { vector<Karta *> tablica; public: Gracz(); void dodajKarte(Karta* k); void wyswietl(); int policzPunkty(); virtual bool czyNastepna(); }; #endif // GRACZ_H
gracz.cpp
#include "gracz.h" Gracz::Gracz() { } void Gracz::dodajKarte(Karta *k) { tablica.push_back(k); } void Gracz::wyswietl() { //for(int i=0;i<tablica.size();++i) for(auto k:tablica) k->wyswietl(); } int Gracz::policzPunkty() { int punkty=0; for(Karta *k:tablica) punkty+=k->dajWartosc(); return punkty; } bool Gracz::czyNastepna() { if(policzPunkty()<=15) return true; else return false; }
czlowiek.h
#ifndef CZLOWIEK_H #define CZLOWIEK_H #include "gracz.h" class Czlowiek: public Gracz { public: Czlowiek(); bool czyNastepna(); }; #endif // CZLOWIEK_H
czlowiek.cpp
#include "czlowiek.h" #include <iostream> using namespace std; Czlowiek::Czlowiek() { } bool Czlowiek::czyNastepna() { cout<<"Twoje karty to:"<<endl; wyswietl(); char wybor; do { cout<<"Czy chcesz następną kartę?[T/N]"; cin>>wybor; if(wybor=='T' || wybor=='t') return true; else if(wybor=='N' || wybor=='n') return false; cout<<"wybrano nieprawidlowa opcje"<<endl; cin.sync(); cin.ignore(); }while(wybor); }
main.cpp
#include <iostream> #include <string> #include "oczko.h" using namespace std; int main() { Oczko o; o.graj(); return 0; }