Turn RPG - Character and enemy receive the same attack

Asked

Viewed 109 times

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?

  • 2

    Please present a [mcve] so that it is possible to test the code,

  • 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.

  • 1

    Make your methods receive as a parameter both a hero and a villain, put them inside the main and remove the static of attributes.

1 answer

4


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

Remove the working Static.

  • Thank you very much!

Browser other questions tagged

You are not signed in. Login or sign up in order to post.