hay 5 clases mas que son (Elfos,Hobbits,Humanos)que extienden la clase de heroes y(Orcos,Trasgos) que extienden de la clase bestias
Ahora la clases que se encargan de la parte grafica del juego :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;
import java.util.ArrayList;
public class PanelCrearPeronaje extends JPanel {
private JTextField jtNombre;
private JComboBox<String> jcTipo;
private JTextField jtVida;
private JTextField jtArmadura;
private JButton btaniadir;
private ArrayList<Icon> iconosPersonajes;
private Fondo fondo;
//Atributo para referenciar alguno de los ejercitos de la clase main
private Ejercito ejercito;
//Panel con la lista de personajes
private PanelLista lista;
public PanelCrearPeronaje(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());
iconosPersonajes = new ArrayList<>();
this.ejercito = ejercito; // Ejercito referenciado
lista = new PanelLista(titulo,ejercito);//pasamos titulo de borde y referencia a ejercito
// 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));
}
}
private 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());
ImageIcon imageIcon = new ImageIcon();
ArrayList<ImageIcon> iconos = new ArrayList<>();
// Creamos nuevo personaje segun tipo
switch (tipo) {
case "Elfo":
ejercito.addPersonaje(new Elfos(nombre, vida, armadura));
ImageIcon imagenElfo = new ImageIcon(getClass()
.getResource("/Game/tokio/Multimedia/elfo1.PNG"));
imageIcon = imagenElfo;
iconos.add(imagenElfo);
break;
case "Humano":
ejercito.addPersonaje(new Humanos(nombre, vida, armadura));
ImageIcon imagenHumano = new ImageIcon(getClass()
.getResource("/Game/tokio/Multimedia/humano.PNG"));
imageIcon = imagenHumano;
iconos.add(imagenHumano);
break;
case "Hobbit":
ejercito.addPersonaje(new Hobbits(nombre, vida, armadura));
ImageIcon imagenHobbit = new ImageIcon(getClass()
.getResource("/Game/tokio/Multimedia/hobbit.PNG"));
imageIcon = imagenHobbit;
iconos.add(imagenHobbit);
break;
case "Trasgo":
ejercito.addPersonaje(new Trasgos(nombre, vida, armadura));
ImageIcon imagenTrasgo = new ImageIcon(getClass()
.getResource("/Game/tokio/Multimedia/trasgo.PNG"));
imageIcon = imagenTrasgo;
iconos.add(imagenTrasgo);
break;
case "Orco":
ejercito.addPersonaje(new Orcos(nombre, vida, armadura));
ImageIcon imagenOrco = new ImageIcon(getClass()
.getResource("/Game/tokio/Multimedia/orco1.PNG"));
imageIcon = imagenOrco;
iconos.add(imagenOrco);
break;
}
// creamos un JLabel con la imagen del personaje
// Limpiamos campos
jtNombre.setText(null);
jcTipo.setSelectedIndex(0);
jtVida.setText(null);
jtArmadura.setText(null);
revalidate();
repaint();
//Actualiza lista
lista.actualizarLista();
}
}
}
package Game.tokio.Grafic;
import Game.tokio.Ejercito;
import Game.tokio.Personajes.Personaje;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class PanelLista extends JPanel {
private JList<Personaje> lista;
private DefaultListModel<Personaje> modeloLista;
private JButton btSubir;
private JButton btBajar;
private JButton btEliminar;
private Ejercito ejercito;
public PanelLista(String titulo, Ejercito ejercito) {
this.ejercito = ejercito;
lista = new JList<Personaje>();
lista.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
modeloLista = new DefaultListModel<Personaje>();
lista.setModel(modeloLista);
btSubir = new JButton("Subir");
btSubir.addActionListener(new AccionSubirBajar(-1));
btBajar = new JButton("Bajar");
btBajar.addActionListener(new AccionSubirBajar(1));
btEliminar = new JButton("Eliminar");
btEliminar.addActionListener(new AccionEliminar());
setLayout(new BorderLayout());
JScrollPane scrollLista = new JScrollPane();
scrollLista.setViewportView(lista);
scrollLista.setBorder(BorderFactory.createTitledBorder(null, titulo));
add(scrollLista, BorderLayout.SOUTH);
JPanel pnBotones = new JPanel();
pnBotones.add(btBajar);
pnBotones.add(btSubir);
pnBotones.add(btEliminar);
add(pnBotones, BorderLayout.CENTER);
}
public void actualizarLista() {
modeloLista.clear();
for (Personaje pers : ejercito.personajes)//Ejercito no proporciona el arrayList
modeloLista.addElement(pers);
lista.setModel(modeloLista);
}
private class AccionEliminar implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
Personaje seleccionado = lista.getSelectedValue();
if (seleccionado == null)
JOptionPane.showMessageDialog(null, "selecciona un personaje ");
else {
ejercito.personajes.remove(seleccionado);// Eliminamos del arraylist
actualizarLista();
}
}
}
private class AccionSubirBajar implements ActionListener{
private int desplazamiento; // -1 para subir y +1 para bajar
public AccionSubirBajar(int desplazamiento){
this.desplazamiento = desplazamiento;
}
@Override
public void actionPerformed(ActionEvent e) {
// personaje seleccionado en jlist
Personaje seleccionado = lista.getSelectedValue();
if(seleccionado == null)
JOptionPane.showMessageDialog(null,"selecciona un personaje");
else{
// indice de soldado seleccionado, es igual a ambas listas
int indiceSelleccionado = lista.getSelectedIndex();
// indice del personaje para intercambiar , puede que sea uno anterio o uno posterior
int indiceIntercambiar = indiceSelleccionado + desplazamiento;
// buscamos en el arraylist, el personaje para intercambiar
Personaje intercambiar = ejercito.getPersonaje(indiceIntercambiar);
// si intercambiar fuera null, es que el soldado seleccionado no se puede intercambiar
if(intercambiar != null){
// seteamos los soldados e intercambiamos los indices
ejercito.personajes.set(indiceSelleccionado,intercambiar);
ejercito.personajes.set(indiceIntercambiar, seleccionado);
actualizarLista();
}
}
}
}
}
import Game.tokio.Ejercito;
import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.io.File;
public class Fondo extends JPanel {
private Image imagen;
private Ejercito ejercito;
public Fondo(String rutaImagen) {
this.ejercito = ejercito;
try {
File archivoImagen = new File(rutaImagen);
imagen = ImageIO.read(archivoImagen);
} catch (Exception e) {
System.out.println("Error al cargar la imagen: " + e.getMessage());
}
}
@Override
public void paint(Graphics g) {
Dimension tamano = getSize();
g.drawImage(imagen, 0, 0, tamano.width, tamano.height, null);
setOpaque(false);
super.paint(g);
}
package Game.tokio.Grafic;
import Game.tokio.Batalla;
import Game.tokio.Ejercito;
import Game.tokio.Personajes.Personaje;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class BatallaGr extends JFrame {
//Modelo
private Ejercito bestias;
private Ejercito heroes;
// Vistas
private PanelCrearPeronaje crearHeroes;
private PanelCrearPeronaje crearBestias;
private JButton btIniciar;
private JTextArea textArea;
private Fondo fondo ;
private ImagenPersonajes imagenPersonajes;
public BatallaGr(){
bestias = new Ejercito();
heroes = new Ejercito();
fondo = new Fondo("/Users/gian/IdeaProjects/ProyectoFinal_GianlucaMaida/src/Game/tokio/Multimedia/FondoJuego.png");
crearHeroes = new PanelCrearPeronaje("Heroes", new String[]{"Elfo","Humano","Hobbit"},heroes);
crearBestias = new PanelCrearPeronaje("Bestias", new String[]{"Orco","Trasgo"},bestias);
textArea = new JTextArea();
btIniciar = new JButton(" BATALLAR ");
btIniciar.getPreferredSize();
btIniciar.setBounds(100,100,100,100);
btIniciar.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
textArea.setText(" ");
Batalla.batallarTextArea(heroes,bestias,textArea);
}
});
JScrollPane scrollLista = new JScrollPane();
JPanel pnSuperior = new JPanel();
JPanel pnInferior = new JPanel();
pnSuperior.add(crearHeroes);
pnSuperior.add(crearBestias);
pnInferior.add(btIniciar);
pnInferior.add(textArea);
getContentPane().add(pnSuperior, BorderLayout.NORTH);
getContentPane().add(pnInferior,BorderLayout.SOUTH);
scrollLista.setViewportView(textArea);
scrollLista.setBounds(10,10,10,10);
scrollLista.setBorder(BorderFactory.createTitledBorder(null, "Batalla!"));
add(scrollLista, BorderLayout.CENTER);
pnInferior.setVisible(true);
JFrame ventanaBat = new JFrame();
JPanel panelPersonajes = new JPanel();
panelPersonajes.setLayout(new FlowLayout());
for (Personaje heroe: heroes.getPersonajes()){
JLabel label = new JLabel(new ImageIcon(String.valueOf(heroe.getImagen())));
panelPersonajes.add(label);
}
for (Personaje bestia : bestias.getPersonajes()){
JLabel label = new JLabel(new ImageIcon(String.valueOf(bestia.getImagen())));
panelPersonajes.add(label);
}
ventanaBat.add(fondo);
//fondo.add(imagenPersonajes,BorderLayout.CENTER);
ventanaBat.setTitle("Batalla señor de los anillos ");
ventanaBat.setSize(1088,832);
fondo.setBounds(0,0,1088,832);
ventanaBat.setVisible(true);
setTitle("Batalla ");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
setLocationRelativeTo(null);
setVisible(true);
}
public void getGraphics(Graphics2D g) {
super.paint(g);
fondo.paint(g);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new BatallaGr();
}
});
}
}
y aparte tengo una clase ImagenPesonajes que no la termine, he hecho prueba y error buscando ayuda en internet pero no logro hacer lo que quiero