#include "BattleInterface.hpp" const int BattleInterface::maxTurn = 100; BattleInterface::BattleInterface() { this->turn = -1; this->player1 = nullptr; this->player2 = nullptr; this->winner = nullptr; this->loser = nullptr; } BattleInterface::BattleInterface(Character *p1, Character *p2) { this->turn = 1; this->player1 = p1; this->player2 = p2; this->winner = nullptr; this->loser = nullptr; } void BattleInterface::battleStartAnnounce() { std::cout << " === BATTLE START === \n" << " " << player1->getName() << "\n" << " vs \n" << " " << player2->getName() << "\n" << " === ============ === \n" << std::flush; } void BattleInterface::battleEndAnnouce() { std::cout << " === BATTLE END === \n" << "winner: " << this->winner->getName() << "\n" << std::flush; } Character *BattleInterface::getLoser() { return this->loser; } Character *BattleInterface::getWinner() { return this->winner; } void BattleInterface::start() { int choiceInt; char buff[64] = {0}; this->battleStartAnnounce(); while ((player1->isAlive() && player2->isAlive()) && this->turn <= BattleInterface::maxTurn) { std::cout << "Turn " << this->turn << " of " << BattleInterface::maxTurn << "\n" << "Your spell book:\n"; for (size_t i = 0; i < Spell::Book.size() && i < (player1->getLevel()); i++) { std::cout << "[" << i << "] " << Spell::Book.at(i).getName() << "\n"; } std::cout << std::flush; choiceInt = UserInterface::getNumber( "What are you gonna cast this turn?\n>", 0, player1->getLevel() > Spell::Book.size() ? Spell::Book.size() : player1->getLevel()); if (player1->canCastSpell(&Spell::Book.at(choiceInt))) { player1->castSpell(&Spell::Book.at(choiceInt), player2); snprintf(buff, 63, "%s cast %s...\n", player1->getName(), Spell::Book.at(choiceInt).getName().c_str()); UserInterface::print(buff); memset(buff, 0, 64); snprintf(buff, 63, "%s took %d damage...\n", player2->getName(), Spell::Book.at(choiceInt).getAmount()); UserInterface::print(buff); memset(buff, 0, 64); } else { snprintf(buff, 63, "%s failed to cast %s!\n", player1->getName(), Spell::Book.at(choiceInt).getName().c_str()); UserInterface::print(buff); } choiceInt = (random() % (player2->getLevel() < Spell::Book.size() ? player2->getLevel() : Spell::Book.size())); if (player2->canCastSpell(&Spell::Book.at(choiceInt))) { player2->castSpell(&Spell::Book.at(choiceInt), player1); snprintf(buff, 63, "%s cast %s...\n", player2->getName(), Spell::Book.at(choiceInt).getName().c_str()); UserInterface::print(buff); memset(buff, 0, 64); snprintf(buff, 63, "%s took %d damage...\n", player1->getName(), Spell::Book.at(choiceInt).getAmount()); UserInterface::print(buff); memset(buff, 0, 64); } else { snprintf(buff, 63, "%s failed to cast %s!\n", player2->getName(), Spell::Book.at(choiceInt).getName().c_str()); UserInterface::print(buff); } this->turn++; } winner = (player1->isAlive() && (player1->getCurHP() >= player2->getCurHP())) ? player1 : player2; loser = (winner == player1) ? player2 : player1; this->battleEndAnnouce(); }