From 65578983c964f861e5d40de483a914a2421c3cbe Mon Sep 17 00:00:00 2001 From: myitinos Date: Wed, 11 Sep 2019 02:03:06 +0800 Subject: [PATCH] first commit --- Makefile | 24 +++++ flag.txt | 1 + lib/BattleInterface.hpp | 29 ++++++ lib/Character.cpp | 147 ++++++++++++++++++++++++++++++ lib/Character.hpp | 54 +++++++++++ lib/Spell.cpp | 42 +++++++++ lib/Spell.hpp | 28 ++++++ lib/UserInterface.cpp | 194 ++++++++++++++++++++++++++++++++++++++++ lib/UserInterface.hpp | 50 +++++++++++ main | Bin 0 -> 67744 bytes main.cpp | 49 ++++++++++ 11 files changed, 618 insertions(+) create mode 100644 Makefile create mode 100644 flag.txt create mode 100644 lib/BattleInterface.hpp create mode 100644 lib/Character.cpp create mode 100644 lib/Character.hpp create mode 100644 lib/Spell.cpp create mode 100644 lib/Spell.hpp create mode 100644 lib/UserInterface.cpp create mode 100644 lib/UserInterface.hpp create mode 100755 main create mode 100644 main.cpp diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..ecba416 --- /dev/null +++ b/Makefile @@ -0,0 +1,24 @@ +CC = g++ + +UserInterface.o: lib/UserInterface.cpp lib/UserInterface.hpp + g++ -c lib/UserInterface.cpp -o UserInterface.o + +BattleInterface.o: lib/BattleInterface.cpp lib/BattleInterface.hpp + g++ -c lib/BattleInterface.cpp -o BattleInterface.o + +Spell.o: lib/Spell.cpp lib/Spell.hpp + g++ -c lib/Spell.cpp -o Spell.o + +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 + +clean: Spell.o Character.o UserInterface.o + rm Spell.o Character.o UserInterface.o + +striped: Spell.o Character.o main.cpp + g++ -s main.cpp -o main Spell.o Character.o UserInterface.o + +all: Spell.o Character.o main diff --git a/flag.txt b/flag.txt new file mode 100644 index 0000000..f824bde --- /dev/null +++ b/flag.txt @@ -0,0 +1 @@ +slashroot{dummy} diff --git a/lib/BattleInterface.hpp b/lib/BattleInterface.hpp new file mode 100644 index 0000000..f86da15 --- /dev/null +++ b/lib/BattleInterface.hpp @@ -0,0 +1,29 @@ +#ifndef SPELL_WARZ_BATTLEINTERFACE_HPP +#define SPELL_WARZ_BATTLEINTERFACE_HPP 1 + +#include +#include +#include + +#include "Character.hpp" +#include "Spell.hpp" +#include "UserInterface.hpp" + +class BattleInterface +{ +protected: + static const int maxTurn = 100; + static int turn; + + Character *player1; + Character *player2; + +public: + void battleStartAnnounce(); + void battleEndAnnouce(); + void start(); + + Character *getWinner(); +}; + +#endif \ No newline at end of file diff --git a/lib/Character.cpp b/lib/Character.cpp new file mode 100644 index 0000000..828474d --- /dev/null +++ b/lib/Character.cpp @@ -0,0 +1,147 @@ +#include "Character.hpp" +#include + +Character::Character(char *n, int l, int e, int h, int m, int a, int d) +{ + strcpy(this->name, n); + this->level = l; + this->experience = e; + this->maxHP = h; + this->curHP = maxHP; + this->maxMP = m; + this->curMP = maxMP; + this->atk = a; + this->def = d; +} + +char *Character::getName() +{ + return this->name; +} + +int Character::getLevel() +{ + return this->level; +} + +int Character::getExperience() +{ + return this->experience; +} + +int Character::getMaxHP() +{ + return this->maxHP; +} + +int Character::getCurHP() +{ + return this->curHP; +} + +int Character::getMaxMP() +{ + return this->maxMP; +} + +int Character::getCurMP() +{ + return this->curMP; +} + +int Character::getAtk() +{ + return this->atk; +} + +int Character::getDef() +{ + return this->def; +} + +void Character::levelUp() +{ + if ((this->level <= maxLevel) && this->readytoLevelUp()) + { + this->level++; + this->maxHP += 10; + this->maxMP += 5; + } + + this->curHP = this->maxHP; + this->curMP = this->maxMP; +} + +void Character::restoreHP(int n) +{ + this->curHP += n; + if (this->curHP > this->maxHP) + { + this->curHP = this->maxHP; + } +} + +void Character::restoreMP(int n) +{ + this->curMP += n; + if (this->curMP > this->maxMP) + { + this->curMP = this->maxMP; + } +} + +void Character::reduceHP(int n) +{ + this->curHP -= n; +} + +void Character::reduceMP(int n) +{ + this->curMP -= n; +} + +bool Character::isAlive() +{ + return this->curHP > 0; +} + +int Character::toNextLevel() +{ + return (this->level <= maxLevel) ? ((this->level + 1) * (this->level + 1)) - this->getExperience() : 999999; +} + +bool Character::readytoLevelUp() +{ + return (this->toNextLevel() <= 0); +} + +void Character::increaseExperience(int n) +{ + this->experience += n; + if (this->experience > maxEperience) + { + this->experience = maxEperience; + } +} + +bool Character::canCastSpell(Spell *s) +{ + return this->curMP >= s->getCost(); +} + +void Character::castSpell(Spell *s, Character *t) +{ + this->reduceMP(s->getCost()); + t->reduceHP(s->getAmount()); +} + +void Character::rest() +{ + this->curHP = this->maxHP; + this->curMP = this->maxMP; +} + +void Character::suicide() +{ + this->curHP = 0; +} \ No newline at end of file diff --git a/lib/Character.hpp b/lib/Character.hpp new file mode 100644 index 0000000..f68e4b2 --- /dev/null +++ b/lib/Character.hpp @@ -0,0 +1,54 @@ +#ifndef SPELL_WARZ_CHARACTER_HPP +#define SPELL_WARZ_CHARACTER_HPP 1 + +#include + +#include "Spell.hpp" + +class Character +{ +protected: + static const int maxLevel = 100; + static const int maxEperience = 999999999; + char name[16]; + + int level; + int experience; + int maxHP; + int curHP; + int maxMP; + int curMP; + int atk; + int def; + + void restoreHP(int); + void restoreMP(int); + void reduceHP(int); + void reduceMP(int); + +public: + Character(char *, int, int, int, int, int, int); + + void castSpell(Spell *, Character *); + bool canCastSpell(Spell *); + + char *getName(); + int getLevel(); + int getExperience(); + int getMaxHP(); + int getCurHP(); + int getMaxMP(); + int getCurMP(); + int getAtk(); + int getDef(); + int toNextLevel(); + + bool readytoLevelUp(); + bool isAlive(); + void levelUp(); + void suicide(); + void rest(); + void increaseExperience(int n); +}; + +#endif \ No newline at end of file diff --git a/lib/Spell.cpp b/lib/Spell.cpp new file mode 100644 index 0000000..4514cb4 --- /dev/null +++ b/lib/Spell.cpp @@ -0,0 +1,42 @@ +#include "Spell.hpp" + +Spell::Spell(std::string n, int t, int a, int c) +{ + this->name = std::string(n); + this->type = t; + this->amount = a; + this->cost = c; +} + +int Spell::getType() +{ + return this->type; +} + +int Spell::getAmount() +{ + return this->amount; +} + +int Spell::getCost() +{ + return this->cost; +} + +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), +}; \ No newline at end of file diff --git a/lib/Spell.hpp b/lib/Spell.hpp new file mode 100644 index 0000000..ad7b166 --- /dev/null +++ b/lib/Spell.hpp @@ -0,0 +1,28 @@ +#ifndef SPELL_WARZ_SPELL_CPP +#define SPELL_WARZ_SPELL_CPP 1 + +#include +#include + +class Spell +{ +protected: + std::string name; + + int type; + int amount; + int cost; + +public: + int TYPE_RESTORATION = 0; + int TYPE_DESTRUCTION = 1; + static std::vector Book; + + Spell(std::string, int, int, int); + int getType(); + int getAmount(); + int getCost(); + std::string getName(); +}; + +#endif \ No newline at end of file diff --git a/lib/UserInterface.cpp b/lib/UserInterface.cpp new file mode 100644 index 0000000..1dbab09 --- /dev/null +++ b/lib/UserInterface.cpp @@ -0,0 +1,194 @@ +#include "UserInterface.hpp" + +const int UserInterface::interval = 1000; // in ms +const int UserInterface::miniInterval = 50; // in ms +const int UserInterface::maxDay = 28; +const int UserInterface::maxMonth = 4; +const int UserInterface::maxYear = 100; + +int UserInterface::day = 1; +int UserInterface::month = 1; +int UserInterface::year = 90; + +bool UserInterface::gameOver = false; + +std::vector UserInterface::dayName = { + "Morndas", + "Tirdas", + "Middas", + "Turdas", + "Fredas", + "Loredas", + "Sundas", +}; + +std::vector UserInterface::monthName = { + "Morning Star", + "Sun's Dawn'", + "First Seed", + "Rain's Hand", + "Second Seed", + "Mid Year", + "Sun's Height", + "Last Seed", + "Hearthfire", + "Frostfall", + "Sun's Dusk", + "Evening Star", +}; + +void UserInterface::print(std::string msg) +{ + std::cout << msg << std::flush; + std::this_thread::sleep_for(std::chrono::milliseconds(UserInterface::interval)); +} + +void UserInterface::print(char *msg) +{ + std::cout << msg << std::flush; + std::this_thread::sleep_for(std::chrono::milliseconds(UserInterface::interval)); +} +void UserInterface::print(const char *msg) +{ + std::cout << msg << std::flush; + std::this_thread::sleep_for(std::chrono::milliseconds(UserInterface::interval)); +} + +void UserInterface::printByChar(const char *msg) +{ + int len = strlen(msg); + for (size_t i = 0; i < len; i++) + { + std::cout << msg[i] << std::flush; + std::this_thread::sleep_for(std::chrono::milliseconds(UserInterface::miniInterval)); + } +} + +void UserInterface::welcomeMessage() +{ + std::cout << "+++++++++++++++++++++++++++++++++++\n" + << "+ Welcome to Spell-Warz-Again !!! +\n" + << "+++++++++++++++++++++++++++++++++++\n" + << std::flush; +} + +Character *UserInterface::characterCreation() +{ + char buffer[128] = {0}; + char choice = 0; + while (choice != 'y' && choice != 'Y') + { + std::cout << "Who should we call you?\n" + << ">" << std::flush; + std::cin >> buffer; + std::cout << "So you are a young mage named \"" << buffer << "\" correct? (y/N)\n" + << ">"; + std::cin >> choice; + } + return new Character( + buffer, 1, 0, 10, 10, 5, 5); +} + +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" + "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" + "Note: You need to do this in 10 year of in-game, otherwise you would graduate first...\n"); +} + +std::string UserInterface::dateString() +{ + char date[5] = {0}; + + if (UserInterface::day < 21) + { + switch (UserInterface::day) + { + case 1: + sprintf(date, "1st"); + break; + case 2: + sprintf(date, "2nd"); + break; + case 3: + sprintf(date, "3rd"); + break; + default: + sprintf(date, "%dth", UserInterface::day); + break; + } + } + else + { + switch (UserInterface::day % 10) + { + case 1: + sprintf(date, "%dst", UserInterface::day); + break; + case 2: + sprintf(date, "%dnd", UserInterface::day); + break; + case 3: + sprintf(date, "%drd", UserInterface::day); + break; + default: + sprintf(date, "%dth", UserInterface::day); + break; + } + } + + return std::string( + UserInterface::dayName.at((UserInterface::day % 7) - 1) + ", " + + date + " of " + UserInterface::monthName.at(UserInterface::month - 1) + + ", Year " + std::to_string(UserInterface::year)); +} + +void UserInterface::menu() +{ + std::cout << UserInterface::dateString() << "\n" + << "Available action:\n" + << "[1] Take a rest\n" + << "[2] Practice magic\n" + << "[3] Spar against classmate\n" + << "[4] Challenge the new Arch-Mage\n" + << "[5] Gather info about the new Arch-Mage\n" + << "[6] Meditate to your inner-self\n" + << "[0] Commit sudoku\n" + << std::flush; +} + +int UserInterface::getNumber(std::string msg, int min, int max) +{ + int buffer = max + 1; + while (!(buffer <= max && buffer >= min)) + { + std::cout << msg << std::flush; + std::cin >> buffer; + } + return buffer; +} + +void UserInterface::nextDay() +{ + if (UserInterface::day++ >= UserInterface::maxDay) + { + if (UserInterface::month++ >= UserInterface::maxMonth) + { + if (UserInterface::year++ >= UserInterface::maxYear) + { + UserInterface::gameOver = true; + } + } + } +} + +bool UserInterface::isGameOver() +{ + return gameOver; +} \ No newline at end of file diff --git a/lib/UserInterface.hpp b/lib/UserInterface.hpp new file mode 100644 index 0000000..21be348 --- /dev/null +++ b/lib/UserInterface.hpp @@ -0,0 +1,50 @@ +#ifndef SPELL_WARZ_USER_INTERFACE_HPP +#define SPELL_WARZ_USER_INTERFACE_HPP 1 + +#include +#include +#include +#include +#include + +#include "Character.hpp" +#include "Spell.hpp" + +class UserInterface +{ +protected: + static const int interval; // in ms + static const int miniInterval; // in ms + static const int maxDay; + static const int maxMonth; + static const int maxYear; + + static std::vector dayName; + static std::vector monthName; + + static int day; + static int month; + static int year; + + static bool gameOver; + +public: + static void print(std::string); + static void print(const char *); + static void print(char *); + static void printByChar(std::string); + static void printByChar(const char *); + static void printByChar(char *); + + static void welcomeMessage(); + static void epilogue(); + static void menu(); + static void nextDay(); + + static std::string dateString(); + static int getNumber(std::string, int, int); + static Character *characterCreation(); + static bool isGameOver(); +}; + +#endif \ No newline at end of file diff --git a/main b/main new file mode 100755 index 0000000000000000000000000000000000000000..9a120ffe040560ca60472e87869f689c898b86a1 GIT binary patch literal 67744 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 +#include +#include +#include +#include + +#include "lib/Character.hpp" +#include "lib/Spell.hpp" +#include "lib/UserInterface.hpp" +// #include "lib/BattleInterface.hpp" + +std::string loadFlag() +{ + return ""; +} + +int main() +{ + std::string flag; + Character *player; + + flag = loadFlag(); + srand(time(0)); + + UserInterface::welcomeMessage(); + UserInterface::epilogue(); + player = UserInterface::characterCreation(); + + while (player->isAlive() && !UserInterface::isGameOver()) + { + int choice; + UserInterface::menu(); + choice = UserInterface::getNumber( + "What are you gonna do today?\n>", + 0, 0); + switch (choice) + { + 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(); + break; + default: + break; + } + } +}