Duvida nso array do game

Galera fiz esse joguinho no console, mas queria que exibisse apenas as opções de magia q o personagem possui, o código funcionou mas errado podem me ajudar.

Você escolheu Guerreiro e Arqueiro para o combate!
Escolha a ação para Guerreiro:

  1. Atacar
  2. Usar Magia de Cura
  3. Usar Magia de Fogo
  4. Usar Magia de Galo
public class JogoRPG {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
  
        Personagem[] personagens = new Personagem[3];
        personagens[0] = new Personagem("Guerreiro", 100, 20);
        personagens[1] = new Personagem("Mago", 80, 30);
        personagens[2] = new Personagem("Arqueiro", 90, 25);
        
        Magia magiaFogo = new Magia("Magia de Fogo",30);
        Magia magiaGelo = new Magia("Magia de Galo",25);
        Magia magiaCura = new Magia("Magia de Cura",0);
        
     
        personagens[0].adcionarMagia(magiaCura);
     
        
        personagens[1].adcionarMagia(magiaFogo);
        personagens[1].adcionarMagia(magiaGelo);
        personagens[1].adcionarMagia(magiaCura);
        
        personagens[2].adcionarMagia(magiaFogo);
        personagens[2].adcionarMagia(magiaGelo);
      
        

        System.out.println("Bem-vindo ao jogo de RPG!");
        System.out.println("Escolha 2 personagens para o combate:");

        for (int i = 0; i < 3; i++) {
            System.out.println((i + 1) + ". " + personagens[i].nome);
        }

        int escolha1 = scanner.nextInt() - 1;
        int escolha2 = -1;

        do {
            escolha2 = scanner.nextInt() - 1;
            if (escolha2 == escolha1) {
                System.out.println("Escolha dois personagens diferentes!");
            }
        } while (escolha2 == escolha1);

        Personagem jogador1 = personagens[escolha1];
        Personagem jogador2 = personagens[escolha2];

        System.out.println("Você escolheu " + jogador1.nome + " e " + jogador2.nome + " para o combate!");

        while (jogador1.vida > 0 && jogador2.vida > 0) {
            System.out.println("Escolha a ação para " + jogador1.nome + ":");
            System.out.println("1. Atacar");
            
            //
            ArrayList<Magia> magiasJogador1=jogador1.getMagias();
            for(int i=0;i<magiasJogador1.size();i++) {
            	System.out.println((i+2)+". Usar "+ magiasJogador1.get(i).nome);
            	
            }
            
            ArrayList<Magia> magiasJogador2=jogador2.getMagias();
            for(int i=0;i<magiasJogador2.size();i++) {
            	System.out.println((i+2)+". Usar "+ magiasJogador2.get(i).nome);
            	
            }
            //
            
         //   System.out.println("2. Usar Magia de Fogo");
         //   System.out.println("3. Usar Magia de Gelo");
         //   System.out.println("4. Usar Magia de Cura");

            int acaoJogador1 = scanner.nextInt();
            int acaoJogador2 = scanner.nextInt();

            //
            if(acaoJogador1==1) {
            	jogador1.atacar(jogador2);
            }
            else if(acaoJogador1>=2 && acaoJogador1<=magiasJogador1.size()+1) {
            	jogador1.usarMagia(jogador2, acaoJogador1-2); // subitrai 2 para mapear para o indice correto da magia!
            	
            }
          
            if(acaoJogador2==1) {
            	jogador2.atacar(jogador1);
            }
            else if(acaoJogador2>=2 && acaoJogador2<=magiasJogador2.size()+1) {
            	jogador2.usarMagia(jogador1, acaoJogador2-2); // subitrai 2 para mapear para o indice correto da magia!
            	
            }
            
            //
          
            if (acaoJogador1 == 1) {
                jogador1.atacar(jogador2);
            } else if (acaoJogador1 == 2) {
                jogador1.usarMagia(jogador2, 0);
            } else if (acaoJogador1 == 3) {
                jogador1.usarMagia(jogador2, 1);
            } else if (acaoJogador1 == 4) {
                jogador1.usarMagia(jogador1, 2);
            }

            System.out.println("Escolha a ação para " + jogador2.nome + ":");
            System.out.println("1. Atacar");
            System.out.println("2. Usar Magia de Fogo");
            System.out.println("3. Usar Magia de Gelo");
            System.out.println("4. Usar Magia de Cura");

            if (acaoJogador2 == 1) {
                jogador2.atacar(jogador1);
            } else if (acaoJogador2 == 2) {
                jogador2.usarMagia(jogador1, 0);
            } else if (acaoJogador2 == 3) {
                jogador2.usarMagia(jogador1, 1);
            } else if (acaoJogador2 == 4) {
                jogador2.usarMagia(jogador2, 2);
            }

            System.out.println(jogador1.nome + ": Vida = " + jogador1.vida);
            System.out.println(jogador2.nome + ": Vida = " + jogador2.vida);
        }

        if (jogador1.vida <= 0) {
            System.out.println(jogador1.nome + " foi derrotado! " + jogador2.nome + " é o vencedor!");
        } else {
            System.out.println(jogador2.nome + " foi derrotado! " + jogador1.nome + " é o vencedor!");
        }

        scanner.close();
    }
}
///////////////////////////////

public class Personagem {

    String nome;
    int vida;
    int ataque;
    
    ArrayList <Magia> magias;

    public Personagem(String nome, int vida, int ataque) {
        this.nome = nome;
        this.vida = vida;
        this.ataque = ataque;
        
        this.magias=new ArrayList<>();
    }

    public void atacar(Personagem alvo) {
        int dano = new Random().nextInt(ataque);
        System.out.println(nome + " ataca " + alvo.nome + " causando " + dano + " de dano!");
        alvo.vida -= dano;
    }
    
    
    public void adcionarMagia(Magia magia) {
    	
    	magias.add(magia);
    	
    }

    public ArrayList<Magia>getMagias(){
    	
    	return magias;
    	
    	
    }
   
    public void usarMagia(Personagem alvo, int indiceMagia) {
        
        if (indiceMagia<0 || indiceMagia>= magias.size()) {
        	
        	System.out.println("magia invalida!");
        	return;
        	
        }
        
        Magia magia= magias.get(indiceMagia);
        int dano=new Random().nextInt(magia.poder);
        System.out.println(nome+" usou "+magia.nome+" e causou "+dano+" de dano a "+alvo.nome+"!");
       alvo.vida-=dano;
    }
}

//////////////////////////////

public class Magia {

	
	String nome;
	int poder;
	
	
	public Magia(String nome, int poder) {
		
		this.nome= nome;
		this.poder = poder;
		
	}
	
}

Sabe essa parte aqui?

ArrayList<Magia> magiasJogador1 = jogador1.getMagias();
for (int i = 0; i < magiasJogador1.size(); i++) {
  System.out.println((i + 2) + ". Usar " + magiasJogador1.get(i).nome);
}

ArrayList<Magia> magiasJogador2 = jogador2.getMagias();
for (int i = 0; i < magiasJogador2.size(); i++) {
  System.out.println((i + 2) + ". Usar " + magiasJogador2.get(i).nome);
}

int acaoJogador1 = scanner.nextInt();
int acaoJogador2 = scanner.nextInt();

Acho que deveria ser assim:

ArrayList<Magia> magiasJogador1 = jogador1.getMagias();
for (int i = 0; i < magiasJogador1.size(); i++) {
  System.out.println((i + 2) + ". Usar " + magiasJogador1.get(i).nome);
}

System.out.print("> ");
int acaoJogador1 = scanner.nextInt();

ArrayList<Magia> magiasJogador2 = jogador2.getMagias();
for (int i = 0; i < magiasJogador2.size(); i++) {
  System.out.println((i + 2) + ". Usar " + magiasJogador2.get(i).nome);
}

System.out.print("> ");
int acaoJogador2 = scanner.nextInt();

Porque assim vc pede primeiro a magia do personagem 1 de só depois apresenta e pede a magia do personagem 2.

1 curtida

AAAAA COMO EU AMO esse grupo!^^ achei que tinha haver com isso mesmo tentei por em cima mas deu erro mas foi isso mesmo funcionou. Brigadao.

1 curtida