Duvida nso array do game

2 respostas Resolvido
java
D

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;
		
	}
	
}

2 Respostas

wldomiciano
Solucao aceita

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.

D

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.

Criado 30 de setembro de 2023
Ultima resposta 30 de set. de 2023
Respostas 2
Participantes 2