#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 *****************************************************/ // private: ? --> à préférez si protected non imposé protected: const string nom_; int pdv_; int pos_; // ... public: Creature(const string nom, int pdv, int pos = 0) : nom_(nom), pdv_(pdv), pos_(pos) {} bool vivant() const { return pdv_ > 0; } void afficher() { cout << nom_ << ", niveau: " << ", points de vie: " << pdv_ << ", force: " << ", points d'attaque: " << ", position: " << pos_ << endl; } /* << " n'est plus !" */ } }; class Dragon : public Creature { private: int pdflamme_; public: // bof... car copié-collé de la valeur 0 // Dragon(const string nom, int pdv, int portee, int pos = 0) // : Creature(nom, pdv, pos), pdflamme_(portee) {} // mieux : Dragon(const string nom, int pdv, int portee) : Creature(nom, pdv), pdflamme_(portee) {} Dragon(const string nom, int pdv, int portee, int pos) : Creature(nom, pdv, pos), pdflamme_(portee) {} }; class Hydre : public Creature { // similaire } void combat(Dragon& d, Hydre& h) { h.empoisonne(d); if (d.vivant()) d.soufle(h); } // Pourquoi pas : void combat(Creature& c1, Creature& c2) { // comment faire ?? // C'est une bonne question --> polymorphisme (semaine prochaine) } /******************************************* * 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; }