| @ -0,0 +1 @@ | |||||
| GKSK{H0w_d1d_I_n0t_real1ze_such_4_s7up1d_m1sT4k3} | |||||
| @ -1,58 +0,0 @@ | |||||
| #include "src/class/player.hpp" | |||||
| #include "src/interface/creation.hpp" | |||||
| #include "src/interface/info.hpp" | |||||
| #include "src/system/betatest.hpp" | |||||
| #include <iostream> | |||||
| int main(int argc, char const *argv[]) | |||||
| { | |||||
| Player *player = nullptr; | |||||
| if (checkBetaTest()) | |||||
| { | |||||
| int choice; | |||||
| do | |||||
| { | |||||
| printf("===== HackTheGame v0.0.1 (Beta) =====\n"); | |||||
| printf("[1] Create new Character\n"); | |||||
| printf("[2] Character Info\n"); | |||||
| printf("[9] Credits\n"); | |||||
| printf("[0] Exit\n"); | |||||
| printf(">"); | |||||
| scanf("%d", &choice); | |||||
| switch (choice) | |||||
| { | |||||
| case 1: | |||||
| player = createCharacter(); | |||||
| break; | |||||
| case 2: | |||||
| if (player == nullptr) | |||||
| { | |||||
| std::cout << "Please create a character first!" << std::endl; | |||||
| } | |||||
| else | |||||
| { | |||||
| Info::ofPlayer(player); | |||||
| } | |||||
| break; | |||||
| case 9: | |||||
| Info::ofApplication(); | |||||
| break; | |||||
| case 0: | |||||
| break; | |||||
| default: | |||||
| printf("Not Implemented...\n"); | |||||
| } | |||||
| } while (choice != 0); | |||||
| } | |||||
| else | |||||
| { | |||||
| printf("Please get a beta.test key from one of our developer to get access to beta test...\n"); | |||||
| return 0; | |||||
| } | |||||
| } | |||||
| @ -0,0 +1,135 @@ | |||||
| #include "src/class/player.hpp" | |||||
| #include "src/class/monster.hpp" | |||||
| #include "src/interface/battle.hpp" | |||||
| #include "src/interface/creation.hpp" | |||||
| #include "src/interface/info.hpp" | |||||
| #include "src/system/betatest.hpp" | |||||
| #include "src/system/memory.hpp" | |||||
| #include "src/system/flag.hpp" | |||||
| #include <iostream> | |||||
| void printMenu(); | |||||
| void printMenu() | |||||
| { | |||||
| printf("===== HackTheGame v0.0.1 (Beta) =====\n"); | |||||
| printf("[1] Create new Character\n"); | |||||
| printf("[2] Character Info\n"); | |||||
| printf("[9] Credits\n"); | |||||
| printf("[0] Exit\n"); | |||||
| printf(">"); | |||||
| } | |||||
| int main(int argc, char const *argv[]) | |||||
| { | |||||
| Player *player; | |||||
| Monster *enemy; | |||||
| std::cout << "This game is still in closed beta\n" | |||||
| << "Please input your beta test code\n" | |||||
| << ">" << std::flush; | |||||
| std::string betaCode; | |||||
| std::cin >> betaCode; | |||||
| if (BetaTest::check(betaCode)) | |||||
| { | |||||
| std::cout << "Welcome back tester!\n" | |||||
| << "do you have your character backup code?\n" | |||||
| << "[y/N] " << std::flush; | |||||
| char choice = 'n'; | |||||
| std::cin >> choice; | |||||
| if (choice == 'Y' || choice == 'y') | |||||
| { | |||||
| std::cout << "Please input your backup code\n" | |||||
| << "> " << std::flush; | |||||
| std::string code; | |||||
| std::cin >> code; | |||||
| player = Memory::loadFromCode(code); | |||||
| if (player == nullptr) | |||||
| { | |||||
| std::cout << "Your backup code is invalid, please try again..." << std::endl; | |||||
| return 1; | |||||
| } | |||||
| } | |||||
| else | |||||
| { | |||||
| player = Creation::ofPlayer(); | |||||
| } | |||||
| do | |||||
| { | |||||
| std::cout << "====== HackTheGame v0.0.2 (Closed Beta) =====\n" | |||||
| << "[1] Character Info\n" | |||||
| << "[2] Hunt Monster\n" | |||||
| << "[3] Fight Boss\n" | |||||
| << "[4] Rest\n" | |||||
| << "[9] Credits\n" | |||||
| << "[0] Exit\n" | |||||
| << ">" << std::flush; | |||||
| choice = '0'; | |||||
| std::cin >> choice; | |||||
| switch (choice) | |||||
| { | |||||
| case '1': | |||||
| Info::ofPlayer(player); | |||||
| break; | |||||
| case '2': | |||||
| enemy = Creation::ofMonster(); | |||||
| if (enemy != nullptr) | |||||
| { | |||||
| Battle::Start(player, enemy); | |||||
| if (Battle::Lose()) | |||||
| { | |||||
| std::cout << "GAME OVER !!!!" << std::endl; | |||||
| return 0; | |||||
| } | |||||
| } | |||||
| break; | |||||
| case '3': | |||||
| enemy = Creation::ofBoss(); | |||||
| if (enemy != nullptr) | |||||
| { | |||||
| Battle::Start(player, enemy); | |||||
| if (Battle::Won()) | |||||
| { | |||||
| Flag::Print(); | |||||
| } | |||||
| else | |||||
| { | |||||
| std::cout << "GAME OVER !!!!" << std::endl; | |||||
| return 0; | |||||
| } | |||||
| } | |||||
| break; | |||||
| case '4': | |||||
| std::cout << "You take a rest at nearby Inn...\n" | |||||
| << "You wrote your journey to a diary in some cryptic language...\n" | |||||
| << Memory::saveToCode(player) << "\n" | |||||
| << "You woke up feeling resfreshed...\n" | |||||
| << std::flush; | |||||
| player->restoreHP(); | |||||
| break; | |||||
| case '9': | |||||
| Info::ofApplication(); | |||||
| break; | |||||
| case '0': | |||||
| return 0; | |||||
| break; | |||||
| default: | |||||
| printf("Not Implemented...\n"); | |||||
| } | |||||
| } while (choice != 0); | |||||
| } | |||||
| else | |||||
| { | |||||
| std::cout << "Invalid code, exiting..." << std::endl; | |||||
| return 0; | |||||
| } | |||||
| } | |||||
| @ -0,0 +1,89 @@ | |||||
| #include "src/interface/battle.hpp" | |||||
| #include <iostream> | |||||
| #include <unistd.h> | |||||
| bool Battle::win = false; | |||||
| bool Battle::Won() | |||||
| { | |||||
| return win; | |||||
| } | |||||
| bool Battle::Lose() | |||||
| { | |||||
| return !win; | |||||
| } | |||||
| void Battle::Start(Player *player, Monster *monster) | |||||
| { | |||||
| std::cout << " ===== BATTLE INFO ===== \n" | |||||
| << player->getName() << " Lv." << player->getLevel() << ":\n" | |||||
| << " HP : " << player->getCurrentHP() << "/" << player->getMaxHP() << "\n" | |||||
| << " Atk : " << player->getAtk() << "\n" | |||||
| << " Def : " << player->getDef() << "\n" | |||||
| << " VS \n" | |||||
| << monster->getName() << "\n" | |||||
| << " HP : " << monster->getCurrentHP() << "/" << monster->getMaxHP() << "\n" | |||||
| << " Atk : " << monster->getAtk() << "\n" | |||||
| << " Def : " << monster->getDef() << "\n" | |||||
| << " Drop: " << monster->getBounty() << "\n" | |||||
| << std::endl; | |||||
| std::cout << " ===== BATTLE START ===== " << std::endl; | |||||
| while (player->isAlive() && monster->isAlive()) | |||||
| { | |||||
| std::cout << player->getName() << " attacked " << monster->getName() << "!" << std::endl; | |||||
| usleep(200000); | |||||
| int monsterDmg = monster->defend(player->getAtk()); | |||||
| if (monsterDmg > 0) | |||||
| { | |||||
| std::cout << monster->getName() << " got hit by " << monsterDmg << " points!" << std::endl; | |||||
| } | |||||
| else | |||||
| { | |||||
| std::cout << monster->getName() << " blocked the attack!" << std::endl; | |||||
| } | |||||
| usleep(200000); | |||||
| if (monster->isAlive()) | |||||
| { | |||||
| std::cout << monster->getName() << " attacked " << player->getName() << "!" << std::endl; | |||||
| usleep(200000); | |||||
| int playerDmg = player->defend(monster->getAtk()); | |||||
| if (playerDmg > 0) | |||||
| { | |||||
| std::cout << player->getName() << " got hit by " << playerDmg << " points!" << std::endl; | |||||
| } | |||||
| else | |||||
| { | |||||
| std::cout << player->getName() << " blocked the attack!" << std::endl; | |||||
| } | |||||
| usleep(200000); | |||||
| } | |||||
| } | |||||
| if (player->isAlive()) | |||||
| { | |||||
| std::cout << "YOU WIN !!!\n" | |||||
| << "Got " << monster->getBounty() << " points of experience.\n" | |||||
| << std::flush; | |||||
| player->takeExperience(monster->getBounty()); | |||||
| if (player->checkLevelup()) | |||||
| { | |||||
| std::cout << "You leveled up!" << std::endl; | |||||
| player->levelUp(); | |||||
| } | |||||
| else | |||||
| { | |||||
| std::cout << player->expToLevelUp() << " points left to level up.\n" | |||||
| << std::flush; | |||||
| } | |||||
| win = true; | |||||
| } | |||||
| else | |||||
| { | |||||
| std::cout << "YOU LOSE !!!!!" << std::endl; | |||||
| win = false; | |||||
| } | |||||
| } | |||||
| @ -0,0 +1,18 @@ | |||||
| #ifndef HACKTHEGAME_BATTLESYSTEM_VERSION_000_HPP | |||||
| #define HACKTHEGAME_BATTLESYSTEM_VERSION_000_HPP | |||||
| #include "src/class/monster.hpp" | |||||
| #include "src/class/player.hpp" | |||||
| class Battle | |||||
| { | |||||
| private: | |||||
| static bool win; | |||||
| public: | |||||
| static bool Won(); | |||||
| static bool Lose(); | |||||
| static void Start(Player *player, Monster *monster); | |||||
| }; | |||||
| #endif | |||||
| @ -1,37 +0,0 @@ | |||||
| #include "src/interface/battle0.hpp" | |||||
| int startBattle(Player *player, Monster *monster) | |||||
| { | |||||
| printf(" ===== BATTLE INFO ===== \n"); | |||||
| printf("%15s (Lv.%n):\n", player->getName(), player->getLevel()); | |||||
| printf(" HP : %n/%n\n", player->getCurrentHP(), player->getMaxHP()); | |||||
| printf(" Att: %n\n", player->getAtt()); | |||||
| printf(" Def: %n\n", player->getDef()); | |||||
| printf("%15s:\n", monster->getName()); | |||||
| printf(" HP : %n/%n\n", monster->getCurrentHP(), monster->getMaxHP()); | |||||
| printf(" Att: %n\n", monster->getAtt()); | |||||
| printf(" Def: %n\n", monster->getDef()); | |||||
| printf(" ===== BATTLE START ===== \n"); | |||||
| while (player->isAlive() && monster->isAlive()) | |||||
| { | |||||
| printf("%15s and %15s attacked each other !!!\n", player->getName(), monster->getName()); | |||||
| printf("%15s lose %d HP...\n", player->getName(), player->defend(monster->getAtt())); | |||||
| printf("%15s lose %d HP...\n", monster->getName(), monster->defend(player->getAtt())); | |||||
| } | |||||
| printf(" ===== BATTLE END ===== \n"); | |||||
| if (player->isAlive()) | |||||
| { | |||||
| player->restoreHP(); | |||||
| printf("YOU WIN !!!\n"); | |||||
| return 1; | |||||
| } | |||||
| else | |||||
| { | |||||
| printf("YOU LOSE !!!\n"); | |||||
| return 0; | |||||
| } | |||||
| } | |||||
| @ -1,11 +0,0 @@ | |||||
| #ifndef HACKTHEGAME_BATTLESYSTEM_VERSION_000_HPP | |||||
| #define HACKTHEGAME_BATTLESYSTEM_VERSION_000_HPP | |||||
| #include "src/class/monster.hpp" | |||||
| #include "src/class/player.hpp" | |||||
| #include <cstdio> | |||||
| int startBattle(Player *player, Monster *monster); | |||||
| #endif | |||||
| @ -1,29 +1,9 @@ | |||||
| #include "src/system/betatest.hpp" | #include "src/system/betatest.hpp" | ||||
| #include <fstream> | |||||
| #include <string> | |||||
| bool checkBetaTest() | |||||
| { | |||||
| std::string betaFlag = "4re_Y0u_53ri0usly_checking_f0r_b3t4_t3sT?"; | |||||
| std::string tmp; | |||||
| int result = -1; | |||||
| try | |||||
| { | |||||
| std::fstream betaFile("beta.test"); | |||||
| if (betaFile) { | |||||
| betaFile >> tmp; | |||||
| std::string BetaTest::betaFlag = "4re_Y0u_53ri0usly_checking_f0r_b3t4_t3sT?"; | |||||
| result = tmp.compare("GKSK{" + betaFlag + "}"); | |||||
| } | |||||
| } | |||||
| catch(...) | |||||
| { | |||||
| return false; | |||||
| } | |||||
| return result == 0; | |||||
| bool BetaTest::check(std::string input) | |||||
| { | |||||
| return input.compare("GKSK{" + betaFlag + "}") == 0; | |||||
| } | } | ||||
| @ -1,6 +1,15 @@ | |||||
| #ifndef HACKTHEGAME_BETATEST_HPP | #ifndef HACKTHEGAME_BETATEST_HPP | ||||
| #define HACKTHEGAME_BETATEST_HPP | #define HACKTHEGAME_BETATEST_HPP | ||||
| bool checkBetaTest(); | |||||
| #include <string> | |||||
| class BetaTest | |||||
| { | |||||
| private: | |||||
| static std::string betaFlag; | |||||
| public: | |||||
| static bool check(std::string input); | |||||
| }; | |||||
| #endif | #endif | ||||
| @ -0,0 +1,34 @@ | |||||
| #include "flag.hpp" | |||||
| #include <fstream> | |||||
| #include <iostream> | |||||
| std::string Flag::flag = ""; | |||||
| bool Flag::Load() | |||||
| { | |||||
| std::ifstream file("flag.txt"); | |||||
| if (file.good()) | |||||
| { | |||||
| file >> flag; | |||||
| return true; | |||||
| } | |||||
| else | |||||
| { | |||||
| return false; | |||||
| } | |||||
| } | |||||
| void Flag::Print() | |||||
| { | |||||
| if (Load()) | |||||
| { | |||||
| std::cout << flag << std::endl; | |||||
| } | |||||
| else | |||||
| { | |||||
| std::cout << "Something went wrong on the server\n" | |||||
| << "Please contact the administrator...\n" | |||||
| << std::endl; | |||||
| } | |||||
| } | |||||
| @ -0,0 +1,16 @@ | |||||
| #ifndef FLAG_HACKTHEGAME_HPP | |||||
| #define FLAG_HACKTHEGAME_HPP | |||||
| #include <string> | |||||
| class Flag | |||||
| { | |||||
| private: | |||||
| static std::string flag; | |||||
| static bool Load(); | |||||
| public: | |||||
| static void Print(); | |||||
| }; | |||||
| #endif | |||||
| @ -0,0 +1,53 @@ | |||||
| #include "memory.hpp" | |||||
| #include "cpp-base64/base64.h" | |||||
| #include <string> | |||||
| #include <cstring> | |||||
| Player *Memory::loadFromCode(std::string code) | |||||
| { | |||||
| code = base64_decode(code); | |||||
| char playerName[16] = {0}; | |||||
| int playerHP = 0; | |||||
| int playerAtk = 0; | |||||
| int playerDef = 0; | |||||
| int playerLevel = 0; | |||||
| int playerExp = 0; | |||||
| int result = sscanf(code.c_str(), | |||||
| "PlayerLevel=%d;PlayerExp=%d;PlayerHP=%d;PlayerAtk=%d;PlayerDef=%d;PlayerName=%15s", | |||||
| &playerLevel, | |||||
| &playerExp, | |||||
| &playerHP, | |||||
| &playerAtk, | |||||
| &playerDef, | |||||
| playerName); | |||||
| std::string playerTrueName = playerName; | |||||
| if (result == 6) | |||||
| { | |||||
| return new Player(playerTrueName, playerHP, playerAtk, playerDef, playerLevel, playerExp); | |||||
| } | |||||
| else | |||||
| { | |||||
| return nullptr; | |||||
| } | |||||
| } | |||||
| std::string Memory::saveToCode(Player *player) | |||||
| { | |||||
| char code[256]; | |||||
| snprintf(code, sizeof(code), | |||||
| "PlayerLevel=%d;PlayerExp=%d;PlayerHP=%d;PlayerAtk=%d;PlayerDef=%d;PlayerName=%s", | |||||
| player->getLevel(), | |||||
| player->getExp(), | |||||
| player->getMaxHP(), | |||||
| player->getAtk(), | |||||
| player->getDef(), | |||||
| player->getName().c_str()); | |||||
| return base64_encode(reinterpret_cast<unsigned char *>(code), | |||||
| strlen(code)); | |||||
| } | |||||
| @ -0,0 +1,14 @@ | |||||
| #ifndef HACKTHEGAME_SAVELOAD_HPP | |||||
| #define HACKTHEGAME_SAVELOAD_HPP | |||||
| #include "src/class/player.hpp" | |||||
| #include <fstream> | |||||
| class Memory | |||||
| { | |||||
| public: | |||||
| static Player *loadFromCode(std::string); | |||||
| static std::string saveToCode(Player *); | |||||
| }; | |||||
| #endif | |||||