Autor
|
Tema: Ayuda (Leído 5,416 veces)
|
yeza
Desconectado
Mensajes: 3
|
 |
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.
|
|
|
En línea
|
|
|
|
BloodSharp
Desconectado
Mensajes: 815
¡ Hiperfoco !
|
 |
Re: Ayuda
« Respuesta #1 en: 30 Enero 2023, 21:51 pm » |
|
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. Bienvenido al foro, en este foro se resuelven y ayudan a las personas en base a lo que muestres lo que tengas ya hecho y se tratará de ayudar en base a tu código. B#
|
|
|
En línea
|
|
|
|
Tachikomaia
Conectado
Mensajes: 1.507
Hackentifiko!
|
 |
Re: Ayuda
« Respuesta #2 en: 30 Enero 2023, 23:20 pm » |
|
No sé si entenderé el código, pero me interesa. A ver, parece que hay 4 peleas al mismo tiempo, todas 1 vs 1. El daño en principio parece ser al azar, salido de un dado o algo así y reducido por la armadura, que no se va rompiendo (sí ocurre en Doom 95). Pero algunas cuentas parecen mal hechas o no entiendo cómo reduce. 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 Normalmente la armadura resta o divide al daño. Daño a Cual = 106-su A(60) = 46 Ok Daño a Tal = 69-su A(30) = 42 ¿¿¿??? 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 Daño a Cual1 = 76-50 = 26 Ok Daño a Tal1 = 78-50 = 33 ¿¿¿??? ¿La armadura de los Tales funciona distinto o qué? Tampoco parece muy bueno llamarles Cuales y Tales, hubieras dicho por ejemplo Hs (Héroes) y Ms (Monstruos). Hasta ahí diría que todo muy bien Ok, pero ojo con los resultados negativos, si A es mayor que el daño. considerando que tengo 5 heroes contra 4 bestias ¿Y por qué Tal4 no atacó? ¿es una especie de Coliseo, con reglas? ¿o es que en tu juego existe la regla de que un personaje no puede ser atacado por más de 1 personaje? Por ejemplo en Final Fantasy Tactics, con armas de alcance 1 sólo pueden atacar a 1 personaje hasta 4, uno de frente, otro por la espalda y 1 por cada costado. lo que no consigo hacer es que vayan rotando cuando uno muere Eso tiene varias interpretaciones. Por ejemplo si muere H1 ¿quieres que H2 pelee en su lugar, y que H3 pelee contra quien peleaba H2, y que H4 pelee contra quien peleaba H3? ¿o simplemente que el H que estaba observando entre en lugar del caído? ¿y si no hay H disponible el M se quedará mirando sin atacar? Poco tiene de M si hace eso. Dime que irá a comer humanos o algo así, sino esos H parecen villanos. Debes crear variables Aliado1 = "Heroe1" y otras así y las modificas cuando te apetezca. En el lenguaje que sé se usa eval pero hace tiempo que no lo toco, así en el aire no sabría decirte, a ver. A1 = "H1" E1 = "M1" // E=Enemigo A2 = "H2" E2 = "M2" A3 = "H3" E3 = "M3" A4 = "H4" E4 = "M4" A5 = "H5" // Paso 2 N = 1 Daño = random(151)-eval("E"+N+"Ar") // hay que definir las Ar antes y debes aplicar tu cálculo que no sé cómo es, esto es sólo de ejemplo. trace ("¡"+eval("A"+N) + " ataca: " + eval("E"+N) + " pierde " + Daño + " HPs!" set ("E"+N+"HP", eval("E"+N+"HP")-Daño) // eso resta a la variable E(N)HP, hay que definirlas antes. Daño = random(151)-eval("A"+N+"Ar") trace ("¡"+eval("E"+N) + " ataca: " + eval("H"+N) + " pierde " + Daño + " HPs!" // esto es suponiendo que se atacan al mismo tiempo, sino tienes que chequear que el E siga vivo. set ("A"+N+"HP", eval("A"+N+"HP")-Daño) N++ // repites el proceso, de hecho te conviene poner un while limitando el máximo valor de N según el Mínimo de: Aliados, Enemigos. Si eval("A"+N+"HP") <= 0 // lo siguiente depende de lo que quieras hacer, como dije tiene variaa interpretaciones, pongo lo más difícil de hacer A1 = A2 A2 = A3 A3 = A4 A4 = A5 // se podría hacer con un while, yo es que 1ero lo hago a lo bruto y después me doy cuenta, pero también es que me resulta m´s difícil usar whiles. fin del si // Tienes que repetir esto porque A2 puede que esté muerto también, y A3, etc. Puedes usar un while... y otro anidado creo... En ambos casos vas variando N (claro usa una variable distinta en 1 caso). En el 1er while varías desde dónde empiezas, aumenta cuando confirmas que el A está ok. A verrr... no pongas el Si que antes puse, pon: N=1 Do Si eval("A"+N+"HP") <= 0 N2=N Do set("A"+N2, eval("A"+(N2+1)) N2++ while N2<As (o algo similar, prueba, puede ser As-1 o As+1, no sé; As=Aliados disponibles) sino N++ while N<As (idem)
Algo así, puede que esté mal  Luego haces lo propio con los monstruos. Capaz que te da un error, que un mismo personaje esté en 2 lugares al mismo tiempo, tendría que testearlo, no sé.
|
|
« Última modificación: 30 Enero 2023, 23:26 pm por Tachikomaia »
|
En línea
|
|
|
|
yeza
Desconectado
Mensajes: 3
|
 |
Re: Ayuda
« Respuesta #3 en: 31 Enero 2023, 19:32 pm » |
|
A ver, intentaré ejemplificar lo que tengo lo mejor que pueda: 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: 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: 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.
|
|
|
En línea
|
|
|
|
Locura_23
Desconectado
Mensajes: 162
|
 |
Re: Ayuda
« Respuesta #4 en: 31 Enero 2023, 20:09 pm » |
|
Si queres que vayan rotando a medida que mueren podes utilizar una fila como estructura de datos o una lista enlazada pienso. Cada vez que cae uno, se añade al final.
|
|
« Última modificación: 31 Enero 2023, 20:17 pm por Locura_23 »
|
En línea
|
|
|
|
yeza
Desconectado
Mensajes: 3
|
 |
Re: Ayuda
« Respuesta #5 en: 31 Enero 2023, 20:27 pm » |
|
El problema es que tengo esta clase, que contiene el método principal: 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: 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.
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Ayuda por davor ayuda os ruego ayuda XD (SOLUCIONADO)
Hardware
|
XxRekcahlExX
|
6
|
11,465
|
24 Mayo 2010, 00:56 am
por Aprendiz-Oscuro
|
|
|
[PYTHON][AYUDA][ERROR] Necesito ayuda para instalar PyGTK 2 en windows 7
Python
|
Noxware
|
2
|
8,746
|
20 Septiembre 2014, 00:05 am
por Noxware
|
|
|
[AYUDA] Ayuda para poner en modo monitor mi tarjeta de red! Kali LInux
GNU/Linux
|
Santi__
|
1
|
9,923
|
12 Noviembre 2016, 18:25 pm
por Will21
|
|
|
necesito ayuda para hecer este programa, por favor ayuda
Programación C/C++
|
LARANARENElol
|
2
|
5,517
|
16 Noviembre 2018, 03:00 am
por LARANARENElol
|
|
|
Ayuda😔 post dañinos en mi face, quien me ayuda a localizar su ip???
Hacking
|
petercito
|
3
|
3,086
|
17 Febrero 2022, 08:05 am
por .xAk.
|
|