#include #include #include "structs.h" #include "utilities.h" #include "player.h" #include "ennemy.h" #include "spells.h" #include "../interface/interfaces.h" #include "../interface/combat_interface.h" #include "combat.h" void init_combat(Player& player_arg, std::vector ennemies_arg, const std::vector& screen_arg) { std::vector ennemies; ennemies.push_back(ennemies_arg[1]); ennemies.push_back(ennemies_arg[2]); display_combat_interface(player_arg, ennemies, screen_arg); combat(player_arg, ennemies); } void combat(Player& player_arg, std::vector& ennemies_arg) { int arg; bool combat_loop = 1; while (combat_loop) { inc_speed(player_arg, -1); if (player_arg.speed == 0) { player_turn(player_arg, ennemies_arg, combat_loop, arg); check_deads(player_arg, ennemies_arg, combat_loop); init_speed(player_arg); } for (Ennemy& ennemy: ennemies_arg) { inc_speed(ennemy, -1); if (ennemy.speed == 0) { ennemy_turn(player_arg, ennemy); check_deads(player_arg, ennemies_arg, combat_loop); init_speed(ennemy); } } } } void check_deads(Player& player_arg, std::vector& ennemies_arg, bool& combat_loop) { if (player_arg.health == 0) { combat_loop = 0; } int i = 0; for(Ennemy& ennemy: ennemies_arg) { if (ennemy.health == 0) { ennemies_arg.erase(ennemies_arg.begin() + i); } i++; } } void player_turn(Player& player_arg, std::vector& ennemies_arg, bool& combat_loop_arg, int& arg) { display_combat_menu(player_arg, ennemies_arg); std::cin >> arg; select_combat_action(arg, player_arg, combat_loop_arg, ennemies_arg); } void select_combat_action(int arg, Player& player_arg, bool& combat_loop_arg, std::vector& ennemies_arg) { switch (arg){ case 1: print_spell_book(player_arg.spell_book); break; case 2: attack(player_arg, ennemies_arg); break; case 3: if(escape(player_arg, ennemies_arg)) { std::cout << "Escape succesfully" << std::endl; combat_loop_arg = 0; } else { std::cout << "Escape not succesfully" << std::endl; } break; default: combat_loop_arg = 0; break; } } Spell choose_spell(const Ennemy& ennemy_arg) { std::vector spells(ennemy_arg.spells.size()); int i = random_choice(spells); return ennemy_arg.spells[i]; } void ennemy_turn(Player& player_arg, Ennemy& ennemy_arg) { display_ennemi_turn(ennemy_arg); Spell spell = choose_spell(ennemy_arg); ennemy_use_spell(spell, player_arg, ennemy_arg); } void attack(Player& player_arg, std::vector& ennemies_arg){ if(player_arg.job == 0) { casting_spell(player_arg, ennemies_arg); } } bool escape(const Player& player_arg, std::vector& ennemies_arg) { float min = 1; for(Ennemy& ennemy: ennemies_arg) { if(ennemy.menace < min) { min = ennemy.menace; } } return random_success(player_arg.escape * min); }