#include #include #include "../define.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" const int BUTTON_BOOK_SPELL = KEY_B; const int BUTTON_CAST_SPELL = KEY_C; const int BUTTON_INVENTORY = KEY_I; const int BUTTON_ESCAPE = KEY_E; const int BUTTON_UP = KEY_UP; const int BUTTON_DOWN = KEY_DOWN; const int BUTTON_RIGHT = KEY_RIGHT; const int BUTTON_LEFT = KEY_LEFT; const int BUTTON_CONFIRM_SPELL = KEY_ENTER; const int BUTTON_FIRST_ENNEMI = KEY_KP_1; const int BUTTON_SECOND_ENNEMI = KEY_KP_2; const int BUTTON_THIRD_ENNEMI = KEY_KP_3; const int BUTTON_FOURTH_ENNEMI = KEY_KP_4; void init_combat(Player& player_arg, std::vector ennemies_arg, const std::vector& screen_arg) { std::vector combat_ennemies; combat_ennemies.push_back(ennemies_arg[0]); std::vector ennemies_stats; Player_stats player_stats; create_combat_interface(player_arg, combat_ennemies, screen_arg, ennemies_stats, player_stats); combat(player_arg, player_stats, combat_ennemies, ennemies_stats); } void combat(Player& player_arg, Player_stats& player_stats_arg, std::vector& ennemies_arg, std::vector& ennemies_stats_arg) { bool combat_loop = 1; while (combat_loop) { inc_speed(player_arg, -1); if (player_arg.speed == 0) { player_turn(player_arg, player_stats_arg, ennemies_arg, ennemies_stats_arg, combat_loop); 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) { display_combat_interface(player_arg, player_stats_arg, ennemies_arg, ennemies_stats_arg); 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) { std::cout << "You are dead" << std::endl; combat_loop = 0; } int i = 0; for(Ennemy& ennemy: ennemies_arg) { if (ennemy.health == 0) { std::cout << ennemy.name << " is dead" << std::endl; ennemies_arg.erase(ennemies_arg.begin() + i); } i++; } if (ennemies_arg.empty()) { std::cout << "You won" << std::endl; combat_loop = 0; } } void player_turn(Player& player_arg, Player_stats& player_stats_arg, std::vector& ennemies_arg, std::vector& ennemies_stats_arg, bool& combat_loop_arg) { bool take_action = 1; while (take_action) { display_combat_interface(player_arg, player_stats_arg, ennemies_arg, ennemies_stats_arg); if(IsKeyPressed(BUTTON_BOOK_SPELL)) { print_spell_book(player_arg.spell_book); take_action = 0; } else if (IsKeyPressed(BUTTON_CAST_SPELL)) { attack(player_arg, player_stats_arg, ennemies_arg, ennemies_stats_arg); take_action = 0; } else if (IsKeyPressed(BUTTON_INVENTORY)) { take_action = 0; } else if (IsKeyPressed(BUTTON_ESCAPE)) { if(escape(player_arg, ennemies_arg)) { std::cout << "Escape succesfully" << std::endl; combat_loop_arg = 0; } else { std::cout << "Escape not succesfully" << std::endl; } take_action = 0; } } } void casting_spell(Player& player_arg, Player_stats& player_stats_arg, std::vector& ennemies_arg, std::vector& ennemies_stats_arg) { std::vector spell; int spell_segment; bool is_casting_spell = 1; while(is_casting_spell) { display_combat_interface(player_arg, player_stats_arg, ennemies_arg, ennemies_stats_arg); if (IsKeyPressed(BUTTON_UP)) { if (cast_spell(player_arg, player_stats_arg, spell, UP, ennemies_arg, ennemies_stats_arg)) { is_casting_spell = 0; } } else if (IsKeyPressed(BUTTON_DOWN)) { if (cast_spell(player_arg, player_stats_arg, spell, DOWN, ennemies_arg, ennemies_stats_arg)) { is_casting_spell = 0; } } else if (IsKeyPressed(BUTTON_RIGHT)) { if (cast_spell(player_arg, player_stats_arg, spell, RIGHT, ennemies_arg, ennemies_stats_arg)) { is_casting_spell = 0; } } else if (IsKeyPressed(BUTTON_LEFT)) { if (cast_spell(player_arg, player_stats_arg, spell, LEFT, ennemies_arg, ennemies_stats_arg)) { is_casting_spell = 0; } } else if (IsKeyPressed(BUTTON_CONFIRM_SPELL)) { if (cast_spell(player_arg, player_stats_arg, spell, END_SPELL, ennemies_arg, ennemies_stats_arg)) { is_casting_spell = 0; } } } } Ennemy& choose_target(Player& player_arg, Player_stats& player_stats_arg, std::vector& ennemies_arg, std::vector& ennemies_stats_arg) { std::cout << "Selecting target ennemi" << std::endl; int arg; bool selecting_ennemi = 1; while(selecting_ennemi) { display_combat_interface(player_arg, player_stats_arg, ennemies_arg, ennemies_stats_arg); if (IsKeyPressed(BUTTON_FIRST_ENNEMI)) { std::cout << "NUMPAD1" << std::endl; if (ennemies_arg.size() >= 1) { arg = 0; selecting_ennemi = 0; } } else if (IsKeyPressed(BUTTON_SECOND_ENNEMI)) { std::cout << "NUMPAD1" << std::endl; if (ennemies_arg.size() >= 2) { arg = 1; selecting_ennemi = 0; } } else if (IsKeyPressed(BUTTON_THIRD_ENNEMI)) { std::cout << "NUMPAD1" << std::endl; if (ennemies_arg.size() >= 3) { arg = 2; selecting_ennemi = 0; } } else if (IsKeyPressed(BUTTON_FOURTH_ENNEMI)) { std::cout << "NUMPAD1" << std::endl; if (ennemies_arg.size() >= 4) { arg = 3; selecting_ennemi = 0; } } } std::cout << ennemies_arg[arg].name << " is selected" << std::endl; return ennemies_arg[arg]; } 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, Player_stats& player_stats_arg, std::vector& ennemies_arg, std::vector& ennemies_stats_arg){ if(player_arg.job == MAGE) { casting_spell(player_arg, player_stats_arg, ennemies_arg, ennemies_stats_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); }