#ifndef STRUCTURE_ENTITY_HPP #define STRUCTURE_ENTITY_HPP #include #include #include #include #include #include #include #include "Entree_securisee.hpp" struct entity // Structure utilisée pour les personnages { std::string entity_name; // Nom du personnage int PV; // PV du personnage int ATT; // Attaque du personnage int SPEED; // Vitesse du personnage (sert à déterminer l'ordre de passage) int DEF; // Défense du personnage (sert à réduire les dégâts infligés) int PRECISION; // Vitesse du personnage (probabilité que l'attaque touche) std::string Classe; // Classe du personnage (joueur ou bot) int PV_initiaux; // PV max qui servent pour des tests struct action { std::string action_name; std::string description; bool avaible; std::function fonction_quelconque; void executer_fonction() { fonction_quelconque(); } std::function fonction_entite; void executer_fonction(entity& entite) { fonction_entite(entite); } std::function fonction_combat; void executer_fonction(entity& self, entity& adversaire, int& niveau) { fonction_combat(self, adversaire, niveau); } std::string classe; std::function fonction_sauvegarde; void executer_fonction(int& niveau) { fonction_sauvegarde(niveau); } }; std::vector liste_actions; // Liste des action réalisables par une entité // Initialisation des variables /*******************************************************************************************************************/ void afficher_aide(); bool test_mort(); void message_mort(); void remise_a_zero_des_PV(); void fonction_mort(); // Fonctions gérant la mort du personnage /*******************************************************************************************************************/ action aide { "aide", "Affiche la description de toutes les actions", true, [&]() { afficher_aide(); }, nullptr, nullptr, "tout" }; void assaut(entity& cible); void assaut_renforce(entity& cible); action attaquer { "attaquer", "Attaque l'adversaire", false, nullptr, [&](entity& entite) { assaut(entite); }, nullptr, "combat" }; action charger { "charger", "Charger la sauvegarde", true, nullptr, nullptr, nullptr, "menu", [&](int& niveau) { std::ifstream sauvegarde { "fichier_save.txt" }; std::string niveau_sauvegarde{ "" }; sauvegarde >> niveau_sauvegarde; niveau = std::stoi(niveau_sauvegarde); std::cout << "Sauvegarde chargée avec succès !" << std::endl; } }; action combattre { "combattre", "Démarrer un combat", true, nullptr, nullptr, nullptr, "menu" }; action defense { "défense", "Augmente la défense", false, [&]() { DEF += DEF; }, nullptr, nullptr, "combat" }; action quitter { "quitter", "Quitter le programme", true, []() { std::cout << "Fermeture du programme" << std::endl; }, nullptr, nullptr, "menu" }; action sauvegarder { "sauvegarder", "Sauvegarder la progression", true, nullptr, nullptr, nullptr, "menu", [&](int& niveau) { std::ofstream sauvegarde { "fichier_save.txt" }; std::string niveau_a_ecrire{ "" }; niveau_a_ecrire = std::to_string(niveau); sauvegarde << niveau_a_ecrire; std::cout << "Partie sauvegardée avec succès !" << std::endl; } }; action special { "spécial", "Permet d'utiliser la capacité spéciale du joueur", false, nullptr, nullptr, nullptr, "combat" }; // Fonctions gérant les différentes actions d'une entité /*******************************************************************************************************************/ std::string choix_actions_menu(entity& joueur, std::vector& ennemi, int& niveau); std::string comportement(); void choix_actions_combat(entity& cible); void fonction_a_moi_de_jouer(entity& cible); // Fonctions gérant le tour d'une entité /*******************************************************************************************************************/ }; #endif // STRUCTURE_ENTITY_HPP