RPG in turns - Character and enemy receive the same attack

0

I'm developing an RPG in turns and I'm having problems. The player and the enemy are the same class of instanced object and they have the 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; 
    }

}
  

Character Class

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!");
        }
    }

}

Does anyone know what I'm doing wrong?

    
asked by anonymous 09.06.2018 / 00:39

1 answer

4

The problem with your solution is that the attributes of your Character class are static. Static attributes are attributes of the class and not attributes of the objects.

Remove the static that will work.

    
09.06.2018 / 03:26