Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <ctime>
- #include<cstdlib>
- using namespace std;
- class Personagem {
- protected:
- string nome;
- int vida;
- int atk;
- int def;
- int level;
- string Classe;
- public:
- Personagem(string n, int v, int a, int d) {
- nome = n;
- vida = v;
- atk = a;
- def = d;
- level = 1;
- }
- string getNome() {
- return nome;
- }
- int getVida() {
- return vida;
- }
- int getAtk() {
- return atk;
- }
- int getDef() {
- return def;
- }
- int getLevel() {
- return level;
- }
- void setNome(string novoNome) {
- nome = novoNome;
- }
- void setVida(int novoVida) {
- vida = novoVida;
- }
- void setAtk(int novoAtk) {
- atk = novoAtk;
- }
- void setDef(int novoDef) {
- def = novoDef;
- }
- void setLevel(int novoLevel) {
- level = novoLevel;
- }
- bool estaVivo() {
- return (vida > 0);
- }
- void descricao() {
- cout << "******" << endl;
- cout << "Nome: " << nome << endl;
- cout << "Level: " << level << endl;
- cout << "Vida: " << vida << endl;
- cout << "Atk: " << atk << endl;
- cout << "Def: " << def << endl;
- cout << "******" << endl;
- }
- virtual void atacar(Personagem* alvo) = 0;
- virtual void receberAtaque(int dano) = 0;
- };
- class Heroi : public Personagem {
- protected:
- //Equipamentos
- public:
- Heroi(string n, int v, int a, int d) : Personagem(n, v, a, d) {
- }
- void atacar(Personagem* alvo) {
- int dano = atk;
- alvo->receberAtaque(dano);
- }
- void receberAtaque(int dano) {
- int danoFinal = dano - def;
- vida = vida - danoFinal;
- }
- };
- class Inimigo : public Personagem {
- protected:
- //Experiencia fornecida ao ser derrotado
- //Itens derrubados ao ser derrotado
- public:
- Inimigo(string n, int v, int a, int d) : Personagem(n, v, a, d) {
- }
- void atacar(Personagem* alvo) {
- alvo->receberAtaque(getAtk());
- }
- void receberAtaque(int dano) {
- setVida(getVida() - dano);
- }
- };
- //CLASSE DOS PERSONAGENS
- class Cavaleiro : public Heroi {
- public:
- Cavaleiro(string n, int v, int a, int d) : Heroi(n, v, a, d) {
- Classe = "cavaleiro";
- }
- void atacar(Heroi* alvo) {
- int dano = atk;
- alvo->receberAtaque(dano);
- }
- virtual void receberAtaque(int dano) {
- int danoFinal = dano * 0.8;
- setVida(getVida() - danoFinal);
- }
- };
- class Arqueiro : public Heroi {
- public:
- int cont;
- Arqueiro(string n, int v, int a, int d) : Heroi(n, v, a, d) {
- cont = 0;
- }
- int getCont(){
- return cont;
- }
- void setCont (int novoCont){
- cont = novoCont;
- }
- void atacar(Heroi* alvo) {
- setCont(getCont() + 1);
- int dano = atk;
- if (getCont() % 2 == 0){
- dano += atk * 0,5;
- }
- alvo->receberAtaque(dano);
- }
- };
- class Barbaro : public Heroi {
- public:
- int porcentagem;
- Barbaro(string n, int v, int a, int d) : Heroi(n, v, a, d) {
- int p;
- porcentagem = p;
- }
- int getPorcentagem(){
- return porcentagem;
- }
- void setPorcentagem(int novoPorcentagem){
- porcentagem = novoPorcentagem;
- }
- void atacar(Heroi* alvo) {
- srand(time(NULL)*1000);
- int p = (rand() % 50) + 80;
- int dano = (atk*p)/100;
- alvo->receberAtaque(dano);
- }
- };
- class Assassino : public Heroi {
- public:
- int atkCritico;
- Assassino(string n, int v, int a, int d, int atkC) : Heroi(n, v, a, d) {
- atkCritico = atkC;
- }
- int getAtkCritico(){
- return atkCritico;
- }
- void setAtkCritico(int atkC){
- atkCritico = atkC;
- }
- virtual void atacar(Heroi* alvo) {
- srand(time(0)*1000);
- int danoFinal = (rand() % 100 + 1) <= getAtkCritico() ? getAtk()*2 : getAtk();
- alvo->receberAtaque(danoFinal);
- }
- };
- class Boss : public Inimigo{
- public:
- Boss(string n, int v, int a, int d): Inimigo(n, v, a, d) {
- }
- void atacar(Personagem* alvo) {
- int dano;
- if (vida <= 30) {
- dano = atk*2.2;
- } else {
- dano = atk*2;
- }
- alvo->receberAtaque(dano);
- }
- void receberAtaque(int dano) {
- int danoFinal = dano*0.2 - def;
- vida = vida - danoFinal;
- }
- };
- Heroi* Escolha(){
- string nome;
- int atk;
- int def;
- string classe;
- int escolha;
- cout << "Escolha o nome do seu personagem" << endl;
- cin >> nome;
- cout << " Inicialmente voce tem 20 pontos de atributo. Distribua-os entre a defesa e o ataque do seu personagem." << endl;
- cout << "Ataque: ";
- cin >> atk;
- cout << "Defesa: ";
- cin >> def;
- while (def + atk != 20){
- cout << "ERROR. Redistribua-os entre a defesa e o ataque do seu personagem." << endl;
- cout << "Ataque: ";
- cin >> atk;
- cout << "Defesa: ";
- cin >> def;
- }
- cout << "Vamos escolher a classe do seu heroi" << endl;
- cout << "1. Cavaleiro " << endl;
- cout << "2. Assassino " << endl;
- cout << "3. Arqueiro " << endl;
- cout << "4. Barbaro " << endl;
- cout << endl;
- cin >> escolha;
- Heroi* heroi;
- if(escolha == 1){
- heroi = new Cavaleiro(nome, 100, atk, def);
- cout << "Voce agora eh um cavaleiro!";
- }
- if(escolha == 2){
- heroi = new Assassino(nome, 100, atk, def, 10);
- cout << "Voce agora eh um assassino!";
- }
- if(escolha == 3){
- heroi = new Arqueiro(nome, 100, atk, def);
- cout << "Voce agora eh um arqueiro!";
- }
- if(escolha == 4){
- heroi = new Barbaro(nome, 100, atk, def);
- cout << "Voce agora eh um barbaro!";
- }
- cout << endl;
- cout << "Aqui estao seus atributos iniciais:" << endl << endl;
- heroi->descricao();
- return heroi;
- }
- int main(){
- Inimigo* vilao = new Inimigo("Buchada", 120, 14, 4);
- Heroi* heroi = Escolha(); // Dados do seu personagem
- cout << "Neste turno, voce vai batalhar com: " << endl;
- vilao->descricao();
- while (heroi->estaVivo() && vilao->estaVivo()) {
- heroi->atacar(vilao);
- vilao->atacar(heroi);
- heroi->descricao();
- vilao->descricao();
- }
- if (heroi->estaVivo()) {
- cout << "Heroi deu um pau no vilao. #elenao" << endl;
- }
- if (vilao->estaVivo()) {
- cout << "Heroi perdeu." << endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment