#include <AI.h>
Veřejné metody | |
AI_9 (Creature *creature) | |
Zavolá konstruktor AI_6. | |
virtual void | move () |
Hýbne nestvůrou. | |
virtual Sint16 | type () const |
Typ inteligence. | |
virtual | ~AI_9 () |
Destruktor. | |
Chráněné typy | |
enum | wanted_t { WANTED, UNWANTED } |
Typ rozlišující chtěné a nechtěné. ... | |
typedef field_t | traceField_t |
Typ pro souřadnice políčka. | |
typedef struct AI_9::traceValue_t | traceValue_t |
Typ pro hodnotu políčka trasovacího pole. | |
typedef std::map< traceField_t, traceValue_t > | traceArray_t |
Typ trasovacího pole. | |
typedef std::queue< traceField_t > | fieldsQueue_t |
Typ fronty políček. | |
Chráněné metody | |
PositionIndex | findPosIndexToWalkFromRisk_ (isTypeOf &isBlocking) |
Najde index pozice, na kterou máme jít abychom se dostali z nebezpečí. | |
void | evalTraceArray_ (traceArray_t &traceArray, isTypeOf &isBlocking, isTypeOf &isInteresting, wanted_t interestArea) |
Ohodnotí trasovací pole (start rekurze). | |
bool | targetFound () const |
Cíl nalezen. | |
PositionIndex | findPosIndexUsingBacktracking_ (traceArray_t &traceArray) |
Najde pomocí backtrackingu index výsledné pozice. | |
Privátní metody | |
void | recursiveEvalTraceArray_ (traceArray_t &traceArray, fieldsQueue_t &fieldsQueue, isTypeOf &isBlocking, isTypeOf &isInteresting, wanted_t interestArea) |
Ohodnotí trasovací pole (krok rekurze). | |
bool | interestingFound_ (const traceField_t &field, isTypeOf &isInteresting, wanted_t interestingArea) |
Bylo-li nalezeno ve správném smyslu zajímavé políčko. | |
void | evalAndQueueNextFields_ (traceArray_t &traceArray, fieldsQueue_t &fieldsQueue, isTypeOf &isBlocking) |
Ohodnotí a vloží do fronty sousední políčka. | |
void | moveFieldCoordinate_ (traceField_t &field, DIRECTION dir) |
Posune souřadnice políčka. | |
Privátní atributy | |
bool | targetFound_ |
Cíl nalezen. | |
traceField_t | targetField_ |
Souřadnice cíle v mapě. | |
Třídy | |
struct | traceValue_t |
Typ pro hodnotu políčka trasovacího pole. ... |
Stejně jako AI_6, pokud je ale v nebezpečí, použije prohledávání mapy do šířky a najde nejbližší bezpečné políčko.
typedef field_t AI_9::traceField_t [protected] |
Typ pro souřadnice políčka.
typedef struct AI_9::traceValue_t AI_9::traceValue_t [protected] |
Typ pro hodnotu políčka trasovacího pole.
typedef std::map<traceField_t, traceValue_t > AI_9::traceArray_t [protected] |
Typ trasovacího pole.
Je otázka jestli trasovací pole opravdu implementovat jako pole. Vzhledem k tomu, že málokdy se využije vetší kus celé mapy a vzhledem k tomu, že mapa může být i velká se uchyluji k dynamičtější struktuře std::map, kde klíč budou souřadnice políčka.
typedef std::queue< traceField_t > AI_9::fieldsQueue_t [protected] |
Typ fronty políček.
enum AI_9::wanted_t [protected] |
virtual AI_9::~AI_9 | ( | ) | [inline, virtual] |
Destruktor.
void AI_9::move | ( | ) | [virtual] |
Hýbne nestvůrou.
Pokud je v nebezpečí, zachová se chytře a vyhledá bezpečné políčko. Jinak se zachová standardně podle findPosIndex().
Reimplementuje stejnojmenný prvek z AI_6.
virtual Sint16 AI_9::type | ( | ) | const [inline, virtual] |
AI::PositionIndex AI_9::findPosIndexToWalkFromRisk_ | ( | isTypeOf & | isBlocking | ) | [protected] |
Najde index pozice, na kterou máme jít abychom se dostali z nebezpečí.
Předpokládá, že se nacházíme v nebezpečí a snaží se najít bezpečné políčko. Výsledkem je pozice, která nás přiblíží nejbližšímu bezpečnému políčku.
isBlocking | predikát odhalující blokující prvek na políčku |
void AI_9::evalTraceArray_ | ( | traceArray_t & | traceArray, | |
isTypeOf & | isBlocking, | |||
isTypeOf & | isInteresting, | |||
wanted_t | interestArea | |||
) | [protected] |
Ohodnotí trasovací pole (start rekurze).
Nastartuje rekurzivní ohodnocení trasy. Inicializuje frontu políček, začínáme u aktuální pozice.
traceArray | inicializované trasovací pole | |
isBlocking | predikát odhalující blokující objekty | |
isInteresting | predikát odhalující objekty, které jsou zajímavé (svou přítomností nebo naopak nepřítomností) | |
interestArea | upřesňuje, jak jsou zajímavé objekty zajímavé |
bool AI_9::targetFound | ( | ) | const [inline, protected] |
Cíl nalezen.
AI::PositionIndex AI_9::findPosIndexUsingBacktracking_ | ( | traceArray_t & | traceArray | ) | [protected] |
Najde pomocí backtrackingu index výsledné pozice.
Podle výsledku prohledávání do šířky provede backtracking, vybere výslednou pozici, která nejlépe využije směr. Využívá member položku targetField_, kontroluje její správnost pomocí targetFound().
traceArray | ohodnocené trasovací pole |
void AI_9::recursiveEvalTraceArray_ | ( | traceArray_t & | traceArray, | |
fieldsQueue_t & | fieldsQueue, | |||
isTypeOf & | isBlocking, | |||
isTypeOf & | isInteresting, | |||
wanted_t | interestArea | |||
) | [private] |
Ohodnotí trasovací pole (krok rekurze).
Rekurzivní ohodnocení trasy řeší aktuálně jedno políčko ve frontě. Prohledáváním do šířky se snaží najít políčko, které nás zajímá. V jednom kroku vyřeší políčko, které je první ve frontě, odebere ho a přidá do ní nejvýše čtyři sousední políčka (pokud bychom na ně mohli jít).
traceArray | inicializované trasovací pole | |
fieldsQueue | fronta políček k prohledávání | |
isBlocking | predikát odhalující blokující objekty | |
isInteresting | predikát odhalující objekty, které jsou zajímavé (svou přítomností nebo naopak nepřítomností) | |
interestArea | upřesňuje, jak jsou zajímavé objekty zajímavé |
bool AI_9::interestingFound_ | ( | const traceField_t & | field, | |
isTypeOf & | isInteresting, | |||
wanted_t | interestArea | |||
) | [private] |
Bylo-li nalezeno ve správném smyslu zajímavé políčko.
Zjistí, jestli je zadané políčko v mapě zajímavé či nikoli.
field | políčko v mapě | |
isInteresting | predikát odhalující objekty, které jsou zajímavé (svou přítomností nebo naopak nepřítomností) | |
interestArea | upřesňuje, jak jsou zajímavé objekty zajímavé |
string | Chybová hláška, pokud nejsou ošetřeny všechny oblasti zajímavosti. |
void AI_9::evalAndQueueNextFields_ | ( | traceArray_t & | traceArray, | |
fieldsQueue_t & | fieldsQueue, | |||
isTypeOf & | isBlocking | |||
) | [private] |
Ohodnotí a vloží do fronty sousední políčka.
Sousední políčka jsou políčka vlevo, vpravo, nad a pod políčkem, které je první ve frontě (aktuální políčko). Tato políčka, pokud již nebyla hodnocena označí. Nastavuje, že na něj nemůžeme vstoupit nebo jim nastaví hloubku prohledávání, v jaké jsme schopni na ně dojít. Navíc políčka, na která můžeme vstoupit, vloží do fronty pro pozdější zpracování. Do fronty nevkládá taková políčka, která by měla hloubku větší než povolenou v AI_9_MAX_TRACE_DEPTH.
traceArray | trasovací pole pro ohodnocení | |
fieldsQueue | fronta políček | |
isBlocking | predikát určující políčka, na která nemůžeme vstoupit |
void AI_9::moveFieldCoordinate_ | ( | traceField_t & | field, | |
DIRECTION | dir | |||
) | [private] |
Posune souřadnice políčka.
Posune políčko na sousední podle zadaného směru.
field | políčko, které chceme posunout | |
dir | směr, podle kterého budeme posunovat |
string | Chybová hláška, pokud nejsou ošetřeny všechny směry. |
bool AI_9::targetFound_ [private] |
Cíl nalezen.
traceField_t AI_9::targetField_ [private] |
Souřadnice cíle v mapě.