Ajuda com POO em JAVA

3 respostas Resolvido
metodosjavaprogramação
A

Olá pessoal, primeiramente eu gostaria de me desculpar pelo título, eu não consegui pensar em nada melhor.
Bom, eu gostaria de tirar uma dúvida em relação a POO, eu venho trabalhando em um pequeno projetinho de jogo de texto, e atualmente o jogo contem 3 Classes, a classe principal, classe player e a classe inventario. Eu estou enfrentado uma dificuldade que é quando o jogador consome um item, este item não é aplicado diretamente na classe player como deveria ser. O código a seguir explica melhor o que eu quero dizer.

public class Principal {
	
	Inventario inv = new Inventario();
	Player player = new Player();
	
	public static void main(String args[]) {
		
		new Principal().principal();

	}
	
	public void principal() {

		//... Faz leitura da escolha do jogador
		//Caso ele queira entrar no inventario
		
		inv.inventario();
		
		//... Faz leitura da escolha do jogador
		//Caso ele queira ver sua vida
		
		System.out.println("Sua vida é " + this.player.getVida());
		
	}
}

public class Inventario{
	
	Player player = new Player();
	
	//Quantidade de poções que o Jogador possui
	private int qntPocao = 2;

	//Quantidade de vida que cada poção recupera
	private int hpRegenPocao = 30;

	//Metodo onde mostra todas as opções do inventario
	public void inventario() {		//Não é o construtor
		
		//... Faz leitura da escolha do jogador
		this.usarPocaoHp();
	}
	
	//Utiliza o item poção de vida
	private void usarPocaoHp(){
		
		//Verifica se o jogador possui poções de vida
		if(this.qntPocao > 0)
			this.player.updateVida(hpRegenPocao);
		else
			System.out.println("Você não possui poções de vida!");
		
	}
}

public class Player{
	
	private int vida= 10;
	
	//Atualiza a vida do jogador
	public void updateVida(int vidaRecuperada){
		this.vida += vidaRecuperada;
	}
	
	//Retorna a vida do jogador
	public int getVida(){
		return vida;
	}
}

O pior é que eu entendo exatamente onde está o erro, eu não estou atualizando a vida na “mesma” classe player que se refere a classe principal. O que eu queria era que eu pudesse atualizar a vida do player na classe inventário, e esse valor fosse salvo na classe principal. Não sei se ficou muito claro o que eu quis dizer, mas desde já agradeço pela atenção.

3 Respostas

Jelson1
Solucao aceita

Você instanciou a classe player aqui:

public class Principal {
Inventario inv = new Inventario();
Player player = new Player();

Você intanciou novamente a classe player aqui:

public class Inventario{
  Player player = new Player();

Tente criar um construtor para classe inventário que receba o objeto player:

Públic class inventario{
  private Player player;

  public inventario(Player player){
    this.player = player;
}

Na hora de criar o inventario na classe principal faz:
new Inventario(player)

A

Caraca mano!
Funcionou mesmo, valeu de coração em mano. Tmj <3

Jelson1

De nada!:+1:

Criado 24 de fevereiro de 2020
Ultima resposta 24 de fev. de 2020
Respostas 3
Participantes 2