@ -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 |