|
|
@ -4,11 +4,12 @@ |
|
|
|
#include <chrono>
|
|
|
|
#include <random>
|
|
|
|
#include <fstream>
|
|
|
|
#include <unistd.h>
|
|
|
|
|
|
|
|
#include "lib/Character.hpp"
|
|
|
|
#include "lib/Spell.hpp"
|
|
|
|
#include "lib/UserInterface.hpp"
|
|
|
|
1">// #include "lib/BattleInterface.hpp"
|
|
|
|
p">#include "lib/BattleInterface.hpp"
|
|
|
|
|
|
|
|
std::string loadFlag() |
|
|
|
{ |
|
|
@ -19,31 +20,126 @@ int main() |
|
|
|
{ |
|
|
|
std::string flag; |
|
|
|
Character *player; |
|
|
|
Character *archMage; |
|
|
|
Character *enemy; |
|
|
|
BattleInterface battle; |
|
|
|
std::vector<Character *> enemies; |
|
|
|
|
|
|
|
flag = loadFlag(); |
|
|
|
srand(time(0)); |
|
|
|
alarm(600); |
|
|
|
|
|
|
|
UserInterface::welcomeMessage(); |
|
|
|
UserInterface::epilogue(); |
|
|
|
player = UserInterface::characterCreation(); |
|
|
|
archMage = new Character("Arch-Mage", 100, 0, 100000, 100000, 1, 1); |
|
|
|
enemies = { |
|
|
|
new Character("Abby", 1, 1, 10, 5, 1, 1), |
|
|
|
new Character("John", 2, 3, 20, 10, 1, 1), |
|
|
|
new Character("Adam", 3, 7, 40, 25, 1, 1), |
|
|
|
new Character("Christo", 4, 11, 80, 40, 1, 1), |
|
|
|
new Character("Greg", 5, 16, 160, 80, 1, 1), |
|
|
|
}; |
|
|
|
|
|
|
|
while (player->isAlive() && !UserInterface::isGameOver()) |
|
|
|
{ |
|
|
|
int choice; |
|
|
|
int choiceInt = -1; |
|
|
|
char choiceChar = -1; |
|
|
|
UserInterface::menu(); |
|
|
|
choice = UserInterface::getNumber( |
|
|
|
choiceInt = UserInterface::getNumber( |
|
|
|
"What are you gonna do today?\n>", |
|
|
|
0, 0); |
|
|
|
switch (choice) |
|
|
|
0, 6); |
|
|
|
switch (choiceInt) |
|
|
|
{ |
|
|
|
case 0: |
|
|
|
UserInterface::print("You commit sudoku...\n"); |
|
|
|
UserInterface::print("Was it supposed to be seppuku?\n"); |
|
|
|
UserInterface::print("Nevermind, you killed yourself.\n"); |
|
|
|
player->suicide(); |
|
|
|
player->kill(); |
|
|
|
break; |
|
|
|
default: |
|
|
|
case 1: |
|
|
|
UserInterface::print("You spend the whole day sleeping...\n"); |
|
|
|
UserInterface::print("HP and MP restored.\n"); |
|
|
|
player->rest(); |
|
|
|
break; |
|
|
|
case 2: |
|
|
|
UserInterface::print("You practice your magic in the yard...\n"); |
|
|
|
UserInterface::print("You gained some experience.\n"); |
|
|
|
player->increaseExperience((random() % player->getLevel()) + 1); |
|
|
|
break; |
|
|
|
case 3: |
|
|
|
UserInterface::print("List of your classmates:\n"); |
|
|
|
UserInterface::enemiesInfo(enemies); |
|
|
|
choiceInt = UserInterface::getNumber("Who would you prefer to train with?\n>", 0, enemies.size()); |
|
|
|
UserInterface::print("You are going to spar with:\n"); |
|
|
|
UserInterface::characterInfo(enemies.at(choiceInt)); |
|
|
|
UserInterface::print("Are you sure? (y/N)"); |
|
|
|
std::cin >> choiceChar; |
|
|
|
if (choiceChar == 'y' || choiceChar == 'Y') |
|
|
|
{ |
|
|
|
enemy = new Character(*enemies.at(choiceInt)); |
|
|
|
battle = BattleInterface(player, enemy); |
|
|
|
battle.start(); |
|
|
|
if (battle.getWinner() == player) |
|
|
|
{ |
|
|
|
UserInterface::print("You win, you get more experience...\n"); |
|
|
|
player->increaseExperience(enemies.at(choiceInt)->getLevel()); |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
UserInterface::print("You lose, but you still get some experience...\n"); |
|
|
|
player->revive(); |
|
|
|
player->increaseExperience(enemies.at(choiceInt)->getLevel() / 2); |
|
|
|
} |
|
|
|
delete enemy; |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
UserInterface::print("On second thought, you decide to sleep in your room instead...\n"); |
|
|
|
player->rest(); |
|
|
|
} |
|
|
|
|
|
|
|
break; |
|
|
|
case 4: |
|
|
|
UserInterface::print("You are going to challenge the Arch-Mage...\n"); |
|
|
|
UserInterface::print("Are you sure? (y/N)"); |
|
|
|
std::cin >> choiceChar; |
|
|
|
if (choiceChar == 'y' || choiceChar == 'Y') |
|
|
|
{ |
|
|
|
battle = BattleInterface(player, archMage); |
|
|
|
battle.start(); |
|
|
|
if (battle.getWinner() == player) |
|
|
|
{ |
|
|
|
UserInterface::print("You win, you get more experience...\n"); |
|
|
|
player->increaseExperience(enemies.at(choiceInt)->getLevel()); |
|
|
|
UserInterface::print("You win against the Arch-Mage!\n"); |
|
|
|
UserInterface::print("He let you take a glimpse to the scroll that you always wanted...\n"); |
|
|
|
UserInterface::print("Turns out the content is just some meaningless word...\n"); |
|
|
|
UserInterface::print("Here is the content:\n"); |
|
|
|
UserInterface::print(flag); |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
UserInterface::print("You lose, but you still get some experience...\n"); |
|
|
|
player->revive(); |
|
|
|
player->increaseExperience(enemies.at(choiceInt)->getLevel() / 2); |
|
|
|
} |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
UserInterface::print("On second thought, you decide to sleep in your room instead...\n"); |
|
|
|
player->rest(); |
|
|
|
} |
|
|
|
break; |
|
|
|
case 5: |
|
|
|
UserInterface::print("You found some info about the arch-mage:\n"); |
|
|
|
UserInterface::characterInfo(archMage); |
|
|
|
break; |
|
|
|
case 6: |
|
|
|
UserInterface::print("You meditate and got some insight to your ability:\n"); |
|
|
|
UserInterface::characterInfo(player); |
|
|
|
break; |
|
|
|
} |
|
|
|
UserInterface::nextDay(); |
|
|
|
} |
|
|
|
} |