Juego del ahorcado
Jugo del ahorcado en Java.
Descargar código fuente y .jar ejecutable
Descargar código fuente y .jar ejecutable
Ahorcado.java
package ahorcado;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.Font;
import javax.swing.SwingConstants;
import javax.swing.JButton;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
/**
*
* @author Horacio Bono
*/
public class Ahorcado extends JFrame {
private static final long serialVersionUID = 1L;
final AreaDibujo areaDibujo;
final JTextField txtPalabra;
final JTextField txtNombre;
final JButton btnNuevaPalabra;
final JButton btnNombre;
final JLabel[] letras;
String nombre;
String palabraSecreta;
String palabraOculta;
Ahorcado() {
super("Ahorcado");
setBounds(100, 100, 800, 650);
JPanel contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
areaDibujo = new AreaDibujo();
areaDibujo.setBounds(276, 60, 450, 450);
contentPane.add(areaDibujo);
txtPalabra = new JTextField();
txtPalabra.setFont(new Font("Tahoma", Font.BOLD, 26));
txtPalabra.setEditable(false);
txtPalabra.setBounds(276, 510, 450, 50);
txtPalabra.setHorizontalAlignment(JLabel.CENTER);
contentPane.add(txtPalabra);
txtPalabra.setColumns(50);
txtNombre = new JTextField();
txtNombre.setFont(new Font("Tahoma", Font.BOLD, 16));
txtNombre.setHorizontalAlignment(SwingConstants.CENTER);
txtNombre.setEditable(false);
txtNombre.setBounds(360, 23, 366, 26);
contentPane.add(txtNombre);
txtNombre.setColumns(10);
nombre = "ALGUIEN";
txtNombre.setText(nombre);
btnNombre = new JButton("Nombre");
btnNombre.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
ingresarNombre();
}
});
btnNombre.setHorizontalAlignment(SwingConstants.CENTER);
btnNombre.setFont(new Font("Tahoma", Font.PLAIN, 11));
btnNombre.setBounds(276, 23, 74, 23);
contentPane.add(btnNombre);
// Agrega un MouseListener a los JLabel de las letras
// para que respondan a un clic
MouseListener clicLetra = new MouseListener() {
@Override
public void mousePressed(MouseEvent e) { }
@Override
public void mouseExited(MouseEvent e) { }
@Override
public void mouseEntered(MouseEvent e) { }
@Override
public void mouseReleased(MouseEvent e) { }
@Override
public void mouseClicked(MouseEvent e) {
JLabel l = (JLabel)e.getSource();
if(l.getBackground() == Color.YELLOW) {
l.setBackground(Color.ORANGE);
// Recupera el único carácter del JLabel
char letra = l.getText().charAt(0);
if(!evaluarLetra(letra)) {
areaDibujo.colgar();
}
// Muestra la palabra oculta
mostrarPalabra();
if(palabraOculta.equals(palabraSecreta)) {
JOptionPane.showMessageDialog(null,
"¡Felicitaciones, " + nombre +
", ganaste!", "Ahorcado",
JOptionPane.INFORMATION_MESSAGE);
iniciar();
} else if(areaDibujo.getPartes() == 6) {
JOptionPane.showMessageDialog(null,
"¡Lo lamento, " + nombre +
", perdiste!\nLa palabra era " +
palabraSecreta, "Ahorcado",
JOptionPane.ERROR_MESSAGE);
iniciar();
}
}
}
};
letras = new JLabel[27];
JPanel panelLetras = new JPanel();
panelLetras.setBounds(75, 60, 90, 270);
contentPane.add(panelLetras);
panelLetras.setLayout(new GridLayout(9, 3, 3, 3));
btnNuevaPalabra = new JButton("Elegir palabra");
btnNuevaPalabra.setActionCommand("");
btnNuevaPalabra.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
ingresarPalabra();
}
});
btnNuevaPalabra.setBounds(55, 23, 134, 23);
btnNuevaPalabra.setEnabled(true);
contentPane.add(btnNuevaPalabra);
int i = 0;
// Letras de 'A' hasta 'N'
while(i < 14) {
letras[i] = new JLabel("" + (char)('A' + i));
i++;
}
// Letra 'Ñ'
letras[i++] = new JLabel("" + 'Ñ');;
// Letras de 'O' hasta 'Z'
while(i < 27) {
letras[i] = new JLabel("" + (char)('@' + i));;
i++;
}
for(JLabel l : letras) {
l.setHorizontalAlignment(JLabel.CENTER);
l.setOpaque(true);
l.addMouseListener(clicLetra);
panelLetras.add(l);
}
iniciar();
}
void ingresarNombre() {
// Pide el nombre del jugador
String n = JOptionPane.showInputDialog(null,
"Ingresá tu nombre",
"Ahorcado", JOptionPane.PLAIN_MESSAGE);
if(n == null || n.equals("")) {
nombre = "ALGUIEN";
} else {
nombre = n.toUpperCase();
}
// Muestra el nombre del jugador
txtNombre.setText(nombre);
}
void ingresarPalabra() {
// Pide la palabra secreta
String palabra = JOptionPane.showInputDialog(null,
"Ingresá la palabra secreta para " + nombre +
"\n(sin espacios ni tildes)",
"Ahorcado", JOptionPane.PLAIN_MESSAGE);
if(palabra == null || palabra.equals("")) {
palabraSecreta = "";
} else {
// Pone la palabra en mayúsculas
palabraSecreta = palabra.toUpperCase();
// Oculta la palabra con guiones
ocultarPalabra();
// Inicia el juego
jugar();
}
}
void mostrarPalabra() {
String str = "";
for(char c : palabraOculta.toCharArray()) {
str += " " + c;
}
txtPalabra.setText(str);
}
void ocultarPalabra() {
int tam = palabraSecreta.length();
String str = "_";
while(--tam > 0) {
str += '_';
}
palabraOculta = str;
}
boolean evaluarLetra(char l) {
char[] secreta = palabraSecreta.toCharArray();
char[] oculta = palabraOculta.toCharArray();
boolean existe = false;
for(int i = 0; i < secreta.length; i++) {
if(secreta[i] == l) {
oculta[i] = l;
existe = true;
}
}
palabraOculta = new String(oculta);
return existe;
}
void jugar() {
for(JLabel l : letras) {
l.setBackground(Color.YELLOW);
}
// Muestra la palabra oculta
mostrarPalabra();
btnNombre.setEnabled(false);
btnNuevaPalabra.setEnabled(false);
}
void iniciar() {
for(JLabel l : letras) {
l.setBackground(Color.LIGHT_GRAY);
}
areaDibujo.iniciar();
txtPalabra.setText("");
btnNombre.setEnabled(true);
btnNuevaPalabra.setEnabled(true);
}
public static void main(String[] args) {
new Ahorcado().setVisible(true);
}
}
AreaDibujo.java
package ahorcado;
import javax.swing.JPanel;
import java.awt.Color;
import java.awt.Graphics;
/**
*
* @author Horacio Bono
*/
public class AreaDibujo extends JPanel {
private static final long serialVersionUID = 1L;
private int partes;
/**
* Create the panel.
*/
public AreaDibujo() {
setBackground(Color.WHITE);
setLayout(null);
iniciar();
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
new DibujoAhorcado(g, getSize(), partes);
}
public void iniciar() {
partes = 0;
repaint();
}
public void colgar() {
partes++;
repaint();
}
public int getPartes() {
return partes;
}
}
DibujoAhorcado.java
package ahorcado;
import java.awt.BasicStroke;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JOptionPane;
/**
*
* @author Horacio Bono
*/
public class DibujoAhorcado {
Dimension size;
public DibujoAhorcado(Graphics g, Dimension dim, int partes) {
this.size = dim;
String jpg = "Arbol450.jpg";
BufferedImage img = null;
try {
img = ImageIO.read(new File(jpg));
g.drawImage(img, 0, 0, null);
} catch (IOException e) {
JOptionPane.showMessageDialog(null,
"El archivo de imagen '" + jpg + "' no se encuentra");
}
Graphics2D g2d = (Graphics2D) g.create();
g2d.setStroke(new BasicStroke(3, BasicStroke.CAP_ROUND,
BasicStroke.JOIN_ROUND));
int ejeX = (int)(dim.width * .6);
int rama = (int)(dim.height * .44);
int y = (int)(dim.height * .47);
int h = (int)(dim.height * .15);
int h2 = h >> 1;
int h4 = h >> 2;
if(partes >= 0) {
// 0. Cuerda
g2d.drawLine(ejeX, rama, ejeX, y);
g2d.drawLine(ejeX, y, ejeX, y+h2);
}
if(partes > 0) {
// 1. Cabeza
g2d.drawOval(ejeX-h4, y+h2, h2, h2);
}
if(partes > 1) {
// 2. Cuerpo
y += h;
g2d.drawLine(ejeX, y, ejeX, y+h);
}
if(partes > 2) {
// 3. Brazo izquierdo
g2d.drawLine(ejeX, y, ejeX-h2, y+h);
}
if(partes > 3) {
// 4. Brazo derecho
g2d.drawLine(ejeX, y, ejeX+h2, y+h);
}
if(partes > 4) {
// 5. Pierna izquierda
y += h;
g2d.drawLine(ejeX, y, ejeX-h2, y+h);
}
if(partes > 5) {
// 6. Pierna derecha
g2d.drawLine(ejeX, y, ejeX+h2, y+h);
}
g2d.dispose();
}
}

Comentarios
Publicar un comentario