Skip to content

Commit

Permalink
Merge pull request #8 from MatheusBonadio/create-menu-and-combat
Browse files Browse the repository at this point in the history
Create menu and combat
  • Loading branch information
MatheusBonadio authored Jun 12, 2024
2 parents dedaf5b + c36c7e9 commit e8a8ee4
Show file tree
Hide file tree
Showing 25 changed files with 492 additions and 111 deletions.
85 changes: 85 additions & 0 deletions Combat.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
#include "Combat.h"
#include <iostream>
#include <iomanip> // for setw

using namespace std;

void Combat::combatTurn(BaseCharacter& player, BaseCharacter& enemy) {
int round = 1; // Para rastrear o número de rodadas



// ****************************************************************************
// ****************************************************************************
// ****************************************************************************
// ****************************************************************************
// ****************************************************************************
// ****************************************************************************
// ****************************************************************************
// ****************************************************************************
// SÓ SETAR A VIDA DO INIMIGO PARA ENTRAR NO LOOP, ELE JÁ ESTAVA ENTRANDO MORTO
enemy.setHealth(100);



//Só para debug
//cout << "After " << enemy.getName() << " attacks: " << endl;
//cout << player.getName() << " Hero is alive?: " << player.isAlive() << endl;
//cout << enemy.getName() << " Enemy is alive?: " << enemy.isAlive() << endl << endl;

cout << "Combat turn initiated between " << player.getName() << " and " << enemy.getName() << endl;

while (player.isAlive() && enemy.isAlive()) {
cout << "\n---- Round " << round << " ----" << endl;

cout << "Pressione Enter para atacar..." << endl;
cin.get(); // Aguardar o usuário pressionar Enter

// Player attacks enemy
cout << player.getName() << " attacks " << enemy.getName() << endl;
player.attack(enemy);
cout << "After attack, " << enemy.getName() << " is alive: " << enemy.isAlive() << endl;

if (enemy.isAlive()) {
// Enemy attacks player
cout << "Pressione Enter para atacar..." << endl;
cin.get(); // Aguardar o usuário pressionar Enter

cout << enemy.getName() << " attacks " << player.getName() << endl;
enemy.attack(player);
cout << "After attack, " << player.getName() << " is alive: " << player.isAlive() << endl;
}

// Exibir status após cada rodada de ataques
cout << "\n---- Status Apos Rodada de Ataques ----" << endl;
player.displayStatus();
enemy.displayStatus();

round++;
}


//Só para debug
// cout << "After " << enemy.getName() << " attacks: " << endl;
// cout << player.getName() << " Hero is alive?: " << player.isAlive() << endl;
// cout << enemy.getName() << " Enemy is alive?: " << enemy.isAlive() << endl;



cout << "\n=============================================\n";
cout << " RESULTADO \n";
cout << "=============================================\n";

if (player.isAlive()) {
cout << setw(20) << player.getName() << " venceu o combate!\n";
}
else if (enemy.isAlive()) {
cout << setw(20) << enemy.getName() << " venceu o combate!\n";
}
else {
cout << setw(20) << "Ambos os personagens morreram. Empate!\n";
}

cout << "=============================================\n";

}
12 changes: 12 additions & 0 deletions Combat.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@

#ifndef COMBAT_H
#define COMBAT_H

#include "../una-rpg-cpp/src/Character/BaseCharacter.h"

class Combat {
public:
static void combatTurn(BaseCharacter& player, BaseCharacter& enemy);
};

#endif
8 changes: 5 additions & 3 deletions src/Character/BaseCharacter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,13 @@
using namespace std;

void BaseCharacter::displayStatus() {
cout << "Name: " << characterName << "\nHealth: " << health << "\nStrength: " << strength << "\nDefence: " << defence << "\nDexterity: " << dexterity <<endl;
cout << "\nName: " << characterName << "\nHealth: " << health << "\nStrength: " << strength << "\nDefence: " << defence <<endl;
}

void BaseCharacter::damageTaken(int damage) {
int damageTakenAmount = max(damage - defence, 0);
health = health - damageTakenAmount;
//int damageTakenAmount = max(damage, 1);
health = health - damage;
if (health < 0) health = 0;
}


31 changes: 25 additions & 6 deletions src/Character/BaseCharacter.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,30 +14,49 @@ class BaseCharacter
int health;
int strength;
int defence;
int dexterity;

public:
// Constructor with initialization list
BaseCharacter(const string &name, int health = 0, int strength = 0, int defence = 0, int dexterity = 0)
: characterName(name), health(min(health, 100)), strength(min(strength, 100)), defence(min(defence, 100)), dexterity(min(dexterity, 100)) {}
BaseCharacter(const string &name, int applyHealth = 100, int health = 0, int strength = 0, int defence = 0)
: characterName(name), health(min(health, 100)), strength(min(strength, 100)), defence(min(defence, 100)){}

string getName() const { return characterName; }
int getHealth() const { return health; }
int getStrength() const { return strength; }
int getDefence() const { return defence; }
int getDexterity() const { return dexterity; }


void setHealth(int newHealth) { health = min(newHealth, 100); }
void setStrength(int newStrength) { strength = min(newStrength, 100); }
void setDefence(int newDefence) { defence = min(newDefence, 100); }
void setDexterity(int newDexterity) { defence = min(newDexterity, 100); }


virtual void displayStatus();
virtual void applyBonus() = 0;
virtual ~BaseCharacter() = default;


// function to calculate the damage
void damageTaken(int damage);
int damageTaken(int damage) const { return defence; }

// check if the character is alive or not
bool isAlive() const { return health > 0; }

////attack function
virtual void attack(BaseCharacter& target) {
int damage = strength - target.getDefence();
if (damage < 1) damage = 1;
cout << damage;
int vida = target.getHealth();
target.damageTaken(damage);
cout << endl <<characterName << " attacked " << target.getName() << " causing " << damage << " damage." << endl;
}

void takeDamage(int damage) {
health -= damage;
if (health < 0) health = 0;
}

};

#endif
11 changes: 11 additions & 0 deletions src/Character/Enemy/Enemy.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,15 @@ using namespace std;
void Enemy::displayStatus() {
BaseCharacter::displayStatus();
cout << "Class: Enemy" << "\nGold Drop: " << goldDrop << "\nExp Drop: " << expDrop << endl;



}

/*
void Enemy::applyHealt()
{
int newHealth = getHealth() + 5;
setHealth(newHealth);
}
*/
1 change: 1 addition & 0 deletions src/Character/Enemy/Enemy.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ class Enemy : public BaseCharacter
int getExpDrop() const {return expDrop;}

void displayStatus () override;
//void applyHealt();
};


Expand Down
4 changes: 2 additions & 2 deletions src/Character/Hero/Class/Archer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@ void Archer::applyBonus() {
int newDefence = getDefence() + 5;
int newHealth = getHealth() + 5;
int newStrength = getStrength() + 3;
int newDexterity = getDexterity() + 10;

setDefence(newDefence);
setHealth(newHealth);
setStrength(newStrength);
setDexterity(newDexterity);

}
4 changes: 2 additions & 2 deletions src/Character/Hero/Class/Archer.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ class Archer : public Hero

public:
//IMPORTANT: DECIDE ALL THE BASE STATS FOR EACH CLASS
Archer(const string& name, int health = 0, int strength = 0, int defence = 0, int dexterity = 0)
: Hero(name, health, strength, defence, dexterity) {}
Archer(const string& name, int health = 0, int strength = 0, int defence = 0)
: Hero(name, health, strength, defence) {}

void applyBonus() override;
};
Expand Down
3 changes: 1 addition & 2 deletions src/Character/Hero/Class/Mage.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,8 @@ void Mage::applyBonus() {
int newDefence = getDefence() + 5;
int newHealth = getHealth() + 5;
int newStrength = getStrength() + 0;
int newDexterity = getDexterity() + 0;

setDefence(newDefence);
setHealth(newHealth);
setStrength(newStrength);
setDexterity(newDexterity);
}
4 changes: 2 additions & 2 deletions src/Character/Hero/Class/Mage.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ class Mage : public Hero

public:
//IMPORTANT: DECIDE ALL THE BASE STATS FOR EACH CLASS
Mage(const string& name, int health = 0, int strength = 0, int defence = 0, int dexterity = 0)
: Hero(name, health, strength, defence, dexterity) {}
Mage(const string& name, int health = 0, int strength = 0, int defence = 0)
: Hero(name, health, strength, defence) {}

void applyBonus() override;
};
Expand Down
4 changes: 2 additions & 2 deletions src/Character/Hero/Class/Tank.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@ void Tank::applyBonus()
int newDefence = getDefence() + 10;
int newHealth = getHealth() + 10;
int newStrength = getStrength() + 5;
int newDexterity = getDexterity() + 0;

setDefence(newDefence);
setHealth(newHealth);
setStrength(newStrength);
setDexterity(newDexterity);

}
4 changes: 2 additions & 2 deletions src/Character/Hero/Class/Tank.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ class Tank : public Hero

public:
//IMPORTANT: DECIDE ALL THE BASE STATS FOR EACH CLASS
Tank(const string& name, int health = 0, int strength = 0, int defence = 0, int dexterity = 0)
: Hero(name, health, strength, defence, dexterity) {}
Tank(const string& name, int health = 0, int strength = 0, int defence = 0)
: Hero(name, health, strength, defence) {}

void applyBonus() override;
};
Expand Down
4 changes: 2 additions & 2 deletions src/Character/Hero/Class/Warrior.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@ void Warrior::applyBonus()
int newDefence = getDefence() + 3;
int newHealth = getHealth() + 7;
int newStrength = getStrength() + 10;
int newDexterity = getDexterity() + 0;

setDefence(newDefence);
setHealth(newHealth);
setStrength(newStrength);
setDexterity(newDexterity);

}
4 changes: 2 additions & 2 deletions src/Character/Hero/Class/Warrior.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ class Warrior : public Hero

public:
//IMPORTANT: DECIDE ALL THE BASE STATS FOR EACH CLASS
Warrior(const string& name, int health = 0, int strength = 0, int defence = 0, int dexterity = 0)
: Hero(name, health, strength, defence, dexterity) {}
Warrior(const string& name, int health = 0, int strength = 0, int defence = 0)
: Hero(name, health, strength, defence) {}

void applyBonus() override;
};
Expand Down
3 changes: 1 addition & 2 deletions src/Character/Hero/Hero.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -32,9 +32,8 @@ void Hero::applyBonus() {
int newDefence = getDefence() + 5;
int newHealth = getHealth() + 5;
int newStrength = getStrength() + 5;
int newDexterity = getDexterity() + 5;

setDefence(newDefence);
setHealth(newHealth);
setStrength(newStrength);
setDexterity(newDexterity);
}
4 changes: 2 additions & 2 deletions src/Character/Hero/Hero.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@ class Hero : public BaseCharacter
int experience;

public:
Hero(const string& name, int health = 0, int strength = 0, int defence = 0, int dexterity = 0)
: BaseCharacter(name, health, strength, defence, dexterity), gold(0), experience(0) {}
Hero(const string& name, int health = 0, int strength = 0, int defence = 0)
: BaseCharacter(name, health, strength, defence), gold(0), experience(0) {}
//Future we can add a new status "agility", this stat provide a bonus of attribute dodge


Expand Down
Loading

0 comments on commit e8a8ee4

Please sign in to comment.