-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathjudge.cpp
67 lines (57 loc) · 1.77 KB
/
judge.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#include "judge.h"
#include <fstream>
#include <cstdlib>
// W konstruktrze wczytujemy statystyki z pliku jesli istnieja
Judge::Judge():game(NULL){
stat = new Statistics("stats.dat");
}
// niszczymy obiekt gry i statystyk w destruktorze
Judge::~Judge(){
if(game != NULL) delete game;
delete stat;
}
// nowa gra o zadanym typie
void Judge::newGame(int type){
game = new Game(type); // nowy obiekt gry
game->addObserver(this); // arbiter bedzie obserwowal gre
game->addObserver(stat); // statystyki beda rejestrowane po zakonczeniu rozgrywki
game->loop(); // glowna petla gry
}
// wczytaj gre z podanego pliku
void Judge::loadGame(const char * s){
game = new Game(s); // nowy obiekt gry ladowany z pliku
if(game != NULL){
// dodawanie obserwatorow
game->addObserver(this);
game->addObserver(stat);
game->loop(); // glowna petla gry
}
}
// zapisz gre do podanego pliku
bool Judge::saveGame(const char * s){
ofstream fout(s); // strumien wyjsciowy
if(fout.is_open()){ // jesli udalo sie otworzyc
fout << *game; // zapisujemy obiekt gry(serializacja)
fout.close(); // zamknij plik
return true; // sukces!
}
return false; // niepowodzenie!
}
// wyswietl statystyki
void Judge::stats() const {
std::cout << "====== RANKING =======\n";
std::cout << *stat; // pokaz obiekt statystyk
}
// zmiana stanu gry
void Judge::update(Observable * o){
Game * g = dynamic_cast<Game*>(o); // rzutuj na obiekt gry
// brak wiadomosci w obiekcie oznacza koniec rozgrywki
if(g->getState() == "")
// pobierz nazwe zwyciezcy i pokaz na ekranie
std::cout << "Gracz " + dynamic_cast<Game*>(o)->winner().getName() << " wygrywa!\n";
else {
system("cls");
// w innym przypadku pokaz zmiane stanu na ekranie
std::cout << g->getState();
}
}