Autor Tema: Proyectofinal master señor de los anillos  (Leído 855 veces)

Giaan46

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 3
    • Ver Perfil
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(); }

}

Giaan46

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 3
    • Ver Perfil
Re: Proyectofinal master señor de los anillos
« Respuesta #1 en: 18 de Abril 2023, 15:49 »
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 :
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;
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();

        }


    }

        }
Código: [Seleccionar]
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();

            }
        }
        }
    }


    }

Código: [Seleccionar]
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);
    }
Código: [Seleccionar]
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

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".