Simple Text-Combat

Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
no value
Seçkin Üye
Katılım
17 Nis 2020
Mesajlar
576
Çözümler
2
Tepki puanı
42
Ödüller
3
Yaş
24
6 HİZMET YILI
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;
}
 
Onaylı Üye
Katılım
30 Ara 2020
Mesajlar
66
Tepki puanı
8
Ödüller
1
5 HİZMET YILI
I tried to do something similar .. when i first start to learning programming.. but without success :) i think this will be a great exemple :) to learn something new ,Thanks man.
 
Onaylı Üye
Katılım
16 Ocak 2021
Mesajlar
50
Tepki puanı
2
Ödüller
1
Yaş
25
5 HİZMET YILI
I was able to solve my problem with this. Thank you for sharing
 
Seçkin Üye
Katılım
10 May 2020
Mesajlar
325
Çözümler
13
Tepki puanı
37
Ödüller
4
Yaş
29
6 HİZMET YILI
Neat little project. Thanks for sharing
 
Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
Üst