diff --git a/game/logic/combat.cpp b/game/logic/combat.cpp index cdd6c78..e976105 100644 --- a/game/logic/combat.cpp +++ b/game/logic/combat.cpp @@ -9,23 +9,38 @@ #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, ennemies_arg, screen_arg, ennemies_stats, player_stats); - combat(player_arg, player_stats, ennemies_arg, ennemies_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) { - int arg; bool combat_loop = 1; while (combat_loop) { inc_speed(player_arg, -1); if (player_arg.speed == 0) { - display_combat_interface(player_arg, player_stats_arg, ennemies_arg, ennemies_stats_arg); - - player_turn(player_arg, ennemies_arg, combat_loop, arg); + 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); } @@ -43,45 +58,113 @@ void combat(Player& player_arg, Player_stats& player_stats_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, 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: +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); - break; - case 2: - attack(player_arg, ennemies_arg); - break; - case 3: + 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; } - break; - default: - combat_loop_arg = 0; - break; + 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); @@ -94,9 +177,9 @@ void ennemy_turn(Player& player_arg, Ennemy& ennemy_arg) { ennemy_use_spell(spell, player_arg, ennemy_arg); } -void attack(Player& player_arg, std::vector& ennemies_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, ennemies_arg); + casting_spell(player_arg, player_stats_arg, ennemies_arg, ennemies_stats_arg); } } diff --git a/game/logic/combat.h b/game/logic/combat.h index 757586b..77419de 100644 --- a/game/logic/combat.h +++ b/game/logic/combat.h @@ -4,11 +4,12 @@ void combat(Player& player_arg, Player_stats& player_stats_arg, std::vector& ennemies_arg, bool& combat_loop); -void player_turn(Player& player_arg, std::vector& ennemies_arg, bool& combat_loop_arg, int& arg); -void select_combat_action(int arg, Player& player_arg, bool& combat_loop_arg, std::vector& ennemies_arg); +void player_turn(Player& player_arg, Player_stats& player_stats_arg, std::vector& ennemies_arg, std::vector& ennemies_stats_arg, bool& combat_loop_arg); +void casting_spell(Player& player_arg, Player_stats& player_stats_arg, std::vector& ennemies_arg, std::vector& ennemies_stats_arg); +Ennemy& choose_target(Player& player_arg, Player_stats& player_stats_arg, std::vector& ennemies_arg, std::vector& ennemies_stats_arg); Spell choose_spell(const Ennemy& ennemy_arg); void ennemy_turn(Player& player_arg, Ennemy& ennemy_arg); -void attack(Player& player_arg, std::vector& ennemies_arg); +void attack(Player& player_arg, Player_stats& player_stats_arg, std::vector& ennemies_arg, std::vector& ennemies_stats_arg); bool escape(const Player& player_arg, std::vector& ennemies_arg); \ No newline at end of file diff --git a/game/logic/spells.cpp b/game/logic/spells.cpp index b6392d2..52bf829 100644 --- a/game/logic/spells.cpp +++ b/game/logic/spells.cpp @@ -5,6 +5,7 @@ #include "../define.h" #include "player.h" #include "ennemy.h" +#include "combat.h" #include "../interface/interfaces.h" #include "spells.h" @@ -125,17 +126,16 @@ Spell find_spell_by_combinaison(const std::vector& spell_book_arg, const return spell_book_arg[0]; } -//Return true if the player still can cast a spell -bool cast_spell(Player& player_arg, std::vector& spell_arg, int spell_segment_arg, std::vector& ennemies_arg) { - +//Return true if the player casts a spell +bool cast_spell(Player& player_arg, Player_stats& player_stats_arg, std::vector& spell_arg, int spell_segment_arg, std::vector& ennemies_arg, std::vector& ennemies_stats_arg) { std::vector spell_book = player_arg.spell_book; if (spell_segment_arg == END_SPELL) { Spell casted_spell = find_spell_by_combinaison(spell_book, spell_arg); if (spell_arg.size() == casted_spell.combinaison.size()) { - use_spell(casted_spell, player_arg, ennemies_arg); + use_spell(casted_spell, player_arg, player_stats_arg, ennemies_arg, ennemies_stats_arg); } - return 0; + return 1; } else { spell_arg.push_back(spell_segment_arg); int count_spell = possible_spell(spell_book, spell_arg); @@ -143,30 +143,21 @@ bool cast_spell(Player& player_arg, std::vector& spell_arg, int spell_segme if (count_spell == 1) { Spell casted_spell = find_spell_by_combinaison(spell_book, spell_arg); if (spell_arg.size() == casted_spell.combinaison.size()) { - use_spell(casted_spell, player_arg, ennemies_arg); + use_spell(casted_spell, player_arg, player_stats_arg, ennemies_arg, ennemies_stats_arg); } else { - return 1; + return 0; } } else if (count_spell == 0) { std::cout << "Spell doesn't exist" << std::endl; } spell_arg = {}; - return 0; + return 1; } } - return 1; + return 0; } -void casting_spell(Player& player_arg, std::vector& ennemies_arg) { - std::vector spell; - int spell_segment; - do { - std::cin >> spell_segment; - } while (cast_spell(player_arg, spell, spell_segment, ennemies_arg)); - -} - -void use_spell(const Spell& spell_arg, Player& player_arg, std::vector& ennemies_arg) { +void use_spell(const Spell& spell_arg, Player& player_arg, Player_stats& player_stats_arg, std::vector& ennemies_arg, std::vector& ennemies_stats_arg) { if (player_arg.mana - spell_arg.cost_mana >= 0) { inc_health(player_arg, -spell_arg.cost_health); inc_mana(player_arg, -spell_arg.cost_mana); @@ -175,7 +166,7 @@ void use_spell(const Spell& spell_arg, Player& player_arg, std::vector& spell_damage(ennemy, spell_arg); } } else { - Ennemy& ennemy = choose_target(ennemies_arg); + Ennemy& ennemy = choose_target(player_arg, player_stats_arg, ennemies_arg, ennemies_stats_arg); spell_damage(ennemy, spell_arg); } std::cout << player_arg.name<< " casts " << spell_arg.name << std::endl; @@ -197,13 +188,6 @@ void spell_damage(Ennemy& ennemy_arg, const Spell& spell_arg) { } } -Ennemy& choose_target(std::vector& ennemies_arg) { - display_ennemies(ennemies_arg); - int arg; - std::cin >> arg; - return ennemies_arg[arg]; -} - void ennemy_use_spell(const Spell& spell_arg, Player& player_arg, Ennemy& ennemy_arg) { inc_health(ennemy_arg, -spell_arg.cost_health); diff --git a/game/logic/spells.h b/game/logic/spells.h index db11baa..9b13508 100644 --- a/game/logic/spells.h +++ b/game/logic/spells.h @@ -12,12 +12,10 @@ void init_spells(std::vector& spell_book_arg); int possible_spell(const std::vector& spell_book_arg, const std::vector& spell_arg); Spell find_spell_by_combinaison(const std::vector& spell_book_arg, const std::vector& spell_arg); -bool cast_spell(Player& player_arg, std::vector& spell_arg, std::vector& ennemies_arg); -void casting_spell(Player& player_arg, std::vector& ennemies_arg); -void use_spell(const Spell& spell_arg, Player& player_arg, std::vector& ennemies_arg); +bool cast_spell(Player& player_arg, Player_stats& player_stats_arg, std::vector& spell_arg, int spell_segment_arg, std::vector& ennemies_arg, std::vector& ennemies_stats_arg); +void use_spell(const Spell& spell_arg, Player& player_arg, Player_stats& player_stats_arg, std::vector& ennemies_arg, std::vector& ennemies_stats_arg); void spell_damage(Ennemy& ennemy_arg, const Spell& spell_arg); -Ennemy& choose_target(std::vector& ennemies_arg); void ennemy_use_spell(const Spell& spell_arg, Player& player_arg, Ennemy& ennemy_arg); void print_spell(const Spell& spell_arg); -void print_spell_book(const std::vector& spell_book_arg); +void print_spell_book(const std::vector& spell_book_arg); \ No newline at end of file diff --git a/game/release b/game/release index ca7025d..9304cda 100755 Binary files a/game/release and b/game/release differ