Foros del Web » Programación para mayores de 30 ;) » Java »

Juego el ahorcado (hangman)

Estas en el tema de Juego el ahorcado (hangman) en el foro de Java en Foros del Web. Hola, estoy haciendo el juego el Ahorcado o the HangMan con GUI. Hasta el momento he podido hacer toda la interfaz y algunos métodos. Es ...
  #1 (permalink)  
Antiguo 03/10/2011, 17:37
 
Fecha de Ingreso: octubre-2011
Mensajes: 58
Antigüedad: 13 años, 1 mes
Puntos: 0
Juego el ahorcado (hangman)

Hola, estoy haciendo el juego el Ahorcado o the HangMan con GUI. Hasta el momento he podido hacer toda la interfaz y algunos métodos.
Es un juego super conocido, pero si no lo conocen por el nombre lo pueden ver aquí: http://www.minijuegos.com/Mini-Ahorcado/1688

El juego escoge una palabra secreta de un arreglo creado y crea tantas rayas ( _ ) como letras tenga la palabra.
Básicamente lo que me falta y lo más importante es que el juego coja una letra de un combo box que selecciona el usuario y la compare con la palabra secreta que se tiene que adivinar, si la letra forma parte de la palabra entonces que esa letra sustituya el guión bajo ( _ ) en la posición correspondiente, si no forma parte de la palabra que presente la próxima imagen (1.cabeza, 2.tronco, 3 y 4.brazos, 5 y 6.piernas) y que muestre las letras usadas y erróneas en el Jpanel de intentos.

Esto es lo que he hecho:
Código PHP:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.TitledBorder;

public class 
Ahorcaito extends JFrame implements ActionListenerItemListener{
    private 
JMenuBar mb null;
    private 
JMenu menu null;
    private 
JLabel lbl_palabralbl_imglbl_msjlbl_letras;
    private 
String[] lista_de_palabras = {"perro","vaca","chivo","oveja","canguro","gallina""pato""conejo""aguila","avestrus","caracol"};
    private 
String palabraElegida;
    private 
double posicionDEpalabra;
    private 
int nRayas;
    private 
JComboBox jcb;
    private 
Icon[] imagen = {new ImageIcon(getClass().getResource("1.gif")), new ImageIcon(getClass().getResource("2.gif")),
                            new 
ImageIcon(getClass().getResource("3.gif")), new ImageIcon(getClass().getResource("4.gif")),
                            new 
ImageIcon(getClass().getResource("5.gif")), new ImageIcon(getClass().getResource("6.gif")),
                            new 
ImageIcon(getClass().getResource("7.gif")), new ImageIcon(getClass().getResource("icono.gif"))};
    private 
JButton boton;
    private 
TitledBorder titulo;
    private 
JMenuItem reiniciarsalir;
    private 
JTextPane tp;
    private 
int[] rayas;
    private 
String seleccion;
    private 
JPanel panelIzqpanelPalabraspanelIntentospanelLetraspanelMensajes;
    
    
//constructor
    
public Ahorcaito(){
        
//ventana unica y principal
        
this.setTitle("El Ahorcaito");
        
this.setSize(760,570);
        
this.getContentPane().setLayout(new GridLayout(1,2));
        
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
this.setVisible(true);
        
this.setIconImage(Toolkit.getDefaultToolkit().getImage("icono.gif")); 
        
        
//PANEL IZQUIERDO
        
panelIzq = new JPanel();
        
panelIzq.setSize(400,570);
        
panelIzq.setLayout(new GridLayout(4,1));
        
            
//panel de las palabras
            
panelPalabras = new JPanel();
            
panelPalabras.setLayout(new FlowLayout());
            
panelPalabras.setSize(400,90);
            
panelPalabras.setBackground(Color.lightGray);
            
titulo BorderFactory.createTitledBorder("Palabras");
            
panelPalabras.setBorder(titulo);
            
panelIzq.add(panelPalabras);
            
            
//panel de intentos
            
panelIntentos = new JPanel();
            
panelIntentos.setLayout(new FlowLayout());
            
panelIntentos.setSize(400,90);
            
panelIntentos.setBackground(Color.lightGray);
            
titulo BorderFactory.createTitledBorder("Intentos");
            
panelIntentos.setBorder(titulo);
            
lbl_letras = new JLabel();
            
panelIntentos.add(lbl_letras); 
            
panelIzq.add(panelIntentos);
            
            
//panel de letras
            
panelLetras = new JPanel();
            
panelLetras.setLayout(new FlowLayout());
            
panelLetras.setSize(400,110);
            
panelLetras.setBackground(Color.lightGray);
            
titulo BorderFactory.createTitledBorder("Letras");
            
panelLetras.setBorder(titulo);
            
            
String[] abcdario = {"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R"
                    
+"S","T","U","V","W","X","Y","Z"};
            
jcb = new JComboBox(abcdario);
            
boton = new JButton("Aceptar");
            
panelLetras.add(jcb);
            
panelLetras.add(boton);
            
panelIzq.add(panelLetras);
            
            
//panel de mensajes
            
JPanel panelMensajes = new JPanel();
            
panelMensajes.setLayout(new FlowLayout());
            
panelMensajes.setSize(400,110);
            
panelMensajes.setBackground(Color.lightGray);
            
titulo BorderFactory.createTitledBorder("Mensajes");
            
panelMensajes.setBorder(titulo);
            
lbl_msj = new JLabel();
            
panelMensajes.add(lbl_msj);
            
panelIzq.add(panelMensajes);
            
            
this.getContentPane().add(panelIzq);
            
        
        
//PANEL DERECHO
        
JPanel panelDer = new JPanel();
        
panelDer.setSize(360,570);
        
panelDer.setLayout(new GridLayout(1,1));
        
            
//la imagen
            
JPanel panelImg = new JPanel();
            
panelImg.setLayout(new FlowLayout());
            
lbl_img = new JLabel();
            
lbl_img.setIcon(imagen[0]);
            
panelImg.add(lbl_imgBorderLayout.CENTER);
            
panelDer.add(panelImgBorderLayout.CENTER);
            
this.getContentPane().add(panelDer);
        
        
        
//menu
        
mb = new JMenuBar();
        
menu = new JMenu("Menú");
        
reiniciar = new JMenuItem("Reiniciar");
        
salir = new JMenuItem("Salir");
        
menu.add(reiniciar);
        
menu.addSeparator();
        
menu.add(salir);
        
mb.add(menu);
        
this.setJMenuBar(mb);
        
this.setVisible(true);
        
        
//componentes que escuchan
        
salir.addActionListener(this);
        
boton.addActionListener(this);
        
jcb.addItemListener(this);
        
        
//metodos que se ejecutan
        
this.elegirPalabra();
        
this.presentarNumRayas();
    }
    
        
//elige la palabra aleatoria para adivinar
        
public void elegirPalabra(){
            
posicionDEpalabra Math.random()*10;
            
palabraElegida lista_de_palabras[(int)posicionDEpalabra];
            
lbl_msj.setText(palabraElegida); // Esta palabra es para adivicar. Solo la pongo para probar que concuerda con el numero de lineas
        
}
        
        
//muestra tantos guiones bajos como tiene la palabra
        
public void presentarNumRayas(){
            for(
int i=0;i<palabraElegida.length();i++){
                
JLabel l1 = new JLabel(" _ ");
                
panelPalabras.add(l1);
            }
        }
        
        public 
String getPalabraElegida(){
            return 
palabraElegida;
        }
        
        
//obtiene la letra seleccionada del comboBox
        
public void itemStateChanged(ItemEvent e) {
            if(
e.getSource() == jcb){
                
seleccion = (((String) jcb.getSelectedItem()).toLowerCase()); 
            }
        }

        
//habilitar la funcion Salir del menu
        //mostrar la letra escogida en el panel intentos
        
public void actionPerformed(ActionEvent e) {
            if(
e.getSource() == salir)
                
System.exit(0);
            if(
e.getSource() == boton){
                
lbl_letras.setText(seleccion);
                
            }
        }

    } 
__________________
La libertad más difícil de conservar es la de equivocarse. - Morris Wes

Lo que faltaba en internet: http://binar10s.blogspot.com/
  #2 (permalink)  
Antiguo 04/10/2011, 10:36
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 16 años, 2 meses
Puntos: 188
Respuesta: Juego el ahorcado (hangman)

En vez de tener guiones bajos asociados a una palabra puedes probar a tener un CharArray y cada guión bajo asociado a un carácter. Así puedes hacer los replaces sin problemas en la/s posición/es que corresponda del charArray.
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}
  #3 (permalink)  
Antiguo 08/10/2011, 13:06
 
Fecha de Ingreso: octubre-2011
Mensajes: 58
Antigüedad: 13 años, 1 mes
Puntos: 0
Respuesta: Juego el ahorcado (hangman)

Gracias por la idea de los CharArray, así fue como terminé haciéndolo.

Ya que lo he casi terminado el juego me faltan dos detalles.
1. cambiar la imagen de la taza de café:
he intentado con
Código Java:
Ver original
  1. this.setIconImage(new ImageIcon("icono.gif").getImage());
Puse esa línea dentro del constructor y la imagen "icono.gif" está en la carpeta bin del proyecto, pero no funciona.

2. reiniciar el juego:
tengo un menuItem con el texto "Reiniciar" necesito que cuando se haga clic en el botón, se reinicie el juego. Todos los valores vuelvan a ser como el primer momento que se ejecutó. Se me ocurre crear un método en el que inicialice las variables a su estado original, pero quisiera saber si hay algo más eficiente y más rápido.
__________________
La libertad más difícil de conservar es la de equivocarse. - Morris Wes

Lo que faltaba en internet: http://binar10s.blogspot.com/

Última edición por link01; 08/10/2011 a las 13:45
  #4 (permalink)  
Antiguo 10/10/2011, 07:50
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 16 años, 2 meses
Puntos: 188
Respuesta: Juego el ahorcado (hangman)

En cuanto a las imágenes, bien puedes cargarlas todas en una colección o set e irlas pasando una a una a medida que se vayan fallando las letras. El problema de que no se muestren por pantalla seguramente venga de que la forma de refrescar el contenido de la pantalla no está todo lo depurado que debería. Prueba a ver si existe un método llamado repaint() que vuelve a mostrar el contenido del panel y llámalo después de cargar la imagen.

Lo del reinicio no sé como tienes el código de ejecución, pero si tienes por algún lado algo como:

Ahorcadito miJuego = new Ahorcadito();

cuando quieras reiniciar puedes hacer...

miJuego = new Ahorcadito();

Y ya resetearía todo al asignar una nueva instancia de la clase correspondiente a la referencia existente.
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}
  #5 (permalink)  
Antiguo 10/10/2011, 09:54
 
Fecha de Ingreso: octubre-2011
Mensajes: 58
Antigüedad: 13 años, 1 mes
Puntos: 0
Respuesta: Juego el ahorcado (hangman)

Lo del reset terminé haciéndolo como dije. Cree un método que reinicié los valores de la variable a como estaban al principio.

Lo que dices de las imáges, ya está hecho. Lo que me falta es cambiar la imagen pequeña, el ícono de la taza de café de java que aparece en la esquina superior izquierda del frame.
__________________
La libertad más difícil de conservar es la de equivocarse. - Morris Wes

Lo que faltaba en internet: http://binar10s.blogspot.com/
  #6 (permalink)  
Antiguo 11/10/2011, 01:19
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 16 años, 2 meses
Puntos: 188
Respuesta: Juego el ahorcado (hangman)

Comprueba que el "this" realmente está haciendo referencia al JFrame que la contiene.

También puedes probar con:

setIconImage(java.awt.Toolkit.getDefaultToolkit(). getImage(this.getClass().getResource(imageLocation )));

También puedes mirar un ejemplo en este link
http://www.kodejava.org/examples/223.html

y ... comprueba también si entre los requisitos para el icono hay alguno de tamaño o así, y sí lo estás cumpliendo.
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}

Etiquetas: ahorcado, hangman, juego
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:21.