// Hakkeri-olio #ifndef HAKKERI_HH #define HAKKERI_HH #include "hakkeripeli.hh" #include class Hakkeri { public: // Rakentaja, ottaa yleisasetukset sekä hakkeriryhmätiedostosta // lasketut tiedot. Hakkeri(const Asetukset &asetukset, const std::string &nimi, int maxkola, int maxhermot); // Palauttaa hakkerin nimen std::string haeNimi() const; // Onko hakkerin tila jokin muu kuin OFFLINE? bool online() const; // Vuoron alussa tehtävä kolanlisäys. void lisaaKolaa(); // Vastaanottaa viruksen ja suorittaa toimenpiteitä hakkerin // tilan perusteella. void otaVirus(int taso, std::ostream &out); // Suorittaa siirron ja tulostaa siihen liittyvät ilmoitukset. // Palauttaa true jos vuoro jatkuu. bool suoritaSiirto(const Siirto &siirto, std::ostream &out); // Tarkistaa siirron kelvollisuuden nykyisessä tilanteessa. // Virheellisen siirron tapauksessa tulostaa ilmoitukset ja // palauttaa false. bool tarkistaSiirto(const Siirto &siirto, std::ostream &err) const; // Tulostaa hakkerin tiedot laajassa muodossa TIEDOT-komentoa varten. void tulostaTiedot(std::ostream &out) const; // Tulostaa hakkerin tietorivin TILANNE-komentoa varten. void tulostaTilanne(std::ostream &out) const; private: // Numeroarvot ovat MOODIKUVAUKSET-taulukkoa varten enum Hakkeritila {PERUS = 0, HYOKKAYS = 1, REITITYS = 2, PUSKUROINTI = 3, OFFLINE = 4}; // Hakkerin tilojen kuvaustekstit static const std::string MOODIKUVAUKSET[]; // Kuluttaa annetun määrän hakkerin hermoista. // Tulostaa ilmoituksen kulutuksesta. // Vaihtaa tilan hermojen mennessä. // Palauttaa false jos hermot menivät. bool kulutaHermoja(int maara, std::ostream &out); // Kuluttaa annetun määrän kolaa tai hermoja. // Hermojen kulutuksesta tulostetaan ilmoitus. // Palauttaa false jos hermot menivät. bool kulutaKolaa(int maara, std::ostream &out); // Vaihtaa hakkerin tilan ja nollaa tilaan liittyvät jäsenmuuttujat. void vaihdaTila(Hakkeritila uusitila); // Vakio-osoitin yleisasetukset sisältävään rakenteeseen const Asetukset &asetukset_; std::string nimi_; // Hakkerin nimi. Hakkeritila tila_; // Hakkerin tila. // Hakkerin hallussa olevan viruksen taso. Arvoltaan 0 jos hakkerilla // ei ole virusta. int virustaso_; // Hakkerit, joille viruksia reititetään. Vain REITITYS-tilassa. std::vector reitityskohteet_; int reititysvuoro_; // Seuraavan kohteen indeksi. // Jäljellä olevien toimintokertojen määrä. Vain REITITYS- ja // PUSKUROINTI-tiloissa. int maara_; int kola_; // Pitää kirjaa hakkerin kolavarannoista. int hermot_; // Pitää kirjaa hakkerin hermoista. int maxkola_; // Hakkerin kolavarastojen maksimikoko (alkukoko). int maxhermot_; // Vastaavasti hermojen maksimiarvo. }; #endif