Kod:
void Oczko::graj()
{
bool koniecGry = false;
// status gracza [ 0 = Gra, 1 = Zrezygnował, 2 - Zdyskwalifikowany ]
int status[8] = { 0 };
int wartosci = 0, najlepszyGracz = -1;
this->talia = new Talia();
this->talia->tasuj();
while(true)
{
for(int i = 0; i < this->iloscGraczy; i++)
{
if (tablicaGraczy[i]->policzPunkty() > 21)
{
cout << "Gracz " << tablicaGraczy[i]->dajImie() << " zostal wyeliminowany z gry" << endl;
}
else if (tablicaGraczy[i]->czyNastepna() == true)
{
Karta* karta = this->talia->dajKarte();
tablicaGraczy[i]->dodajKarte(karta);
cout << "Gracz " << tablicaGraczy[i]->dajImie() << " wylosowal karte \"" << karta->dajAwers() + "\"" << endl;
if (tablicaGraczy[i]->policzPunkty() == 21)
{
cout << "#############################################################" << endl;
cout << "Gracz " << tablicaGraczy[i]->dajImie() << " wygral te rozrywke zdobywajac 21 punktow!!" << endl;
cout << "#############################################################" << endl;
tablicaGraczy[i]->nowaGra();
return;
}
else if (tablicaGraczy[i]->policzPunkty() > 21) status[i] = 2;
}
else
{
cout << "Gracz " << tablicaGraczy[i]->dajImie() << " zrezygnowal z pobierania kart" << endl;
status[i] = 1;
}
cout << "Obecna ilosc punktow tego gracza to: " << tablicaGraczy[i]->policzPunkty() << endl;
cout << "----------------------" << endl;
// sprawdzanie ostatecznych poczyniań graczy w tej rundzie
koniecGry = true;
for(int u = 0; u < this->iloscGraczy; u++)
{
if (status[u] == 0)
{
koniecGry = false;
break;
}
}
if (koniecGry)
{
for(int u = 0; u < this->iloscGraczy; u++)
{
if (status[u] == 2) continue;
else if (najlepszyGracz == -1) najlepszyGracz = u;
else if (tablicaGraczy[u]->policzPunkty() > tablicaGraczy[najlepszyGracz]->policzPunkty())
najlepszyGracz = u;
}
cout << "#############################################################" << endl;
cout << "Gracz " << tablicaGraczy[najlepszyGracz]->dajImie() << " wygral te rozrywke zdobywajac " << tablicaGraczy[najlepszyGracz]->policzPunkty() << " punktow!!" << endl;
cout << "#############################################################" << endl;
tablicaGraczy[najlepszyGracz]->nowaGra();
return;
}
}
}
}
Kod:
#include "gracz.h"
Gracz::Gracz()
{
this->ileKart = 0;
}
Gracz::~Gracz()
{
}
void Gracz::ustawImie(string imie)
{
this->imie = imie;
}
string Gracz::dajImie()
{
return this->imie;
}
void Gracz::dodajKarte(Karta *k)
{
this->reka[ileKart] = k;
this->ileKart++;
}
int Gracz::policzPunkty()
{
int wszystkiePunkty = 0;
for (int i = 0; i < ileKart; i++)
wszystkiePunkty += this->reka[i]->wartoscOczko();
return wszystkiePunkty;
}
void Gracz::wyswietlKarty()
{
for (int i = 0; i < ileKart; i++)
cout << this->reka[i]->dajAwers() << endl;
}
Kod:
#include <iostream>
#include <string>
#include "karta.h"
using namespace std;
class Gracz
{
public:
Gracz();
~Gracz();
virtual void nowaGra() = 0;
void ustawImie(string imie);
string dajImie();
void dodajKarte(Karta *k);
int policzPunkty();
void wyswietlKarty();
virtual bool czyNastepna() = 0;
protected:
Karta *reka[10];
int ileKart;
string imie;
};
I Wygrywam ja, gracz fizyczny
II Wygrywa któryś z graczy komputerowych
III Oboje przegrywamy (mamy powyżej 21 punktów) ale najlepszym graczem zostaje ta osoba, która była najbliżej 21 punktów
Problem jest z ostatnim stanem, kiedy ja i komputer przekroczymy ilość punktów potrzebną do wygrania program się wysypuje wyrzucając mi "Exception thrown: read access violation. this was 0xCCCCCCCC." i kompilator wskazuje na pogrubioną funkcję policzPunkty w klasie gracza. Kompletnie nie wiem co jest nie tak, szukając odpowiedzi na mój problem znalazłem parę wątków na stackoverflow i głównym powodem u innych ludzi był niezainicjowany wskaźnik lub wskaźnik, który został uwolniony. Szczerze powiem, że mimo tej informacji nadal nie widzę u siebie problemu. Przesiedział bym nad tym chętnie jeszcze sam ale termin oddania wszystkich projektów mnie goni więc zwracam się o pomoc do was. Jeśli trzeba mogę podesłać wszystkie pliki źródłowe.
Zakładki