1
C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más / Re: Batalla RPG por turnos con Java juego rol Role Playing Game Señor de los Anillos
« en: 26 de Abril 2023, 17:45 »
buenas ! estoy haciendo el mismo proyecto, le quise implementar un fondo con unos iconos que representen a los personajes para hacerlo un poco mas llamativo, el problema que tengo es que no puedo hacer que a medida que se creen los personaje se pinten en el jpanel con el fondo, dejo mi codigo aver si me podrian dar una mano , desde ya muchas gracias!
Código: [Seleccionar]
package Game.tokio.Grafic;
import Game.tokio.Ejercito;
import Game.tokio.Personajes.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class PanelCrearPersonaje extends JPanel {
private JTextField jtNombre;
private JComboBox<String> jcTipo;
private JTextField jtVida;
private JTextField jtArmadura;
private JButton btaniadir;
//Atributo para referenciar alguno de los ejercitos de la clase main
private Ejercito ejercito;
//Panel con la lista de personajes
private PanelLista lista;
private CampoDeBatalla campoDeBatalla;
public PanelCrearPersonaje(String titulo, String[] tipos, Ejercito ejercito) {
// inicializamos componentes
jtNombre = new JTextField();
jcTipo = new JComboBox<String>(tipos);
jtVida = new JTextField();
jtArmadura = new JTextField();
btaniadir = new JButton("añadir");
btaniadir.addActionListener(new AccionCrearPersonaje());
this.ejercito = ejercito; // Ejercito referenciado
lista = new PanelLista(titulo, ejercito);//pasamos titulo de borde y referencia a ejercito
this.campoDeBatalla = campoDeBatalla;
// layout de "cajas" verticales
setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
// cada "caja" apilada verticalmente sera un panel de la clase panleConLabel
add(new PanelConLabel("Nombre: ", jtNombre));
add(new PanelConLabel("Tipo: ", jcTipo));
add(new PanelConLabel("Vida: ", jtVida));
add(new PanelConLabel("Armadura: ", jtArmadura));
// Boton añadir
JPanel pnAniadir = new JPanel();
pnAniadir.add(btaniadir);
add(pnAniadir);
//colocamos el panel lista debajo de todo
add(lista);
// combinamos dos bordes, uno titulador y otro vacio para crear algo de relleno
setBorder(BorderFactory.createCompoundBorder(
BorderFactory.createEmptyBorder(15, 15, 15, 15),
BorderFactory.createTitledBorder(titulo)));
}
private class PanelConLabel extends JPanel {
public PanelConLabel(String texto, JComponent componente) {
//Layout tipo grilla, sera una fila con dos columnas
setLayout(new GridLayout(1, 2));
// En la primera columna, la etiqueta
add(new JLabel(texto));
// En la segunda columna, el componente que acompaña la etiqueta
add(componente);
// inflamos el panel con aldo de borde vacio
setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
}
}
public class AccionCrearPersonaje implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
// Recogemos datos
String nombre = jtNombre.getText();
String tipo = (String) jcTipo.getSelectedItem();
int vida = Integer.parseInt(jtVida.getText());
int armadura = Integer.parseInt(jtArmadura.getText());
// Creamos nuevo personaje segun tipo
switch (tipo) {
case "Elfo":
ejercito.addPersonaje(new Elfos(nombre, vida, armadura));
repaint();
revalidate();
break;
case "Humano":
ejercito.addPersonaje(new Humanos(nombre, vida, armadura));
repaint();
revalidate();
break;
case "Hobbit":
ejercito.addPersonaje(new Hobbits(nombre, vida, armadura));
repaint();
revalidate();
break;
case "Trasgo":
ejercito.addPersonaje(new Trasgos(nombre, vida, armadura));
repaint();
revalidate();
break;
case "Orco":
ejercito.addPersonaje(new Orcos(nombre, vida, armadura));
repaint();
revalidate();
break;
}
// Limpiamos campos
jtNombre.setText(null);
jcTipo.setSelectedIndex(0);
jtVida.setText(null);
jtArmadura.setText(null);
//Actualiza lista
lista.actualizarLista();
campoDeBatalla.repaint();
campoDeBatalla.revalidate();
}
}
}
Código: [Seleccionar]
package Game.tokio.Grafic;
import Game.tokio.Ejercito;
import Game.tokio.Personajes.*;
import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
public class CampoDeBatalla extends JPanel {
private BufferedImage backgroundImage;
private Ejercito heroes;
private Ejercito bestias;
private BufferedImage elfo;
private BufferedImage humanos;
private BufferedImage hobbits;
private BufferedImage trasgo;
private BufferedImage orco;
Ejercito ejercito;
String nombre;
PanelLista lista;
private Personaje personaje;
public CampoDeBatalla() {
heroes = new Ejercito();
bestias = new Ejercito();
this.elfo = elfo;
this.humanos = humanos;
this.orco = orco;
this.trasgo = trasgo;
this.hobbits = hobbits;
ejercito = new Ejercito();
lista = new PanelLista(nombre,ejercito);
setBackground(Color.white);
try {
backgroundImage = ImageIO.read(new File("/Users/gian/IdeaProjects/ProyectoFinal_GianlucaMaida/src/Game/tokio/Multimedia/FondoJuego.png"));
elfo = ImageIO.read(new File("/Users/gian/IdeaProjects/ProyectoFinal_GianlucaMaida/src/Game/tokio/Multimedia/elfo.PNG"));
humanos = ImageIO.read(new File("/Users/gian/IdeaProjects/ProyectoFinal_GianlucaMaida/src/Game/tokio/Multimedia/humano1.PNG"));
hobbits = ImageIO.read(new File("/Users/gian/IdeaProjects/ProyectoFinal_GianlucaMaida/src/Game/tokio/Multimedia/hobbit.PNG"));
trasgo = ImageIO.read(new File("/Users/gian/IdeaProjects/ProyectoFinal_GianlucaMaida/src/Game/tokio/Multimedia/trasgo.PNG"));
orco = ImageIO.read(new File("/Users/gian/IdeaProjects/ProyectoFinal_GianlucaMaida/src/Game/tokio/Multimedia/orco1.PNG"));
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
// Dibuja el fondo
g.drawImage(backgroundImage, 0, 0, 750, 520, null);
// Dibuja los personajes
for (int i = 0; i < ejercito.personajes.size(); i++) {
if (ejercito.getPersonaje(i) instanceof Elfos) {
g.drawImage(elfo, 300, 100, null);
setOpaque(false);
revalidate();
repaint();
} else if (ejercito.getPersonaje(i)instanceof Humanos) {
g.drawImage(humanos, 300, 200, null);
setOpaque(false);
revalidate();
repaint();
} else if (ejercito.getPersonaje(i)instanceof Hobbits) {
g.drawImage(hobbits, 300, 300, null);
revalidate();
repaint();
} else if (ejercito.getPersonaje(i)instanceof Orcos) {
g.drawImage(orco, 350, 200, null);
revalidate();
repaint();
} else if (ejercito.getPersonaje(i)instanceof Trasgos) {
g.drawImage(trasgo, 350, 300, null);
revalidate();
repaint();
}
}
setOpaque(false);
revalidate();
repaint();
}
}