// Hakkeripelin komentotulkki #ifndef KOMENTOTULKKI_HH #define KOMENTOTULKKI_HH #include "hakkeripeli.hh" enum Toiminto {EITOIMINTOA, SIIRTO, TILANNE, TIEDOT, OHJE, LOPETUS}; struct Komento { std::string komento; Toiminto toiminto; Siirtotyyppi siirtotyyppi; // Vain jos toiminto == SIIRTO int parametreja_vahintaan; // Jos == -1, tarkistus ei käytössä int parametreja_enintaan; // Jos == -1, tarkistus ei käytössä }; // Toteuttaa rivin tai tulostaa virheen. Palauttaa true jos komento onnistui. bool toteutaRivi(const std::string &rivi, Pelitilanne &pelitilanne, std::ostream &out, std::ostream &err); // Palauttaa kehotteena käytettävän merkkijonon (mukaanlukien >-merkin). std::string haeKehote(Pelitilanne &pelitilanne); // Tulkitsee komennon etsimällä vastaavan komennon vakiotaulukosta. // Palauttaa false jos vastaavuuksia ei ole tai on liikaa. bool etsiKomento(const std::string &annettu, Komento &tulos); // Tulkitsee parametrit ja toteuttaa komennon. // Virheen sattuessa palauttaa false ja tulostaa virheen. bool toteutaKomento(const Komento &komento, const std::vector ¶metrit, Pelitilanne &pelitilanne, std::ostream &out, std::ostream &err); // Tulkitsee siirroksi tiedetyn komennon parametrit // Siirto-rakenteeseen. Tuottaa poikkeuksen Lukuvirhe tai Hakkerivirhe jos // parametreissa on virheitä. Siirto tulkitseSiirto(const Komento &komento, const std::vector ¶metrit, const Pelitilanne &pelitilanne); // Tulostaa komennon 2. vaihepalautusta varten void tulostaKomento(const Komento &komento, const std::vector ¶metrit); #endif