From 663c0602acd9c4060f4fe6555aec6eb46f157022 Mon Sep 17 00:00:00 2001 From: myitinos Date: Wed, 11 Sep 2019 19:52:53 +0800 Subject: [PATCH] finger crossed --- Makefile | 12 ++--- lib/BattleInterface.cpp | 107 ++++++++++++++++++++++++++++++++++++++ lib/BattleInterface.hpp | 14 +++-- lib/Character.cpp | 38 +++++++++++--- lib/Character.hpp | 10 ++-- lib/Spell.cpp | 22 ++++---- lib/Spell.hpp | 2 +- lib/UserInterface.cpp | 51 +++++++++++++++---- lib/UserInterface.hpp | 3 ++ main | Bin 67744 -> 86328 bytes main.cpp | 110 +++++++++++++++++++++++++++++++++++++--- 11 files changed, 319 insertions(+), 50 deletions(-) create mode 100644 lib/BattleInterface.cpp diff --git a/Makefile b/Makefile index ecba416..ae42fa5 100644 --- a/Makefile +++ b/Makefile @@ -12,13 +12,13 @@ Spell.o: lib/Spell.cpp lib/Spell.hpp Character.o: lib/Character.cpp lib/Character.hpp g++ -c lib/Character.cpp -o Character.o -main: Spell.o Character.o UserInterface.o main.cpp - g++ main.cpp -o main Spell.o Character.o UserInterface.o +main: Spell.o Character.o UserInterface.o BattleInterface.o main.cpp + g++ main.cpp -o main Spell.o Character.o UserInterface.o BattleInterface.o -clean: Spell.o Character.o UserInterface.o - rm Spell.o Character.o UserInterface.o +clean: Spell.o Character.o UserInterface.o BattleInterface.o + rm Spell.o Character.o UserInterface.o BattleInterface.o -striped: Spell.o Character.o main.cpp - g++ -s main.cpp -o main Spell.o Character.o UserInterface.o +striped: Spell.o Character.o UserInterface.o BattleInterface.o main.cpp + g++ -s main.cpp -o main Spell.o Character.o UserInterface.o BattleInterface.o all: Spell.o Character.o main diff --git a/lib/BattleInterface.cpp b/lib/BattleInterface.cpp new file mode 100644 index 0000000..591aa82 --- /dev/null +++ b/lib/BattleInterface.cpp @@ -0,0 +1,107 @@ +#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"; + } + + 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()); + 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(); +} diff --git a/lib/BattleInterface.hpp b/lib/BattleInterface.hpp index f86da15..dd0034b 100644 --- a/lib/BattleInterface.hpp +++ b/lib/BattleInterface.hpp @@ -12,18 +12,24 @@ class BattleInterface { protected: - static const int maxTurn = 100; - static int turn; + static const int maxTurn; + int turn; Character *player1; Character *player2; + Character *winner; + Character *loser; -public: void battleStartAnnounce(); void battleEndAnnouce(); + void clearBuff(); +public: + BattleInterface(); + BattleInterface(Character *p1, Character *p2); + void start(); - Character *getWinner(); + Character *getLoser(); }; #endif \ No newline at end of file diff --git a/lib/Character.cpp b/lib/Character.cpp index 828474d..9cd3484 100644 --- a/lib/Character.cpp +++ b/lib/Character.cpp @@ -3,7 +3,20 @@ Character::Character(char *n, int l, int e, int h, int m, int a, int d) { + this->level = l; + this->experience = e; + this->maxHP = h; + this->curHP = maxHP; + this->maxMP = m; + this->curMP = maxMP; + this->atk = a; + this->def = d; strcpy(this->name, n); + this->name[15] = 0; +} + +Character::Character(const char *n, int l, int e, int h, int m, int a, int d) +{ this->level = l; this->experience = e; this->maxHP = h; @@ -12,6 +25,7 @@ Character::Character(char *n, int l, int e, int h, int m, int a, int d) this->curMP = maxMP; this->atk = a; this->def = d; + strcpy(this->name, n); } char *Character::getName() @@ -63,13 +77,13 @@ void Character::levelUp() { if ((this->level <= maxLevel) && this->readytoLevelUp()) { + this->experience -= this->toNextLevel(); this->level++; this->maxHP += 10; this->maxMP += 5; + this->curHP = this->maxHP; + this->curMP = this->maxMP; } - - this->curHP = this->maxHP; - this->curMP = this->maxMP; } void Character::restoreHP(int n) @@ -107,12 +121,12 @@ bool Character::isAlive() int Character::toNextLevel() { - return (this->level <= maxLevel) ? ((this->level + 1) * (this->level + 1)) - this->getExperience() : 999999; + return (this->level + 1) * (this->level + 1); } bool Character::readytoLevelUp() { - return (this->toNextLevel() <= 0); + return (this->toNextLevel() <= this->experience); } void Character::increaseExperience(int n) @@ -122,6 +136,10 @@ void Character::increaseExperience(int n) { this->experience = maxEperience; } + while (this->readytoLevelUp()) + { + this->levelUp(); + } } bool Character::canCastSpell(Spell *s) @@ -141,7 +159,15 @@ void Character::rest() this->curMP = this->maxMP; } -void Character::suicide() +void Character::kill() { this->curHP = 0; +} + +void Character::revive() +{ + if (this->curHP <= 0) + { + this->curHP = 1; + } } \ No newline at end of file diff --git a/lib/Character.hpp b/lib/Character.hpp index f68e4b2..0ab2fdb 100644 --- a/lib/Character.hpp +++ b/lib/Character.hpp @@ -27,10 +27,11 @@ protected: void reduceMP(int); public: - Character(char *, int, int, int, int, int, int); + Character(char *name, int level, int exp, int hp, int mp, int atk, int def); + Character(const char *name, int level, int exp, int hp, int mp, int atk, int def); - void castSpell(Spell *, Character *); - bool canCastSpell(Spell *); + void castSpell(Spell *src, Character *dst); + bool canCastSpell(Spell *src); char *getName(); int getLevel(); @@ -46,8 +47,9 @@ public: bool readytoLevelUp(); bool isAlive(); void levelUp(); - void suicide(); + void kill(); void rest(); + void revive(); void increaseExperience(int n); }; diff --git a/lib/Spell.cpp b/lib/Spell.cpp index 4514cb4..f5b8492 100644 --- a/lib/Spell.cpp +++ b/lib/Spell.cpp @@ -28,15 +28,15 @@ std::string Spell::getName() return this->name; } -std::vector Spell::Book = { - new Spell("Napalm Beat", 1, 4, 1), - new Spell("Fire Ball", 1, 6, 2), - new Spell("Cold Bolt", 1, 8, 3), - new Spell("Stone curse", 1, 10, 4), - new Spell("Lightning Bolt", 1, 12, 5), - new Spell("Soul Strike", 1, 14, 6), - new Spell("Fire Wall", 1, 16, 7), - new Spell("Frost Diver", 1, 18, 8), - new Spell("Lighting Storm", 1, 20, 9), - new Spell("Asura's Strike", 1, 50, 10), +std::vector Spell::Book = { + Spell("Napalm Beat", 1, 4, 1), + Spell("Fire Ball", 1, 6, 2), + Spell("Cold Bolt", 1, 8, 3), + Spell("Stone curse", 1, 10, 4), + Spell("Lightning Bolt", 1, 12, 5), + Spell("Soul Strike", 1, 14, 6), + Spell("Fire Wall", 1, 16, 7), + Spell("Frost Diver", 1, 18, 8), + Spell("Lighting Storm", 1, 20, 9), + Spell("Asura's Strike", 1, 50, 10), }; \ No newline at end of file diff --git a/lib/Spell.hpp b/lib/Spell.hpp index ad7b166..618bbaa 100644 --- a/lib/Spell.hpp +++ b/lib/Spell.hpp @@ -16,7 +16,7 @@ protected: public: int TYPE_RESTORATION = 0; int TYPE_DESTRUCTION = 1; - static std::vector Book; + static std::vector Book; Spell(std::string, int, int, int); int getType(); diff --git a/lib/UserInterface.cpp b/lib/UserInterface.cpp index 1dbab09..7ddf831 100644 --- a/lib/UserInterface.cpp +++ b/lib/UserInterface.cpp @@ -1,7 +1,7 @@ #include "UserInterface.hpp" -const int UserInterface::interval = 1000; // in ms -const int UserInterface::miniInterval = 50; // in ms +const int UserInterface::interval = 0; // in ms +const int UserInterface::miniInterval = 0; // in ms const int UserInterface::maxDay = 28; const int UserInterface::maxMonth = 4; const int UserInterface::maxYear = 100; @@ -24,7 +24,7 @@ std::vector UserInterface::dayName = { std::vector UserInterface::monthName = { "Morning Star", - "Sun's Dawn'", + "Sun's Dawn", "First Seed", "Rain's Hand", "Second Seed", @@ -93,9 +93,9 @@ void UserInterface::epilogue() { UserInterface::printByChar( "You are just a young mage in a mage school,\n" - "When you witnessed your arch-mage got killed by your senior...\n" - "The killer was mumbling about some flag inside a scroll,\n" - "he constantly mentioned something about a competition called CTF...\n" + "When you witnessed your arch-mage got defeated by your senior...\n" + "He was mumbling about some flag inside a scroll,\n" + "he also mentioned something about a competition called CTF...\n" "You thought to yourself: \"What the f*ck is a CTF?\"\n" "Nevertheless, you want that scroll, you want that flag!\n" "Defeat the new arch-mage that was once your senior to get a glimpse of that scroll!\n" @@ -144,14 +144,16 @@ std::string UserInterface::dateString() } return std::string( - UserInterface::dayName.at((UserInterface::day % 7) - 1) + ", " + + UserInterface::dayName.at(((UserInterface::day - 1) % 7)) + ", " + date + " of " + UserInterface::monthName.at(UserInterface::month - 1) + ", Year " + std::to_string(UserInterface::year)); } void UserInterface::menu() { - std::cout << UserInterface::dateString() << "\n" + std::cout << "=======================================\n" + << UserInterface::dateString() << "\n" + << "=======================================\n" << "Available action:\n" << "[1] Take a rest\n" << "[2] Practice magic\n" @@ -163,14 +165,27 @@ void UserInterface::menu() << std::flush; } +void UserInterface::enemiesInfo(std::vector &enemies) +{ + for (int i = 0; i < enemies.size(); i++) + { + std::cout << "[" << i << "] " << enemies.at(i)->getName() << " (Lv." << enemies.at(i)->getLevel() << ")\n"; + } + std::cout << std::flush; +} + int UserInterface::getNumber(std::string msg, int min, int max) { int buffer = max + 1; - while (!(buffer <= max && buffer >= min)) + do { std::cout << msg << std::flush; - std::cin >> buffer; - } + if (std::cin.failbit || std::cin.eofbit) + { + std::cin.clear(); + std::cin.ignore(1); + } + } while (std::cin >> buffer && !(buffer <= max && buffer >= min)); return buffer; } @@ -184,11 +199,25 @@ void UserInterface::nextDay() { UserInterface::gameOver = true; } + month = 1; } + day = 1; } } bool UserInterface::isGameOver() { return gameOver; +} + +void UserInterface::characterInfo(Character *c) +{ + std::cout << "++++++++++++++++++++++++" + << "\nName: " << c->getName() + << "\n HP: " << c->getCurHP() << "/" << c->getMaxHP() + << "\n MP: " << c->getCurMP() << "/" << c->getMaxMP() + << "\n Lv: " << c->getLevel() + << "\n Xp: " << c->getExperience() + << "\n next: " << c->toNextLevel() + << "\n++++++++++++++++++++++++" << std::endl; } \ No newline at end of file diff --git a/lib/UserInterface.hpp b/lib/UserInterface.hpp index 21be348..3fb5e60 100644 --- a/lib/UserInterface.hpp +++ b/lib/UserInterface.hpp @@ -40,10 +40,13 @@ public: static void epilogue(); static void menu(); static void nextDay(); + static void characterInfo(Character *); + static void enemiesInfo(std::vector &); static std::string dateString(); static int getNumber(std::string, int, int); static Character *characterCreation(); + static bool isGameOver(); }; diff --git a/main b/main index 9a120ffe040560ca60472e87869f689c898b86a1..723bdf02957a8e9ca47bcd7b6a20402975c1c598 100755 GIT binary patch literal 86328 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 literal 67744 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 #include #include +#include #include "lib/Character.hpp" #include "lib/Spell.hpp" #include "lib/UserInterface.hpp" -// #include "lib/BattleInterface.hpp" +#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 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(); } }