#include <game.h>
Veřejné typy | |
| typedef std::vector < std::vector< std::list < MapObject * > > > | map_array_t |
| Typ dvourozměrného pole mapy, na každém políčku seznam objektů s rozměry. | |
| typedef std::list< DynamicMO * > | dynamicMOs_t |
| Typ seznamu dynamickych objektu. | |
| typedef std::vector< StaticMO * > | staticMOs_t |
| Typ seznamu statickych objektu. | |
Veřejné metody | |
| Game (const GameBase &base, GameTools *gameTools, bool deathmatch=false, bool bombsatend=false) | |
| Inicializace hry. | |
| ~Game () | |
| Uvolnění naalokovaaných objektů. | |
| void | play (SDL_Surface *window) |
| Spuštění hry. | |
| bool | success () const |
| Info o ukončení hry. | |
| bool | get_player (Uint16 player_num, PlayerProperties &prop) const |
| Info o hráči. | |
| Uint16 | winner () |
| Číslo hráče, který je živý. | |
| bool | field_canGoOver (Uint16 x, Uint16 y, bool check_bomb=true) |
| Políčko lze přejít. | |
| bool | field_canGoOver (const field_t &field, bool check_bomb=true) |
| Políčko lze přejít. | |
| bool | field_withObject (Uint16 x, Uint16 y, const isTypeOf &isType) |
| Políčko lze přeletet. | |
| bool | field_withObject (const field_t &field, const isTypeOf &isType) |
| Na políčku je typ objektu. | |
| MapObject * | field_getObject (Uint16 x, Uint16 y, const isTypeOf &isType) |
| První objekt zadaného typu. | |
| MapObject * | field_getObject (const field_t &field, const isTypeOf &isType) |
| První objekt zadaného typu. | |
| void | remove_object (DynamicMO *obj) |
| Vyhození objektu z mapy. | |
| void | insert_object (Uint16 x, Uint16 y, DynamicMO *obj) |
| Vloží objekt na políčko. | |
| void | insert_object (const field_t &field, DynamicMO *obj) |
| Vloží objekt na políčko. | |
| void | change_position (Uint16 old_x, Uint16 old_y, Uint16 new_x, Uint16 new_y, MapObject *obj) |
| Pohyb z políčka na políčko. | |
| void | change_position (const field_t &old_field, const field_t &new_field, MapObject *obj) |
| Pohyb z políčka na políčko. | |
| void | plant_bomb (Uint16 player_num, Uint16 x, Uint16 y, Bomb *bomb) |
| Pro hráče: položit bombu. | |
| void | plant_bomb (Uint16 player_num, const field_t &field, Bomb *bomb) |
| Pro hráče: položit bombu. | |
| Uint16 | count_bombs (Uint16 player_num) |
| Pro hráče: spočítat položené bomby. | |
| void | remove_bombs_timer (Uint16 player_num) |
| Pro hráče: odstranit ruční odpalování u bomb. | |
| void | explode_bomb (Uint16 player_num) |
| Pro hráče: nechat bouchnout první bombu. | |
| void | add_others_bonus (Uint16 player_num, const char *bonus_name) |
| Pro hráče (nebo spíše bonusy): nechat bouchnout první bombu. | |
| void | shake_views () |
| Třesení pohledy. | |
| Uint16 | map_height () const |
| Výška mapy. | |
| Uint16 | map_width () const |
| Šířka mapy. | |
Veřejné atributy | |
| GameTools * | tools |
| Pointer pro nadstavbové věci pro hru. | |
Privátní typy | |
| typedef std::list< Bomb * > | bombs_t |
| Typ seznamu bomb. | |
| typedef std::map< Uint16, player_t > | players_t |
| Typ seznamu hráčů hry, který umí rychle najít hráče podle čísla. | |
| typedef players_t::iterator | players_it |
| Typ iterátoru do seznamu hráčů. | |
Privátní metody | |
| void | set_one_win_view_ (SDL_Rect &win_view, SDL_Surface *window) |
| Nastavení obdélníku jako jedíného pohledu na obrazovce. | |
| void | check_players_view_ (SDL_Surface *window) |
| Zkontrolovat není-li třeba rozdělit či sloučit obrazovku. | |
| void | set_players_view_ (SDL_Surface *window) |
| Nastavení pohledů pro hráče. | |
| void | set_players_view_1_ (SDL_Surface *window) |
| Nastavení pohledů - jeden pohled na obrazovce. | |
| void | set_players_view_2_ (SDL_Surface *window) |
| Nastavení pohledů - dva pohledy na obrazovce. | |
| void | set_players_view_4_ (SDL_Surface *window) |
| Nastavení pohledů - 3 nebo 4 pohledy na obrazovce. | |
| Uint16 | count_rect_shift_ (Uint16 player_coor, Uint16 rect_half_size, Uint16 map_size) const |
| Spočítá posun mapy podle pozice hráče. | |
| void | count_players_average_ (Sint16 &shift_x, Sint16 &shift_y) |
| void | draw_ (SDL_Surface *window) |
| Vykreslení obrazovky. | |
| void | draw_players_view_ (SDL_Surface *window, Uint16 player_num) |
| Vykreslení pohledu hráče. | |
| void | draw_one_view_ (SDL_Surface *window) |
| Vykreslení jednoho pohledu pro více hráčů. | |
| void | draw_map_ (bool bg, SDL_Surface *window, SDL_Rect &map_view, Uint16 from_x, Uint16 from_y, Uint16 to_x, Uint16 to_y) |
| Vykreslení části mapy. | |
| void | draw_map_field_bg_ (SDL_Surface *window, SDL_Rect &map_view, Uint16 column, Uint16 field) |
| Vykreslení pozadí jednoho políčka mapy. | |
| void | draw_map_field_fg_ (SDL_Surface *window, SDL_Rect &map_view, Uint16 column, Uint16 field) |
| Vykreslení popředí jednoho políčka mapy. | |
| bool | move_ () |
| Hýbnutí světem. | |
| void | update_ () |
| Posunutí animací. | |
| void | load_placed_MOs_ (const GameBase::base_array_t &base_array) |
| Zkopírování pevně umístěných objektů. | |
| void | load_generated_MOs_ (const GameBase &base) |
| Vygenerování neumístěných objektů. | |
| void | generate_boxes_ (const GameBase &base, GameBase::generatedMOs_t::const_iterator begin, GameBase::generatedMOs_t::const_iterator end) |
| Vygenerování beden. | |
| void | generate_bonuses_ (GameBase::generatedMOs_t::const_iterator begin, GameBase::generatedMOs_t::const_iterator end) |
| Vygenerování bonusů. | |
| void | generate_creatures_ (const GameBase &base, GameBase::generatedMOs_t::const_iterator begin, GameBase::generatedMOs_t::const_iterator end) |
| Vygenerování příšer. | |
| void | insert_MO_ (const MapObject *mapObject, Uint16 width, Uint16 height, Uint16 column, Uint16 field) |
| Vytvoření a vložení objektu do mapy. | |
Privátní atributy | |
| staticMOs_t | staticMOs_ |
| Seznam statických objektů mapy. | |
| dynamicMOs_t | dynamicMOs_ |
| Seznam dynamických objektů mapy. | |
| map_array_t | map_array_ |
| Dvourozměrné pole mapy, na každém políčku seznam objektů na něm položených. | |
| Uint16 | remaining_creatures_ |
| Počet žijících příšer. | |
| Uint16 | remaining_periods_ |
| Doba do ukončení hry po zabití. | |
| bool | deathmatch_ |
| Jedná se o deathmatch. | |
| bool | bombsatend_ |
| Násilné ukončení hry. | |
| players_t | players_ |
| Hráči hry. | |
| bool | split_screen_ |
| Jestli je aktualne rozdelena obrazovka. | |
Třídy | |
| struct | player_t |
| Typ hráče s jeho pohledy (na okno a na mapu), třesením pohledu a položenými bombami. ... | |
Instance třídy Game obstarává jednu konkrétní hru. Může to být deathmatch nebo běžný level. Game může vytvořit pouze jedinou instanci, která je typicky držena z GameIntro nebo DeathmatchIntro. Implementuje nástroje, kterými tuto skutečnost hlídá a poskytuje svůj pointer globálně, prostřednictvím makra GAME. Ve svých strukturách uchovává statické i dynamické objekty hry. Stará se o hru samotnou, její spuštění, správné časování a ukončení. Podává informace o typu ukončení hry.
| typedef std::vector< std::vector< std::list< MapObject* > > > Game::map_array_t |
Typ dvourozměrného pole mapy, na každém políčku seznam objektů s rozměry.
| typedef std::list< DynamicMO* > Game::dynamicMOs_t |
Typ seznamu dynamickych objektu.
| typedef std::vector< StaticMO* > Game::staticMOs_t |
Typ seznamu statickych objektu.
typedef std::list<Bomb*> Game::bombs_t [private] |
Typ seznamu bomb.
typedef std::map< Uint16, player_t > Game::players_t [private] |
Typ seznamu hráčů hry, který umí rychle najít hráče podle čísla.
typedef players_t::iterator Game::players_it [private] |
Typ iterátoru do seznamu hráčů.
| Game::Game | ( | const GameBase & | base, | |
| GameTools * | gameTools, | |||
| bool | deathmatch = false, |
|||
| bool | bombsatend = false | |||
| ) |
Inicializace hry.
| base | zaklad hry | |
| gameTools | pomucky pro hru | |
| deathmatch | zda se jedna o deathmatch (nebo cooperative mode) | |
| bombsatend | zda se maji na konci (v deathmatchi) zacit objevovat bomby zatim neimplementovano |

| Game::~Game | ( | ) |
Uvolnění naalokovaaných objektů.
Zruší nejdříve všechny statické, následně všechny dynamické objekty v mapě. Nemaže presumpce, ty si obstará bomba. Vynuluje myself_pointer_.
| void Game::play | ( | SDL_Surface * | window | ) |
Spuštění hry.
V realtime modelu spustí hru jako takovou, vykresluje objekty, hýbe objekty, hlídá jestli hra skončila.
| window | surface okna pro vykreslení |


| bool Game::success | ( | ) | const |
Info o ukončení hry.

| bool Game::get_player | ( | Uint16 | player_num, | |
| PlayerProperties & | prop | |||
| ) | const |
Info o hráči.
Zjistí jestli hráč žije, nastaví jeho vlastnosti.
| player_num | číslo hráče | |
| prop | vlastnosti hráče |

| Uint16 Game::winner | ( | ) |
Číslo hráče, který je živý.
Užitečné pro deathmatch. Nutno pro jistotu správnosti výsledku použít success().

| bool Game::field_canGoOver | ( | Uint16 | x, | |
| Uint16 | y, | |||
| bool | check_bomb = true | |||
| ) |
Políčko lze přejít.
| x | x-ová souřadnice políčka | |
| y | y-ová souřadnice políčka | |
| check_bomb | zda se mají také kontrolovat bomby |


| bool Game::field_canGoOver | ( | const field_t & | field, | |
| bool | check_bomb = true | |||
| ) | [inline] |
Políčko lze přejít.

| bool Game::field_withObject | ( | Uint16 | x, | |
| Uint16 | y, | |||
| const isTypeOf & | isType | |||
| ) |
Políčko lze přeletet.
Na políčku je typ objektu.
| x | x-ová souřadnice políčka | |
| y | y-ová souřadnice políčka | |
| isType | predikat typu objektu, na který se ptáme |

Na políčku je typ objektu.

První objekt zadaného typu.
| x | x-ová souřadnice políčka | |
| y | y-ová souřadnice políčka | |
| isType | predikat typu objektu, na který se ptáme |

První objekt zadaného typu.

| void Game::remove_object | ( | DynamicMO * | obj | ) |
Vyhození objektu z mapy.
Specifikovaný objekt vyhodí ze seznamu dynamických objektů, z mapy a následně jej dealokuje!
| obj | dynamický objekt, který chceme vyhodit |


| void Game::insert_object | ( | Uint16 | x, | |
| Uint16 | y, | |||
| DynamicMO * | obj | |||
| ) |
Vloží objekt na políčko.
Vloží dynamický objekt do mapy a seznamu dynamických objektů. Instance Game se později postará o jeho dealokování.
| x | souřadnice políčka pro vložení | |
| y | souřadnice políčka pro vložení | |
| obj | objekt, který chceme vložit |

Vloží objekt na políčko.

| void Game::change_position | ( | Uint16 | old_x, | |
| Uint16 | old_y, | |||
| Uint16 | new_x, | |||
| Uint16 | new_y, | |||
| MapObject * | obj | |||
| ) |
Pohyb z políčka na políčko.
Vyhodí objekt ze starého políčka a vloží jej na nové.
| old_x | stará souřadnice v políčkách | |
| old_y | stará souřadnice v políčkách | |
| new_x | nová souřadnice v políčkách | |
| new_y | nová souřadnice v políčkách | |
| obj | pointer na objekt, který chceme přesunout |

| void Game::change_position | ( | const field_t & | old_field, | |
| const field_t & | new_field, | |||
| MapObject * | obj | |||
| ) | [inline] |
Pohyb z políčka na políčko.

| void Game::plant_bomb | ( | Uint16 | player_num, | |
| Uint16 | x, | |||
| Uint16 | y, | |||
| Bomb * | bomb | |||
| ) |
Pro hráče: položit bombu.
Umístí bombu do mapy, přidá bombu do seznamu hráčových bomb.
| player_num | číslo hráče | |
| x | souřadnice bomby v políčkách | |
| y | souřadnice bomby v políčkách | |
| bomb | pointer na bombu, kterou chceme položit |


Pro hráče: položit bombu.

| Uint16 Game::count_bombs | ( | Uint16 | player_num | ) |
Pro hráče: spočítat položené bomby.
Spočítá položené nevybouchlé bomby hráče.
| player_num | číslo hráče |
| void Game::remove_bombs_timer | ( | Uint16 | player_num | ) |
Pro hráče: odstranit ruční odpalování u bomb.
Odstraní položeným bombám hráče ruční odpalování.
| player_num | číslo hráče |
| void Game::explode_bomb | ( | Uint16 | player_num | ) |
Pro hráče: nechat bouchnout první bombu.
Nechá vybouchnout první bombu hráče, pokud nějaká je.
| player_num | číslo hráče |
| void Game::add_others_bonus | ( | Uint16 | player_num, | |
| const char * | bonus_name | |||
| ) |
Pro hráče (nebo spíše bonusy): nechat bouchnout první bombu.
Všem ostatním hráčům přidá bonus.
| player_num | číslo hráče který bonus nedostane | |
| bonus_name | jméno bonusu |

| void Game::shake_views | ( | ) |
Třesení pohledy.

| Uint16 Game::map_height | ( | ) | const |
Výška mapy.

| Uint16 Game::map_width | ( | ) | const |
Šířka mapy.

| void Game::set_one_win_view_ | ( | SDL_Rect & | win_view, | |
| SDL_Surface * | window | |||
| ) | [private] |
Nastavení obdélníku jako jedíného pohledu na obrazovce.
Nastavi obdelnik win_view, ktery bude pouzit jako jediny pohled v okne. Typicky přes celé okno, velikost je však omezena.
| [out] | win_view | obdelnik pohledu |
| window | surface okna, které rozděluji |


| void Game::check_players_view_ | ( | SDL_Surface * | window | ) | [private] |
Zkontrolovat není-li třeba rozdělit či sloučit obrazovku.
Podle nastavení v configu, počtu a pozice hráčů zkontroluje, jestli není potřeba rozdělit či sloučit obrazovku.
| window | surface okna, které rozděluji |


| void Game::set_players_view_ | ( | SDL_Surface * | window | ) | [private] |
Nastavení pohledů pro hráče.
Podle nastavení v configu a počtu hráčů rozdělí hrací plochu do několika pohledů.
| window | surface okna, které rozděluji |


| void Game::set_players_view_1_ | ( | SDL_Surface * | window | ) | [private] |
Nastavení pohledů - jeden pohled na obrazovce.
Jeden pohled společný pro všechny hráče. Typicky přes celé okno, velikost je však omezena.
| window | surface okna, které rozděluji |


| void Game::set_players_view_2_ | ( | SDL_Surface * | window | ) | [private] |
Nastavení pohledů - dva pohledy na obrazovce.
Dva pohledy pro dva hráče. Řeší zda rozdělovat vodorovně či svisle, kdo kde bude. Každý musí mít stejně velký prostor.
| window | surface okna, které rozděluji |


| void Game::set_players_view_4_ | ( | SDL_Surface * | window | ) | [private] |
Nastavení pohledů - 3 nebo 4 pohledy na obrazovce.
Čtyři pohledy pro tři nebo čtyři hráče. Vždy rozdělí na čtvrtiny(dva sloupce, dva řádky), je předem jasně dáno, kdo kde bude. Každý má stejně velký prostor.
| window | surface okna, které rozděluji |


| Uint16 Game::count_rect_shift_ | ( | Uint16 | player_coor, | |
| Uint16 | rect_half_size, | |||
| Uint16 | map_size | |||
| ) | const [private] |
Spočítá posun mapy podle pozice hráče.
Pro jednu souřadnici (x nebo y) počítá, o kolik je třeba posunout mapu, aby byl hřáč uprostřed a zároveň byl dostatečně využit pohled (roh mapy nesmí být uvnitř pohledu).
| player_coor | souřadnice hráče | |
| rect_half_size | polovina rozměru pohledu | |
| map_size | rozměr mapy |

| void Game::count_players_average_ | ( | Sint16 & | shift_x, | |
| Sint16 & | shift_y | |||
| ) | [private] |
Spocita posunuti mapy aby byl prumer pozic hracu uprostred.
| [out] | shift_x | posunuti po ose x |
| [out] | shift_y | posunuti po ose y |

| void Game::draw_ | ( | SDL_Surface * | window | ) | [private] |
Vykreslení obrazovky.
Vykreslí pohledy a panely hráčů.
| window | surface, do kterého máme kreslit |


| void Game::draw_players_view_ | ( | SDL_Surface * | window, | |
| Uint16 | player_num | |||
| ) | [private] |
Vykreslení pohledu hráče.
Vykreslí pohled určitého hráče. Zjišťuje posunutí mapy vůči pohledu, vykresluje prvně vše v pozadí, pak vše v popředí.
| window | surface, do kterého máme kreslit | |
| player_num | číslo hráče, pro kterého máme vykreslit pohled |

| void Game::draw_one_view_ | ( | SDL_Surface * | window | ) | [private] |
Vykreslení jednoho pohledu pro více hráčů.
Jako střed vykreslování vezme aritmetický průměr pozic hráčů. Zjišťuje posunutí mapy vůči pohledu, vykresluje prvně vše v pozadí, pak vše v popředí.
| window | surface, do kterého máme kreslit |


| void Game::draw_map_ | ( | bool | bg, | |
| SDL_Surface * | window, | |||
| SDL_Rect & | map_view, | |||
| Uint16 | from_x, | |||
| Uint16 | from_y, | |||
| Uint16 | to_x, | |||
| Uint16 | to_y | |||
| ) | [private] |
Vykreslení části mapy.
Vykreslí část mapy v pohledu.
| bg | jestli se má kreslit jen pozadí (nebo jen popředí) | |
| window | surface okna pro vykreslení | |
| map_view | pohled | |
| from_x | x-ová souřadnice počátku vykreslování | |
| from_y | y-ová souřadnice počátku vykreslování | |
| to_x | x-ová souřadnice konce vykreslování | |
| to_y | y-ová souřadnice konce vykreslování |


| void Game::draw_map_field_bg_ | ( | SDL_Surface * | window, | |
| SDL_Rect & | map_view, | |||
| Uint16 | column, | |||
| Uint16 | field | |||
| ) | [private] |
Vykreslení pozadí jednoho políčka mapy.
Vykreslí pozadí (background, floorobject) jednoho políčka mapy.
| window | surface okna pro vykreslení | |
| map_view | pohled | |
| column | x-ová souřadnice políčka mapy | |
| field | y-ová souřadnice políčka mapy |

| void Game::draw_map_field_fg_ | ( | SDL_Surface * | window, | |
| SDL_Rect & | map_view, | |||
| Uint16 | column, | |||
| Uint16 | field | |||
| ) | [private] |
Vykreslení popředí jednoho políčka mapy.
Seřadí objekty na políčku. Vykreslí objekty v popředí jednoho políčka mapy.
| window | surface okna pro vykreslení | |
| map_view | pohled | |
| column | x-ová souřadnice políčka mapy | |
| field | y-ová souřadnice políčka mapy |


| bool Game::move_ | ( | ) | [private] |
Hýbnutí světem.
Projde všechny dynamické objekty hry a zavolá na nich fci move(). V průběhu shromažduje objekty, které nakonec vyhodí.


| void Game::update_ | ( | ) | [private] |
Posunutí animací.
Projde všechny dynamické i statické objekty hry a zavolá na nich fci update(). Obnoví i zatřasení pohledy.

| void Game::load_placed_MOs_ | ( | const GameBase::base_array_t & | base_array | ) | [private] |
Zkopírování pevně umístěných objektů.
Okopíruje zadanou mapu, jednak vytvoří základní rozměry mapy, jednak okopíruje umístěné objekty.
| base_array | pole s pevně umístěnými objekty |


| void Game::load_generated_MOs_ | ( | const GameBase & | base | ) | [private] |
Vygenerování neumístěných objektů.
Vygeneruje v pořadí bedny, bonusy a příšery.
| base | základ hry, ze kterého se mají generované objekty použít |


| void Game::generate_boxes_ | ( | const GameBase & | base, | |
| GameBase::generatedMOs_t::const_iterator | begin, | |||
| GameBase::generatedMOs_t::const_iterator | end | |||
| ) | [private] |
Vygenerování beden.
Zjistí volná políčka pro vygenerování beden a pokusí se náhodně rozmístit všechny bedny v zadaném intervalu.
| base | reference na GameBase kvuli allowed_array_ a allowed_boxes_count_ | |
| begin | iterator s nahodnym pristupem, začátek beden | |
| end | iterator s nahodnym pristupem za koncem beden |


| void Game::generate_bonuses_ | ( | GameBase::generatedMOs_t::const_iterator | begin, | |
| GameBase::generatedMOs_t::const_iterator | end | |||
| ) | [private] |
Vygenerování bonusů.
Zjistí políčka pro vygenerování bonusů a pokusí se náhodně rozmístit všechny bonusy v zadaném intervalu.
| begin | začátek bonusů | |
| end | konec bonusů |


| void Game::generate_creatures_ | ( | const GameBase & | base, | |
| GameBase::generatedMOs_t::const_iterator | begin, | |||
| GameBase::generatedMOs_t::const_iterator | end | |||
| ) | [private] |
Vygenerování příšer.
Zjistí volná políčka pro vygenerování příšer a pokusí se náhodně rozmístit všechny příšery v zadaném intervalu.
| base | reference na GameBase kvuli allowed_array_ | |
| begin | začátek příšer | |
| end | konec příšer |


| void Game::insert_MO_ | ( | const MapObject * | mapObject, | |
| Uint16 | width, | |||
| Uint16 | height, | |||
| Uint16 | column, | |||
| Uint16 | field | |||
| ) | [private] |
Vytvoření a vložení objektu do mapy.
Vytvoří objekt, vloží jej do seznamu statických nebo dynamických objektů, vloží ho do mapy na všechna políčka, která zabírá.
| mapObject | objekt k okopírování | |
| width | počet políček zabíraných v mapě na šířku | |
| height | počet políček zabíraných v mapě na výšku | |
| column | sloupec mapy, ve kterém je levý roh objektu | |
| field | řádek mapy, ve kterém je horní roh objektu |
| string | chybové hlášení při vkládání objektu, jehož typ není ve výčtu. Typicky se stane, že programátor přidá typ objektu a zapomene ho přidat i sem. |


Pointer pro nadstavbové věci pro hru.
staticMOs_t Game::staticMOs_ [private] |
Seznam statických objektů mapy.
dynamicMOs_t Game::dynamicMOs_ [private] |
Seznam dynamických objektů mapy.
map_array_t Game::map_array_ [private] |
Dvourozměrné pole mapy, na každém políčku seznam objektů na něm položených.
Uint16 Game::remaining_creatures_ [private] |
Počet žijících příšer.
Uint16 Game::remaining_periods_ [private] |
Doba do ukončení hry po zabití.
bool Game::deathmatch_ [private] |
Jedná se o deathmatch.
bool Game::bombsatend_ [private] |
Násilné ukončení hry.
players_t Game::players_ [private] |
Hráči hry.
bool Game::split_screen_ [private] |
Jestli je aktualne rozdelena obrazovka.
1.5.6