@ -0,0 +1,16 @@ | |||
{ | |||
"configurations": [ | |||
{ | |||
"name": "Linux", | |||
"includePath": [ | |||
"${workspaceFolder}/**" | |||
], | |||
"defines": [], | |||
"compilerPath": "/usr/bin/gcc", | |||
"cStandard": "c11", | |||
"cppStandard": "c++17", | |||
"intelliSenseMode": "clang-x64" | |||
} | |||
], | |||
"version": 4 | |||
} |
@ -0,0 +1,7 @@ | |||
{ | |||
"files.associations": { | |||
"limits": "cpp", | |||
"type_traits": "cpp", | |||
"ostream": "cpp" | |||
} | |||
} |
@ -0,0 +1,12 @@ | |||
{ | |||
// See https://go.microsoft.com/fwlink/?LinkId=733558 | |||
// for the documentation about the tasks.json format | |||
"version": "2.0.0", | |||
"tasks": [ | |||
{ | |||
"label": "echo", | |||
"type": "shell", | |||
"command": "echo Hello" | |||
} | |||
] | |||
} |
@ -0,0 +1,44 @@ | |||
COMPILER=g++ | |||
#FLAGS=-g -I. -pedantic -Wall -Wextra -Wcast-align -Wcast-qual -Wctor-dtor-privacy -Wdisabled-optimization -Wformat=2 -Winit-self -Wlogical-op -Wmissing-declarations -Wmissing-include-dirs -Wnoexcept -Wold-style-cast -Woverloaded-virtual -Wredundant-decls -Wshadow -Wsign-conversion -Wsign-promo -Wstrict-null-sentinel -Wstrict-overflow=5 -Wswitch-default -Wundef -Werror -Wno-unused | |||
#FLAGS=-g -I. | |||
FLAGS=-I. | |||
O_DIR=obj | |||
CLASS_DIR=src/class | |||
INTER_DIR=src/interface | |||
SYS_DIR=src/system | |||
OBJ_CMD=$(COMPILER) $(FLAGS) -c $< -o $@ | |||
.PHONY : clean | |||
version001 : main001.o character.o player.o monster.o creation.o info.o betatest.o | |||
$(COMPILER) $(FLAGS) -o $@ \ | |||
main001.o \ | |||
character.o player.o monster.o \ | |||
info.o creation.o \ | |||
betatest.o | |||
main001.o : main001.cpp $(CLASS_DIR)/player.hpp $(INTER_DIR)/creation.hpp $(INTER_DIR)/info.hpp $(SYS_DIR)/betatest.hpp | |||
$(OBJ_CMD) | |||
character.o : $(CLASS_DIR)/character.cpp $(CLASS_DIR)/character.hpp | |||
$(OBJ_CMD) | |||
player.o : $(CLASS_DIR)/player.cpp $(CLASS_DIR)/player.hpp $(CLASS_DIR)/character.hpp | |||
$(OBJ_CMD) | |||
monster.o : $(CLASS_DIR)/monster.cpp $(CLASS_DIR)/monster.hpp $(CLASS_DIR)/character.hpp | |||
$(OBJ_CMD) | |||
creation.o : $(INTER_DIR)/creation.cpp $(INTER_DIR)/creation.hpp $(CLASS_DIR)/player.hpp $(INTER_DIR)/info.hpp | |||
$(OBJ_CMD) | |||
info.o : $(INTER_DIR)/info.cpp $(INTER_DIR)/info.hpp $(CLASS_DIR)/player.hpp $(CLASS_DIR)/character.hpp $(CLASS_DIR)/monster.hpp | |||
$(OBJ_CMD) | |||
betatest.o : $(SYS_DIR)/betatest.cpp $(SYS_DIR)/betatest.hpp | |||
$(OBJ_CMD) | |||
clean : | |||
rm -f *.o |
@ -0,0 +1 @@ | |||
GKSK{4re_Y0u_53ri0usly_checking_f0r_b3t4_t3sT?} |
@ -1,95 +0,0 @@ | |||
#ifndef _2EASY4ME_CHARACTER_H_ | |||
#define _2EASY4ME_CHARACTER_H_ | |||
#include <cstring> | |||
class Character | |||
{ | |||
protected: | |||
char name[16]; | |||
int maxHp; | |||
int hp; | |||
int att; | |||
int def; | |||
public: | |||
Character(char *name) | |||
{ | |||
strncpy(this->name, name, sizeof(this->name)); | |||
this->maxHp = 100; | |||
this->hp = 100; | |||
this->att = 10; | |||
this->def = 5; | |||
} | |||
Character(char *name, int hp, int att, int def) | |||
{ | |||
strncpy(this->name, name, sizeof(this->name)); | |||
this->maxHp = hp; | |||
this->hp = hp; | |||
this->att = att; | |||
this->def = def; | |||
} | |||
bool isDead() | |||
{ | |||
return hp <= 0; | |||
} | |||
bool isAlive() | |||
{ | |||
return hp > 0; | |||
} | |||
bool restoreHP() | |||
{ | |||
this->hp = this->maxHp; | |||
} | |||
int checkHP() | |||
{ | |||
return hp; | |||
} | |||
int getMaxHP() | |||
{ | |||
return maxHp; | |||
} | |||
int getDef() | |||
{ | |||
return def; | |||
} | |||
char *getName() | |||
{ | |||
return name; | |||
} | |||
int getAtt() | |||
{ | |||
return att; | |||
} | |||
int defend(int dmg) | |||
{ | |||
dmg -= def; | |||
if (dmg > 0) | |||
{ | |||
hp -= dmg; | |||
return dmg; | |||
} | |||
else | |||
{ | |||
return 0; | |||
} | |||
} | |||
int attack() | |||
{ | |||
return att; | |||
} | |||
}; | |||
#endif |
@ -1,36 +0,0 @@ | |||
#ifndef _2EASY4ME_MONSTER_H_ | |||
#define _2EASY4ME_MONSTER_H_ | |||
#include "character.hpp" | |||
class Monster : public Character | |||
{ | |||
protected: | |||
int bounty; | |||
public: | |||
Monster(char *name) | |||
: Character(name) | |||
{ | |||
this->bounty = 0; | |||
} | |||
Monster(char *name, int hp, int att, int def) | |||
: Character(name, hp, att, def) | |||
{ | |||
this->bounty = 0; | |||
} | |||
Monster(char *name, int hp, int att, int def, int bounty) | |||
: Character(name, hp, att, def) | |||
{ | |||
this->bounty = bounty; | |||
} | |||
int drop() | |||
{ | |||
return bounty; | |||
} | |||
}; | |||
#endif |
@ -1,88 +0,0 @@ | |||
#ifndef _2EASY4ME_PLAYER_H_ | |||
#define _2EASY4ME_PLAYER_H_ | |||
#include "character.hpp" | |||
#include "string.h" | |||
class Player : public Character | |||
{ | |||
protected: | |||
int xp; | |||
int level; | |||
public: | |||
Player(char *name) | |||
: Character(name) | |||
{ | |||
this->xp = 0; | |||
this->level = 1; | |||
} | |||
Player(char *name, int hp, int att, int def, int level, int xp) | |||
: Character(name, hp, att, def) | |||
{ | |||
this->xp = xp; | |||
this->level = level; | |||
} | |||
int getLevel() | |||
{ | |||
return level; | |||
} | |||
bool checkLevelup() | |||
{ | |||
return xp > (level * level); | |||
} | |||
bool levelUp(int stat) | |||
{ | |||
switch (stat) | |||
{ | |||
case 1: | |||
hp += 10; | |||
break; | |||
case 2: | |||
att += 2; | |||
break; | |||
case 3: | |||
def += 1; | |||
break; | |||
} | |||
xp -= level * level; | |||
} | |||
int generateCode(char *dst) | |||
{ | |||
return sprintf(dst, | |||
"PlayerName:%15s;PlayerHp:%d;PlayerAtt:%d;PlayerDef:%d;PlayerLvl:%d;PlayerExp:%d;", | |||
this->name, this->hp, this->att, this->def, this->level, this->xp); | |||
} | |||
Player *loadCode(char *dst) | |||
{ | |||
char name[16]; | |||
int hp; | |||
int att; | |||
int def; | |||
int lvl; | |||
int exp; | |||
int result = sscanf(dst, | |||
"PlayerName:%15s;PlayerAtt:%d;PlayerDef:%d;PlayerLvl:%d;PlayerExp:%d;", | |||
name, &hp, &att, &def, &lvl, &exp); | |||
if (result == 5) | |||
{ | |||
return new Player(name, hp, att, def, lvl, exp); | |||
} | |||
else | |||
{ | |||
return nullptr; | |||
} | |||
} | |||
}; | |||
#endif |
@ -1,33 +0,0 @@ | |||
#include <iostream> | |||
#include <cstring> | |||
#include <math.h> | |||
#include "cpp-base64/base64.h" | |||
#include "cpp-base64/base64.cpp" | |||
#include "class/monster.hpp" | |||
#include "class/player.hpp" | |||
Player* createNewPlayer() | |||
{ | |||
char name[16]; | |||
printf("Input character name (MAX 15): "); | |||
scanf("%15s", name); | |||
return new Player(name); | |||
} | |||
int main(int argc, char const *argv[]) | |||
{ | |||
char name[16]; | |||
printf("Input name: "); | |||
scanf("%15s", name); | |||
Player *player = new Player(name); | |||
printf("Created new player with name %s at %p\n", name, (void *)player); | |||
return 0; | |||
} |
@ -0,0 +1,58 @@ | |||
#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 @@ | |||
@ -0,0 +1,73 @@ | |||
#include "src/class/character.hpp" | |||
Character::Character(std::string characterName) | |||
{ | |||
name = characterName; | |||
maxHP = 100; | |||
currentHP = 100; | |||
atk = 10; | |||
def = 5; | |||
} | |||
Character::Character(std::string characterName, int characterMaxHP, int characterAtk, int characterDef) | |||
{ | |||
name = characterName; | |||
maxHP = characterMaxHP; | |||
currentHP = maxHP; | |||
atk = characterAtk; | |||
def = characterDef; | |||
} | |||
bool Character::isDead() | |||
{ | |||
return currentHP <= 0; | |||
} | |||
bool Character::isAlive() | |||
{ | |||
return currentHP > 0; | |||
} | |||
std::string Character::getName() | |||
{ | |||
return name; | |||
} | |||
void Character::restoreHP() | |||
{ | |||
currentHP = maxHP; | |||
} | |||
int Character::getCurrentHP() | |||
{ | |||
return currentHP; | |||
} | |||
int Character::getMaxHP() | |||
{ | |||
return maxHP; | |||
} | |||
int Character::getDef() | |||
{ | |||
return def; | |||
} | |||
int Character::getAtk() | |||
{ | |||
return atk; | |||
} | |||
int Character::defend(int dmg) | |||
{ | |||
int cleanDamage = dmg - def; | |||
if (cleanDamage <= 0) | |||
{ | |||
return 0; | |||
} | |||
else | |||
{ | |||
currentHP = currentHP - cleanDamage; | |||
return cleanDamage; | |||
} | |||
} |
@ -0,0 +1,36 @@ | |||
#ifndef HACKTHEGAME_CHARACTER_HPP | |||
#define HACKTHEGAME_CHARACTER_HPP | |||
#include <string> | |||
class Character | |||
{ | |||
protected: | |||
std::string name; | |||
int maxHP; | |||
int currentHP; | |||
int atk; | |||
int def; | |||
public: | |||
Character(std::string characterName); | |||
Character(std::string characterName, int characterMaxHP, int characterAtk, int characterDef); | |||
bool isDead(); | |||
bool isAlive(); | |||
std::string getName(); | |||
void restoreHP(); | |||
int getCurrentHP(); | |||
int getMaxHP(); | |||
int getDef(); | |||
int getAtk(); | |||
int defend(int dmg); | |||
}; | |||
#endif |
@ -0,0 +1,24 @@ | |||
#include "src/class/monster.hpp" | |||
Monster::Monster(std::string monsterName) | |||
: Character(monsterName) | |||
{ | |||
bounty = 0; | |||
} | |||
Monster::Monster(std::string monsterName, int monsterMaxHP, int monsterAtk, int monsterDef) | |||
: Character(monsterName, monsterMaxHP, monsterAtk, monsterDef) | |||
{ | |||
bounty = 0; | |||
} | |||
Monster::Monster(std::string monsterName, int monsterMaxHP, int monsterAtk, int monsterDef, int monsterBounty) | |||
: Character(monsterName, monsterMaxHP, monsterAtk, monsterDef) | |||
{ | |||
bounty = monsterBounty; | |||
} | |||
int Monster::getBounty() | |||
{ | |||
return bounty; | |||
} |
@ -0,0 +1,19 @@ | |||
#ifndef HACKTHEGAME_MONSTER_HPP | |||
#define HACKTHEGAME_MONSTER_HPP | |||
#include "src/class/character.hpp" | |||
class Monster : public Character | |||
{ | |||
protected: | |||
int bounty; | |||
public: | |||
Monster(std::string monsterName); | |||
Monster(std::string monsterName, int monsterMaxHP, int monsterAtk, int monsterDef); | |||
Monster(std::string monsterName, int monsterMaxHP, int monsterAtk, int monsterDef, int monsterBounty); | |||
int getBounty(); | |||
}; | |||
#endif |
@ -0,0 +1,81 @@ | |||
#include "src/class/player.hpp" | |||
#include <string.h> | |||
Player::Player(std::string playerName) | |||
: Character(playerName) | |||
{ | |||
experience = 0; | |||
level = 1; | |||
} | |||
Player::Player(std::string playerName, int playerMaxHP, int playerAtk, int playerDef, int playerLevel, int playerExp) | |||
: Character(playerName, playerMaxHP, playerAtk, playerDef) | |||
{ | |||
experience = playerExp; | |||
level = playerLevel; | |||
} | |||
int Player::getLevel() | |||
{ | |||
return level; | |||
} | |||
int Player::getExp() | |||
{ | |||
return experience; | |||
} | |||
int Player::expToLevelUp() | |||
{ | |||
if (level >= PLAYER_MAX_LEVEL) | |||
{ | |||
return 0; | |||
} | |||
else | |||
{ | |||
return (level * level) - experience; | |||
} | |||
} | |||
bool Player::checkLevelup() | |||
{ | |||
return expToLevelUp() < 0; | |||
} | |||
bool Player::levelUp(int stat) | |||
{ | |||
if (checkLevelup()) | |||
{ | |||
switch (stat) | |||
{ | |||
case 1: | |||
maxHP += 10; | |||
restoreHP(); | |||
break; | |||
case 2: | |||
atk += 2; | |||
break; | |||
case 3: | |||
def += 1; | |||
break; | |||
} | |||
return true; | |||
} | |||
else | |||
{ | |||
return false; | |||
} | |||
} | |||
int Player::takeExperience(int bounty) | |||
{ | |||
experience = experience + bounty; | |||
if (experience > PLAYER_MAX_EXPERIENCE) | |||
{ | |||
experience = PLAYER_MAX_EXPERIENCE; | |||
} | |||
return experience; | |||
} |
@ -0,0 +1,28 @@ | |||
#ifndef HACKTHEGAME_PLAYER_HPP | |||
#define HACKTHEGAME_PLAYER_HPP | |||
#define PLAYER_MAX_LEVEL 1000 | |||
#define PLAYER_MAX_EXPERIENCE 9999999 | |||
#include "src/class/character.hpp" | |||
class Player : public Character | |||
{ | |||
protected: | |||
int experience; | |||
int level; | |||
public: | |||
Player(std::string playerName); | |||
Player(std::string playerName, int playerMaxHP, int playerAtt, int playerDef, int playerLevel, int playerExp); | |||
int getLevel(); | |||
int getExp(); | |||
int expToLevelUp(); | |||
int takeExperience(int drop); | |||
bool checkLevelup(); | |||
bool levelUp(int stat); | |||
}; | |||
#endif |
@ -0,0 +1,11 @@ | |||
#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 |
@ -0,0 +1,43 @@ | |||
#include "src/interface/creation.hpp" | |||
#include "src/interface/info.hpp" | |||
#include <iostream> | |||
Player *createCharacter() | |||
{ | |||
std::string name; | |||
char choice; | |||
Player *newPlayer = new Player("HackTheGame"); | |||
std::cout << "Welcome to character creation !!!" << std::endl; | |||
do | |||
{ | |||
std::cout << "Please enter your character name: (Max 15 letters)\n" | |||
<< "> " << std::flush; | |||
std::cin >> name; | |||
if (name.size() > 15) | |||
{ | |||
std::cout << "Your name is too long!" << std::endl; | |||
continue; | |||
} | |||
std::cout << "Creating your character..." << std::endl; | |||
delete newPlayer; | |||
newPlayer = new Player(name); | |||
std::cout << "Done...\n" | |||
<< "Character Info: " << std::endl; | |||
Info::ofCharacter(newPlayer); | |||
std::cout << "Accept (y/N)?: " << std::flush; | |||
std::cin >> choice; | |||
} while (choice != 'Y' && choice != 'y'); | |||
return newPlayer; | |||
} |
@ -0,0 +1,9 @@ | |||
#ifndef HACKTHEGAME_CHARACTER_CREATION_HPP | |||
#define HACKTHEGAME_CHARACTER_CREATION_HPP | |||
#include "src/class/player.hpp" | |||
#include "src/class/monster.hpp" | |||
Player *createCharacter(); | |||
#endif |
@ -0,0 +1,49 @@ | |||
#include "src/interface/info.hpp" | |||
#include <iostream> | |||
void Info::ofCharacter(Character *character) | |||
{ | |||
std::cout << "Name: " << character->getName() << "\n" | |||
<< " HP : " << character->getCurrentHP() << "/" << character->getMaxHP() << "\n" | |||
<< " Atk: " << character->getAtk() << "\n" | |||
<< " Def: " << character->getDef() << std::endl; | |||
} | |||
void Info::ofPlayer(Player *player) | |||
{ | |||
std::cout << "Name: " << player->getName() << "\n" | |||
<< " Lvl: " << player->getLevel() << "\n" | |||
<< " Experience: " << player->getExp() << "\n" | |||
<< " to LevelUp: " << player->expToLevelUp() << "\n" | |||
<< " HP : " << player->getCurrentHP() << "/" << player->getMaxHP() << "\n" | |||
<< " Atk: " << player->getAtk() << "\n" | |||
<< " Def: " << player->getDef() << std::endl; | |||
} | |||
void Info::ofMonster(Monster *monster) | |||
{ | |||
std::cout << "Name: " << monster->getName() << "\n" | |||
<< " HP : " << monster->getCurrentHP() << "/" << monster->getMaxHP() << "\n" | |||
<< " Atk: " << monster->getAtk() << "\n" | |||
<< " Def: " << monster->getDef() << "\n" | |||
<< " Lvl: " << monster->getBounty() << std::endl; | |||
} | |||
void Info::ofApplication() | |||
{ | |||
std::cout << "=================================\n" | |||
<< "========== HackTheGame ==========\n" | |||
<< "=================================\n" | |||
<< "This stupid app is developed for \n" | |||
<< "CTF @GKSK2019 that was held on \n" | |||
<< "16 Feb 2019 as a playground for \n" | |||
<< "Kelompok Studi Linux Members of \n" | |||
<< "STMIK STIKOM Bali-> \n" | |||
<< "Developed by: \n" | |||
<< " myitinos \n" | |||
<< " \n" | |||
<< "Thanks for Playing !!! \n" | |||
<< "=================================\n" | |||
<< std::endl; | |||
} |
@ -0,0 +1,21 @@ | |||
#ifndef HACKTHEGAME_CHARACTER_INFO_HPP | |||
#define HACKTHEGAME_CHARACTER_INFO_HPP | |||
#include "src/class/character.hpp" | |||
#include "src/class/monster.hpp" | |||
#include "src/class/player.hpp" | |||
class Info | |||
{ | |||
private: | |||
Info(){}; | |||
public: | |||
static void ofCharacter(Character *); | |||
static void ofPlayer(Player *); | |||
static void ofMonster(Monster *); | |||
static void ofApplication(); | |||
}; | |||
#endif |
@ -0,0 +1,29 @@ | |||
#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; | |||
result = tmp.compare("GKSK{" + betaFlag + "}"); | |||
} | |||
} | |||
catch(...) | |||
{ | |||
return false; | |||
} | |||
return result == 0; | |||
} |
@ -0,0 +1,6 @@ | |||
#ifndef HACKTHEGAME_BETATEST_HPP | |||
#define HACKTHEGAME_BETATEST_HPP | |||
bool checkBetaTest(); | |||
#endif |