#include #include #include using namespace std; int distance(int x, int y) { return abs(x - y); } class Creature { /***************************************************** * Compléter le code à partir d'ici *****************************************************/ public: Creature(string const& nom, int pdv) : nom_(nom), points_de_vie_(pdv) {} bool vivant() const { return points_de_vie_ > 0; } void afficher() const { cout << nom_ << ", niveau: " << ", points de vie: " << points_de_vie_ << ", force: " << ", points d'attaque: " << ", position: " << endl; // if (not vivant()) adieux(); } private: void adieux() const { cout << nom_ << " n'est plus !" << endl; } const string nom_; int points_de_vie_; }; // ================================================================== class Dragon : public Creature { public: Dragon(string const& nom, int pdv, int pdf) : Creature(nom, pdv), portee_flamme_(pdf) {} private: int portee_flamme_; }; // ================================================================== class Hydre : public Creature { public: Hydre(string const& nom, int pdv, int poison) : Creature(nom, pdv), dose_poison_(poison) {} void empoisonne(Creature& c) { } private: int dose_poison_; }; // ================================================================== // Pourquoi pas : // void combat(Creature& c1, Creature& c2); ? // C'est une bonne question --> polymorphisme void combat(Dragon& thiamat, Hydre& lerna) { lerna.empoisonne(thiamat); thiamat.souffle_sur(lerna); } /******************************************* * Ne rien modifier après cette ligne. *******************************************/ int main() { Dragon dragon("Dragon rouge" , 2, 10, 3, 20 ); Hydre hydre ("Hydre maléfique", 2, 10, 1, 10, 1, 42 ); dragon.afficher(); cout << "se prépare au combat avec :" << endl; hydre.afficher(); cout << endl; cout << "1er combat :" << endl; cout << " les créatures ne sont pas à portée, donc ne peuvent pas s'attaquer." << endl; combat(dragon, hydre); cout << "Après le combat :" << endl; dragon.afficher(); hydre.afficher(); cout << endl; cout << "Le dragon vole à proximité de l'hydre :" << endl; dragon.voler(hydre.position() - 1); dragon.afficher(); cout << endl; cout << "L'hydre recule d'un pas :" << endl; hydre.deplacer(1); hydre.afficher(); cout << endl; cout << "2e combat :" << endl; cout << "\ + l'hydre inflige au dragon une attaque de 3 points\n\ [ niveau (2) * force (1) + poison (1) = 3 ] ;\n\ + le dragon inflige à l'hydre une attaque de 6 points\n\ [ niveau (2) * force (3) = 6 ] ;\n\ + pendant son attaque, le dragon perd 2 points de vie supplémentaires\n\ [ correspondant à la distance entre le dragon et l'hydre : 43 - 41 = 2 ].\ " << endl; combat(dragon, hydre); cout << "Après le combat :" << endl; dragon.afficher(); hydre.afficher(); cout << endl; cout << "Le dragon avance d'un pas :" << endl; dragon.deplacer(1); dragon.afficher(); cout << endl; cout << "3e combat :" << endl; cout << "\ + l'hydre inflige au dragon une attaque de 3 points\n\ [ niveau (2) * force (1) + poison (1) = 3 ] ;\n\ + le dragon inflige à l'hydre une attaque de 6 points\n\ [ niveau (2) * force (3) = 6 ] ;\n\ + pendant son attaque, le dragon perd 1 point de vie supplémentaire\n\ [ correspondant à la distance entre le dragon et l'hydre : 43 - 42 = 1 ] ;\n\ + l'hydre est vaincue et le dragon monte au niveau 3.\ " << endl; combat(dragon, hydre); cout << "Après le combat :" << endl; dragon.afficher(); hydre.afficher(); cout << endl; cout << "4e Combat :" << endl; cout << " quand une créature est vaincue, rien ne se passe." << endl; combat(dragon, hydre); cout << "Après le combat :" << endl; dragon.afficher(); hydre.afficher(); return 0; }