elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


  Mostrar Mensajes
Páginas: [1]
1  Programación / Java / Re: Ayuda en: 31 Enero 2023, 20:27 pm
El problema es que tengo esta clase, que contiene el método principal:

Código:
public class Batalla2 {

//Mas contadores para sincronizar las tiradas con los metodos de ataque.
int nb=0;
int nh=0;
    //Metodo que contiene la batalla por turnos. Use NullPointerException por si
//algun personaje moria, y varios if-else como apoyo adicional.
public void batalla(Heroe heroe1, Heroe heroe2, Heroe heroe3, Heroe heroe4, Heroe heroe5, Bestia bestia1,
Bestia bestia2, Bestia bestia3, Bestia bestia4, Heroe[] ejercitoHeroes, Bestia[] ejercitoBestias) {
//Use un for con limite 100 para los turnos.
for(int t=1; t<100;)  {

System.out.println("Turno "+t);
t++;
System.out.println("");
for(int h=0;h<ejercitoHeroes.length;) {
for(int b=0;b<ejercitoBestias.length;)  {
try  {
System.out.println("Lucha entre " + ejercitoHeroes[h].getNombre() + " (Vida=" + ejercitoHeroes[h].getPuntosVida() + " Armadura="+ejercitoHeroes[h].getArmadura() + ") y " + ejercitoBestias[b].getNombre() + " (Vida=" + ejercitoBestias[b].getPuntosVida()+" Armadura=" + ejercitoBestias[b].getArmadura() + ")");
System.out.println(ejercitoHeroes[h].getNombre() + " saca " + ejercitoHeroes[h].numeros[nh] + " y le quita "+ ejercitoHeroes[h].ataque(ejercitoHeroes, ejercitoBestias) + " de vida a " + ejercitoBestias[b].getNombre());
System.out.println(ejercitoBestias[b].getNombre() + " saca " + ejercitoBestias[b].numeros[nb] + " y le quita "+ ejercitoBestias[b].ataque(ejercitoBestias, ejercitoHeroes) + " de vida a " + ejercitoHeroes[h].getNombre());

if (ejercitoHeroes[h].getPuntosVida()<=0)  {
System.out.println(ejercitoHeroes[h].getNombre()+" ha muerto.");
ejercitoHeroes[h]=null;
}
if (ejercitoBestias[b].getPuntosVida()<=0)  {
System.out.println(ejercitoBestias[b].getNombre()+" ha muerto.");
ejercitoBestias[b]=null;
}
System.out.println("");

}catch(NullPointerException e)  {
if(ejercitoBestias[b]==null)  {

}
if(ejercitoHeroes[h]==null)  {
ejercitoHeroes[0]=ejercitoHeroes[1];
ejercitoHeroes[1]=ejercitoHeroes[2];
ejercitoHeroes[2]=ejercitoHeroes[3];
ejercitoHeroes[3]=heroe5;

break;
}






}


h++;
b++;







}
}
nh++;
nb++;

Y este fragmento de código:

Código:
if(ejercitoHeroes[h]==null)  {
ejercitoHeroes[0]=ejercitoHeroes[1];
ejercitoHeroes[1]=ejercitoHeroes[2];
ejercitoHeroes[2]=ejercitoHeroes[3];
ejercitoHeroes[3]=heroe5;

Hace que me roten los nombres, los métodos de ataque me siguen apuntando a la misma bestia, y no sé como conseguir que se actualicen.
2  Programación / Java / Re: Ayuda en: 31 Enero 2023, 19:32 pm
A ver, intentaré ejemplificar lo que tengo lo mejor que pueda:

Código:
public abstract class Heroe extends Personaje {



// Constructor heredado.
public Heroe(String nombre, int puntosVida, int armadura) {
super(nombre, puntosVida, armadura);
}

//Metodo sobreescrito.
  @Override
public int tirarDado() {
    int tirada;
int tirada1 = (int) Math.floor(Math.random() * 101);
int tirada2 = (int) Math.floor(Math.random() * 101);

if (tirada1 > tirada2) {
tirada = tirada1;
} else {
tirada = tirada2;
}
return tirada;
}
   
  //Array usado para guardar las tiradas y sincronizarlas con los metodos de ataque.
  public int[] numeros=new int[] {tirarDado(), tirarDado(), tirarDado(), tirarDado(),
    tirarDado(), tirarDado(), tirarDado(), tirarDado(), tirarDado(),
    tirarDado(), tirarDado(), tirarDado(), tirarDado(), tirarDado(),
    tirarDado(), tirarDado(), tirarDado(), tirarDado(), tirarDado(),
    tirarDado(), tirarDado(), tirarDado(), tirarDado(), tirarDado(),
    tirarDado(), tirarDado(), tirarDado(), tirarDado(), tirarDado(),
    tirarDado(), tirarDado(), tirarDado(), tirarDado(), tirarDado(),
    tirarDado(), tirarDado(), tirarDado(), tirarDado(), tirarDado(),
    tirarDado(), tirarDado(), tirarDado(), tirarDado(), tirarDado(),
    tirarDado(), tirarDado(), tirarDado(), tirarDado(), tirarDado(),
    tirarDado(), tirarDado(), tirarDado(), tirarDado(), tirarDado(),
    tirarDado(), tirarDado(), tirarDado(), tirarDado(), tirarDado(),
    tirarDado(), tirarDado(), tirarDado(), tirarDado(), tirarDado(),
    tirarDado(), tirarDado(), tirarDado(), tirarDado(), tirarDado(),
    tirarDado(), tirarDado(), tirarDado(), tirarDado(), tirarDado(),
    tirarDado(), tirarDado(), tirarDado(), tirarDado(), tirarDado(),
    tirarDado(), tirarDado(), tirarDado(), tirarDado(), tirarDado()};

   //Metodos abstractos que heredaran las clases hijas.
public abstract int ataque(Heroe[] ejercitoHeroes, Bestia[] ejercitoBestias);

}

Primero tengo el constructor que uso para crear los personajes, luego está el método que marca lo que saca un heroe. Luego guardé dichas tiradas en en array, porque si no no consigo que se sinconicen con el metodo principal, el que imprime las tiradas. Y por último, el método de ataque, cada personaje tiene el suyo, más o menos de éste estilo:

Código:
int n = 0;

@Override
public int ataque(Heroe[] ejercitoHeroes, Bestia[] ejercitoBestias) {
int b=1;
int dano = numeros[n] - ejercitoBestias[b].getArmadura();
n++;

if (dano < 0) {
dano = 0;
}
ejercitoBestias[b].setPuntosVida(ejercitoBestias[b].getPuntosVida() - dano);
         
return dano;
}

Luego, aparte de crear los personajes, tengo un array para guardarlos, tipo ejército:

Código:
Heroe[] ejercitoHeroes= {heroe1, heroe2, heroe3, heroe4};

Ya puse en el código que en caso de que una bestia muera, se debe añadir el heroe5 al array, el problema son los métodos de ataque. El método de arriba por ejemplo apunta a la bestia número 1, la idea es que al morir una bestia los héroes vayan rotando, del 1 al 0, del 0 al uno, etc.

No sé si me he explicado bien.
3  Programación / Java / Ayuda en: 30 Enero 2023, 20:31 pm
Bueno, para empezar, escribo esto porque es que ya no se que hacer, soy estudiante y ya se me echa el tiempo encima, así que me gustaría solicitar su ayuda.

A ver, tengo que hacer algo como esto:

Turno 1:
 Lucha entre Tal (Vida=150 Armadura=30) y Cuál (Vida=200 Armadura=60)
 Tal saca 106 y le quita 46 de vida a Cuál
 Cuál saca 69 y le quita 42 de vida a Tal
 Lucha entre Tal1 (Vida=150 Armadura=50) y Cuál1 (Vida=220 Armadura=50)
 Tal1 saca 76 y le quita 26 de vida a Cuál1
 Cuál1 saca 78 y le quita 33 de vida a Tal1
 Lucha entre Tal2 (Vida=100 Armadura=60) y Cuál2 (Vida=120 Armadura=30)
 Tal2 saca 99 y le quita 69 de vida a Cuál2
 Cuál2 saca 90 y le quita 30 de vida a Tal2
 Lucha entre Tal3 (Vida=300 Armadura=30) y Cuál3(Vida=100 Armadura=30)
 Tal3 saca 55 y le quita 25 de vida a Cuál3
 Cuál3 saca 20 y le quita 0 de vida a Tal3
Turno 2:
 Lucha entre Tal (Vida=108 Armadura=30) y Cuál(Vida=154 Armadura=60)
 Tal saca 91 y le quita 31 de vida a Cuál
 Cuál saca 81 y le quita 54 de vida a Tal
 Lucha entre Tal1 (Vida=117 Armadura=50) y Cuál1 (Vida=194 Armadura=50)
 Tal1 saca 50 y le quita 0 de vida a Cuál1
 Cuál1 saca 18 y le quita 0 de vida a Tal1
 Lucha entre Tal2 (Vida=70 Armadura=60) y Cuál2 (Vida=51 Armadura=30)
 Tal2 saca 93 y le quita 63 de vida a Cuál2
 Cuál2 saca 36 y le quita 0 de vida a Tal2

Hasta ahí diría que todo muy bien, considerando que tengo 5 heroes contra 4 bestias, lo que no consigo hacer es que vayan rotando cuando uno muere, si alguien puede decirme como podría hacerlo, o quieren ver lo que llevo de código, por favor no duden en responder a éste mensaje.
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines