0
I’m developing an RPG in shifts and I’m having problems. The player and the enemy are the same class of instantiated object and they have methods of attacking and receiving damage. However when I attack both characters has life subtracted.
Class Attributes
class Atributos
{
//ATRIBUTOS DA CLASSE
public int vitalidade;
public int armadura;
public int forca;
public int inteligencia;
public int agilidade;
public int sorte;
//CONSTRUTORES
public Atributos ()
{
this.vitalidade = 0;
this.armadura = 0;
this.forca = 0;
this.inteligencia = 0;
this.agilidade = 0;
this.sorte = 0;
}
//SETTERS
public void setVitalidade (int vitalidade)
{
this.vitalidade = vitalidade;
}
public void setArmadura (int armadura)
{
this.armadura = armadura;
}
public void setForca (int forca)
{
this.forca = forca;
}
public void setInteligencia (int inteligencia)
{
this.inteligencia = inteligencia;
}
public void setAgilidade (int agilidade)
{
this.agilidade = agilidade;
}
public void setSorte (int sorte)
{
this.sorte = sorte;
}
//GETTERS
public int getVitalidade ()
{
return this.vitalidade;
}
public int getArmadura ()
{
return this.armadura;
}
public int getForca ()
{
return this.forca;
}
public int getInteligencia ()
{
return this.inteligencia;
}
public int getAgilidade ()
{
return this.agilidade;
}
public int getSorte ()
{
return this.sorte;
}
}
Class Character
import java.util.Random;
class Personagem extends Atributos
{
//ATRIBUTOS
public static String nome;
public static String classe;
public static int defesa;
public static int critico;
public static int danoMinimo;
public static int danoMaximo;
public static int healthPoints;
public static int manaPoints;
//CONSTRUTOR
public Personagem ()
{
this.nome = "";
this.classe = "Mago";
this.vitalidade = 10;
this.armadura = 10;
this.forca = 10;
this.inteligencia = 10;
this.agilidade = 10;
this.sorte = 10;
this.defesa = 10 + this.armadura;
this.critico = this.sorte / 100;
this.healthPoints = 100;
this.manaPoints = 100;
this.danoMinimo = 10;
this.danoMaximo = 20;
}
//SETTERS
public void setNome (String nome)
{
this.nome = nome;
}
public void setClasse (String classe)
{
this.classe = classe;
}
public void setDefesa (int defesa)
{
this.defesa = defesa;
}
public void setCritico (int critico)
{
this.critico = critico;
}
public void setHealthPoints (int healthPoints)
{
this.healthPoints = healthPoints;
}
public void setManaPoints (int manaPoints)
{
this.manaPoints = manaPoints;
}
public void setDanoMinimo (int danoMinimo)
{
this.danoMinimo = danoMinimo;
}
public void setDanoMaximo (int danoMaximo)
{
this.danoMaximo = danoMaximo;
}
//GETTERS
public String getNome ()
{
return this.nome;
}
public String getClasse ()
{
return this.classe;
}
public int getDefesa ()
{
return this.defesa;
}
public int getCritico ()
{
return this.critico;
}
public int getHealthPoints ()
{
return this.healthPoints;
}
public int getManaPoints ()
{
return this.manaPoints;
}
public int getDanoMinimo ()
{
return this.danoMinimo;
}
public int getDanoMaximo ()
{
return this.danoMaximo;
}
public void Ataque (Personagem inimigo)
{
Random rand = new Random();
int ataque;
ataque = rand.nextInt(this.danoMaximo) + this.danoMinimo;
inimigo.healthPoints = inimigo.healthPoints - (ataque - inimigo.defesa);
}
public void recebeDano (Personagem inimigo ,int ataque)
{
this.healthPoints = ataque - defesa;
}
}
Main Class
import java.util.Scanner;
import java.util.Random;
class Partida
{
static Scanner scanf = new Scanner(System.in);
static Random rand = new Random();
static Personagem jogador = new Personagem();
static Personagem inimigo = new Personagem();
public static void main(String[] args)
{
Introducao();
telaPersonagem();
chamaTurno();
jogadorTurno();
cpuTurno();
vitoria();
}
public static void Introducao ()
{
System.out.println("SEJA BEM-VINDO A ARENA, GUERREIRO! DIGA-NOS SEU NOME: ");
jogador.setNome("LUCAS");
inimigo.setNome("LUCAS");
}
public static void telaPersonagem() // MOSTRA A TELA COM INFORMAÇÕES DOS PERSONAGENS
{
System.out.println("NOME: " + jogador.getNome() + " NOME:" + inimigo.getNome());
System.out.println("HP: " + jogador.getHealthPoints() + " HP: " + inimigo.getHealthPoints());
System.out.println("MP: " + jogador.getManaPoints() + " MP: " + inimigo.getManaPoints());
}
public static void chamaTurno()
{
int jogadorAgi;
int cpuAgi;
do
{
jogadorAgi = rand.nextInt(1) + jogador.getAgilidade();
cpuAgi = rand.nextInt(1) + inimigo.getAgilidade();
if(jogadorAgi > cpuAgi)
{
jogadorTurno();
} else
{
}
} while(jogadorAgi != cpuAgi);
}
public static void jogadorTurno()
{
int acao;
do
{
System.out.println("SEU TURNO");
System.out.println("");
System.out.println("Escolha uma acao");
System.out.println("1 - Atacar");
System.out.println("2 - Atacar forte");
System.out.println("3 - Atacar FORTE MESMO");
acao = scanf.nextInt();
switch(acao)
{
case 1 :
jogador.Ataque(inimigo);
System.out.println("Ataque realizado com sucesso");
telaPersonagem();
chamaTurno();
break;
default :
System.out.println("Digite um comando valido");
}
} while(jogador.healthPoints != 0 || jogador.healthPoints < 0);
}
public static void cpuTurno()
{
int acao;
acao = rand.nextInt(1) + 3;
System.out.println("TURNO INIMIGO");
do
{
switch (acao)
{
case 1:
inimigo.Ataque(jogador);
System.out.println("Você e atacado com sucesso");
chamaTurno();
break;
case 2:
inimigo.Ataque(jogador);
System.out.println("Você e atacado com sucesso");
chamaTurno();
break;
case 3:
inimigo.Ataque(jogador);
System.out.println("Você e atacado com sucesso");
break;
}
} while(inimigo.healthPoints != 0 || inimigo.healthPoints <= 0);
}
public static void vitoria()
{
if(jogador.healthPoints == 0)
{
System.out.println("Voce perdeu!");
}
if(inimigo.healthPoints == 0)
{
System.out.println("Voce venceu!");
}
}
}
Someone knows what I’m doing wrong?
Please present a [mcve] so that it is possible to test the code,
– user28595
Oops! Sorry, I didn’t want to put the whole code in because I thought it was too big, sorry. Here are the three classes of code.
– user103375
Make your methods receive as a parameter both a hero and a villain, put them inside the
main
and remove thestatic
of attributes.– StatelessDev