1
C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más / Proyectofinal master señor de los anillos
« en: 18 de Abril 2023, 15:48 »
Hola que tal ?? estoy haciendo el proyecto final del master que estoy haciendo en java y tengo problemas para implementar la parte grafica, ya tengo el codigo casi terminado, lo que me falta es implementar los personajes en el Jframe del fondo a medida que se van creando, si alguien me podria dar una mano estare muy agradecido, dejo mi proyecto completo aver que les parece y si me dan tambien una critica sobre el desarrollo tambien sera bienvenida. desde ya muchas gracias !
Código: [Seleccionar]
package Game.tokio.Personajes;
import javax.swing.*;
public abstract class Personaje {
private String nombre;
private int puntosVida;
private int resistenciaArmadura;
private ImageIcon imagen;
public Personaje(String nombre, int puntosVida, int resistenciaArmadura) {
this.nombre = nombre;
this.puntosVida = puntosVida;
this.resistenciaArmadura = resistenciaArmadura;
this.imagen = imagen;
}
public String getNombre() {
return nombre;
}
public int getVida() {
if(puntosVida < 0){
return 0;
}
return puntosVida;
}
public void setVida(int vida) {
this.puntosVida = vida;
}
public int getResistenciaArmadura() {
return resistenciaArmadura;
}
public abstract int atacar (Personaje enemigo);
public int recibirAtaque(int ataque) {
if(ataque >= resistenciaArmadura){
return ataque - resistenciaArmadura;
}else if (ataque < resistenciaArmadura){
return 0;
}else if(puntosVida == 0){
return 0;
}
return ataque - resistenciaArmadura;
}
public abstract String mensaje();
@Override
public boolean equals(Object obj){
if(obj instanceof Personaje){
Personaje personaje2 = (Personaje) obj;
return nombre.equals(personaje2.getNombre()); // si los nombres coinsiden retorna true
}
else return false;
}
public ImageIcon getImagen(){
return imagen;
}
@Override
public String toString () {
return getNombre() + "( Vida= " + getVida() + " Armadura =" + getResistenciaArmadura() + ")";
}
}
Código: [Seleccionar]
package Game.tokio;
import Game.tokio.Personajes.*;
import java.util.ArrayList;
public class Ejercito {
public ArrayList<Personaje> personajes;
public Ejercito() {
personajes = new ArrayList<Personaje>();
}
public void addPersonaje(Personaje personaje) {
// añadimos un personaje
personajes.add(personaje);
}
public Personaje getPersonaje(int posicion) {
try {
// retornamos un personaje en la posicion
return personajes.get(posicion);
} catch (Exception e) {
// si no hay personajes en esa posicion
System.out.println("no hay personajes ");
return null;
}
}
public ArrayList<Personaje> getPersonajes(){
return personajes;
}
}
Código: [Seleccionar]
package Game.tokio;
import Game.tokio.Personajes.Bestias;
import Game.tokio.Personajes.Heroes;
import javax.swing.*;
public class Batalla {
// metodo por consola
public static void batallar(Ejercito heroes, Ejercito bestias) {
int turno = 0;
do {
for (int i = 0; i < bestias.personajes.size(); i++) {
// generamos un for para que cada vez que la lista fue recorrida incremente el valor asignado para turno asi podemos imprimir por consola que turno es el que se esta jugando
for (int j = 0; j == i; j++) {
turno++;
System.out.println("Turno " + turno + ':');
}
Heroes heroe = (Heroes) heroes.getPersonaje(i);
Bestias bestia = (Bestias) bestias.getPersonaje(i);
// guardamos en variables los resultados de ataques , daño y de vida para que se actualice a medida que pasan los turnos..
int atacah = heroe.atacar(bestia);
int atacab = bestia.atacar(heroe);
int dañoh = heroe.recibirAtaque(atacab);
int dañob = bestia.recibirAtaque(atacah);
int vidah = heroe.getVida();
int vidab = bestia.getVida();
//esquema de lucha consola :
System.out.println("Lucha entre " + heroe.getNombre()
+ " (Vida= " + vidah + " Armadura= " + heroe.getResistenciaArmadura() + ") y "
+ bestia.getNombre() + " (Vida= " + vidab + " Armadura= " + bestia.getResistenciaArmadura() + ")");
System.out.println(heroe.getNombre() + " saca " + atacah + " y le quita " + dañob +
" de vida a " + bestia.getNombre());
System.out.println(bestia.getNombre() + " saca " + atacab + " y le quita " + dañoh +
" de vida a " + heroe.getNombre());
// actualizamos los valores del daño causado en esta ronda
bestia.setVida(bestia.getVida() - dañob);
heroe.setVida(heroe.getVida() - dañoh);
// hacemos un if con la consicion de que personaje tenga vida y sino se elimina de la lista
if (heroes.getPersonaje(i).getVida() <= 0) {
System.out.println("¡Muere " + heroe.mensaje() + heroes.personajes.get(i).getNombre() + '!');
heroes.personajes.remove(heroes.getPersonaje(i));
} else if (bestias.getPersonaje(i).getVida() <= 0) {
System.out.println("¡Muere " + bestia.mensaje() + bestias.personajes.get(i).getNombre() + '!');
bestias.personajes.remove(bestias.getPersonaje(i));
}
}
}
while (!bestias.personajes.isEmpty());
// luego hacemos otro if para mostrar por pantalla el ganador del combate
if (bestias.personajes.isEmpty()) {
System.out.println("¡¡VICTORIA DE LOS HÉROES!!");
} else if (heroes.personajes.isEmpty()) {
System.out.println("¡¡VICTORIA DE LAS BESTIAS!!");
}
}
public static void batallarTextArea(Ejercito heroes, Ejercito bestias, JTextArea textArea) {
int turno = 0;
do {
for (int i = 0; i < bestias.personajes.size(); i++) {
for (int j = 0; j == i; j++) {
turno++;
String mensajeTruno = "Turno " + turno + ": \n";
textArea.append(mensajeTruno);
}
// obtenemos los personajes que van a luchar
Heroes heroe = (Heroes) heroes.getPersonaje(i);
Bestias bestia = (Bestias) bestias.getPersonaje(i);
// guardamos los resultados de los ataques y el daño recibido para cada personaje
int atacah = heroe.atacar(bestia);
int atacab = bestia.atacar(heroe);
int dañoh = heroe.recibirAtaque(atacab);
int dañob = bestia.recibirAtaque(atacah);
int vidah = heroe.getVida();
int vidab = bestia.getVida();
// Esquema de la lucha
String mensajeLucha = "Lucha entre " + heroe.getNombre()
+ " (Vida= " + vidah + " Armadura= " + heroe.getResistenciaArmadura() + ") y "
+ bestia.getNombre() + " (Vida= " + vidab + " Armadura= " + bestia.getResistenciaArmadura() + ")\n";
String mensajeAtaqueHeroe = heroe.getNombre() + " saca " + atacah + " y le quita " + dañob +
" de vida a " + bestia.getNombre() + "\n";
String mensajeAtaqueBestia = bestia.getNombre() + " saca " + atacab + " y le quita " + dañoh +
" de vida a " + heroe.getNombre() + "\n";
// Agregamos los mensajes al JTextArea
textArea.append(mensajeLucha);
textArea.append(mensajeAtaqueHeroe);
textArea.append(mensajeAtaqueBestia);
// Actualizamos los valores del daño causado en esta ronda
bestia.setVida(bestia.getVida() - dañob);
heroe.setVida(heroe.getVida() - dañoh);
// Si alguno de los personajes tiene vida menor o igual a 0, lo eliminamos de la lista de personajes
if (heroes.getPersonaje(i).getVida() <= 0) {
String mensajeMuerte = "¡Muere " + heroe.mensaje() + heroes.personajes.get(i).getNombre() + "!\n";
textArea.append(mensajeMuerte);
heroes.personajes.remove(heroes.getPersonaje(i));
} else if (bestias.getPersonaje(i).getVida() <= 0) {
String mensajeMuerte = "¡Muere " + bestia.mensaje() + bestias.personajes.get(i).getNombre() + "!\n";
textArea.append(mensajeMuerte);
bestias.personajes.remove(bestias.getPersonaje(i));
}
}
} while (!bestias.personajes.isEmpty());
// luego hacemos otro if para mostrar por pantalla el ganador del combate
if (bestias.personajes.isEmpty()) {
String mensajeGanaH = "¡¡VICTORIA DE LOS HÉROES!!";
textArea.append(mensajeGanaH);
} else if (heroes.personajes.isEmpty()) {
String mensajeGanaB = "¡¡VICTORIA DE LAS BESTIAS!!";
textArea.append(mensajeGanaB);
}
}
}
Código: [Seleccionar]
package Game.tokio.Personajes;
import java.util.Random;
public class Bestias extends Personaje {
public Bestias(String nombre, int vida, int resistencia) {
super(nombre, vida, resistencia);
}
@Override
public int atacar(Personaje enemigo) {
// se lanza un dado de 0 a 90 al azar
Random dado = new Random();
int dado1 = dado.nextInt(91);
return dado1;
}
@Override
public String mensaje() {
return mensaje();
}
}
Código: [Seleccionar]
package Game.tokio.Personajes;
import java.util.Random;
public class Heroes extends Personaje {
public Heroes(String nombre, int vida, int resistencia) {
super(nombre, vida, resistencia);
}
@Override
public int atacar(Personaje enemigo){
// el ataque será el mejor lanzamiento entre 2 dados de 0 a 100
Random dado = new Random();
int dado1 = dado.nextInt(101);
int dado2 = dado.nextInt(101);
return Math.max(dado1,dado2);
}
@Override
public String mensaje() { return mensaje(); }
}