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 ActionListener, ItemListener{
private JMenuBar mb = null;
private JMenu menu = null;
private JLabel lbl_palabra, lbl_img, lbl_msj, lbl_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 reiniciar, salir;
private JTextPane tp;
private int[] rayas;
private String seleccion;
private JPanel panelIzq, panelPalabras, panelIntentos, panelLetras, panelMensajes;
//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_img, BorderLayout.CENTER);
panelDer.add(panelImg, BorderLayout.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);
}
}
}