no value
Seçkin Üye
Sharing my simple text-combat in console out of boredom. Use offline compiler
C++:
#include <iostream>
#include <string>
#include <cstdlib>
#include <ctime>
#include <Windows.h>
using namespace std;
struct Warrior
{
int damage;
int currentHealth;
int critical;
} Player = { 12, 350, 25 };
struct Enemy
{
string enemyName;
int damage;
int currentHealth;
int critical;
} Foe = { "ASSASSIN", 16, 400, 45 };
void WarriorInfo(string& name) {
cout << "\n================================\n";
cout << "Name: " << name << endl;
cout << "Damage: " << Player.damage << endl;
cout << "HEALTH: " << Player.currentHealth << endl;
cout << "Critical Chance: " << Player.critical << "%" << endl;
cout << "================================\n";
}
void EnemyInfo() {
cout << "\n================================\n";
cout << "Name: " << Foe.enemyName << endl;
cout << "Damage: " << Foe.damage << endl;
cout << "HEALTH: " << Foe.currentHealth << endl;
cout << "Critical Chance: " << Foe.critical << "%" << endl;
cout << "================================\n";
}
// CALCULATIONS
void EnemyReceiveDamage(int& playerDmg, int& enemyHp, string& skill, int& crit) {
if (skill == "a") { (crit <= Player.critical) ? enemyHp -= (playerDmg * 2) : enemyHp -= playerDmg; }
else if (skill == "b") { (crit <= Player.critical) ? enemyHp -= (playerDmg * 4) : enemyHp -= (playerDmg*2); }
else if (skill == "c") { (crit <= Player.critical) ? enemyHp -= (playerDmg * 6) : enemyHp -= (playerDmg*3); }
}
void PlayerReceiveDamage(int& enemyDmg, int& playerHp, int& crit) {
if (crit <= Foe.critical) { playerHp -= (enemyDmg*2); }
else { playerHp -= enemyDmg; }
}
// USE ONLY FOR UPDATE THE OUTPUT
void EventCombatProgress(string _EventSkill, int getPlayerCrit, int getEnemyCrit, string playerName) {
string *displayBasic = new string("\nUSING BASIC ATTACK ON OPPONENT") ;
string *displaySlash = new string("\nSLASHING YOUR OPPONENT TWICE");
string *displayCut = new string("\nCUTTING YOUR OPPONENT THREE TIMES");
string displayEnemyAttacc = "\n\nThe " + Foe.enemyName + " Thrusts the BLADE in your Chest";
static string getString;
if (_EventSkill == "a") { getString = *displayBasic; }
else if (_EventSkill == "b") { getString = *displaySlash; }
else if (_EventSkill == "c") { getString = *displayCut; }
for (char& c : getString) {
cout << c; Sleep(20);
}
if (getPlayerCrit <= Player.critical) { cout << "\nCRITICAL HIT!"; }
Sleep(950);
if (Foe.currentHealth > 0) {
for (char& e : displayEnemyAttacc) {
cout << e; Sleep(20);
}
if (getEnemyCrit <= Foe.critical) { cout << "\nIt's a CRITICAL Hit!"; }
Sleep(950);
}
Sleep(1000);
system("CLS");
cout << "\n\b---[ " << playerName << " HP: " << Player.currentHealth << flush << endl;
cout << "\n\b---[ " << Foe.enemyName << " HP: " << Foe.currentHealth << flush <<endl;
}
int main() {
int* getPlayerHp = &Player.currentHealth;
int* getPlayerDmg = &Player.damage;
int* getEnemyHp = &Foe.currentHealth;
int* getEnemyDmg = &Foe.damage;
int PlayerCrit;
int EnemyCrit;
int skill_SlashTurn = 0;
int skill_CutTurn = 0;
string getName;
string chooseSkill;
string deathPlayerMsg = "YOU DIED";
cout << "\tBASIC TEXT-COMBAT\n";
Sleep(500);
cout << "Enter your Desired name: ";
getline(cin, getName);
Sleep(560);
WarriorInfo(getName);
Sleep(1500);
EnemyInfo();
Sleep(1500);
while (true) // looping the combat
{
srand((unsigned)time(0)); //Generate random number
PlayerCrit = ((rand() % 100) - 1);
EnemyCrit = ((rand() % 100) - 1);
if (Player.currentHealth <= 0)
{
cout << endl;
for (char& d : deathPlayerMsg)
{
cout << d;
Sleep(500);
}
break;
}
else if (Foe.currentHealth <= 0)
{
cout << "\n\n************** YOU WON **************";
break;
}
else
{
cout << "\nSKILLS: \n" << "a. Basic Attack\n" << "b. Double Slash Skill - " << skill_SlashTurn <<" Turn(s) left\n" << "c. Triple Cut Skill - " << skill_CutTurn << " Turn(s) left\n";
cout << "Choose your ACTION: ";
cin >> chooseSkill;
if (chooseSkill == "a")
{
EnemyReceiveDamage(*getPlayerDmg, *getEnemyHp, chooseSkill, PlayerCrit);
PlayerReceiveDamage(*getEnemyDmg, *getPlayerHp, EnemyCrit);
EventCombatProgress(chooseSkill, PlayerCrit, EnemyCrit, getName);
if (skill_SlashTurn != 0) { skill_SlashTurn--; }
if (skill_CutTurn != 0) { skill_CutTurn--; }
}
else if (chooseSkill == "b")
{
if (skill_SlashTurn == 0)
{
EnemyReceiveDamage(*getPlayerDmg, *getEnemyHp, chooseSkill, PlayerCrit);
PlayerReceiveDamage(*getEnemyDmg, *getPlayerHp, EnemyCrit);
EventCombatProgress(chooseSkill, PlayerCrit, EnemyCrit, getName);
skill_SlashTurn = 2;
if (skill_CutTurn != 0) { skill_CutTurn -= 1; }
}
else if (skill_SlashTurn >= 1)
{
cout << "SKILL: Double Slash is on cooldown\n";
cout << skill_SlashTurn << " Turn(s) LEFT\n";
Sleep(400);
}
}
else if (chooseSkill == "c")
{
if (skill_CutTurn == 0)
{
EnemyReceiveDamage(*getPlayerDmg, *getEnemyHp, chooseSkill, PlayerCrit);
PlayerReceiveDamage(*getEnemyDmg, *getPlayerHp, EnemyCrit);
EventCombatProgress(chooseSkill, PlayerCrit, EnemyCrit, getName);
skill_CutTurn = 4;
if (skill_SlashTurn != 0) { skill_SlashTurn -= 1; }
}
else if (skill_CutTurn >= 1)
{
cout << "SKILL: Triple Cut is on cooldown\n";
cout << skill_CutTurn << " Turn(s) LEFT\n";
Sleep(400);
}
}
}
}
return 0;
}