El ahorcado (también llamado colgado) es un juego de lápiz y papel, en el que el objetivo es adivinar una palabra o frase.
A estas Alturas quiero suponer que muchos ya saben como es que funciona este juego, muchas veces como ayuda suele darse el tema al cual pertenece la palabra, en este caso no sera así.
Esta vez lo que hice fue un Ahorcado poco convencional referente al juego, en el cual la diferencia es que no se muestra el dibujo que va apareciendo por partes y al final se ahorca. Se me ocurrió la idea de simular el juego de Mortal Kombat haciendo que dos personajes muy conocidos se peleen entre si con imágenes gif.
Estas son Algunas de las imágenes que se pueden apreciar, también tiene la opción de agregar sonido pero eso es solo si el jugador lo desea, sino simplemente se puede jugar en silencio, ademas si se desea agregar varios sonidos como los golpes o fatalityes ya esta una función genérica en la cual la puedes mandar llamar cuando quieras indicando el nombre del archivo (incluir la ruta en caso de que el archivo de sonido no se encuentre en la misma carpeta), pues ya solo falta el código fuente que se puede compilar desde consola.
import java.awt.*;
import java.awt.Desktop;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.Random;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
public class Ahorcado extends JFrame implements ActionListener,KeyListener {
private Toolkit kit = Toolkit.getDefaultToolkit();
private int contador = 0;
public Image imagenFondo = kit.getImage("Imagen.jpg");
public JLabel label = new JLabel();
public JLabel labelLlenado;
public JLabel Dibujo = new JLabel(new ImageIcon(getClass().
getResource("scorpions1.gif")));
public JLabel Dibujo2 = new JLabel(new ImageIcon(getClass().
getResource("Liu_kang.gif")));
public JLabel logo = new JLabel(new ImageIcon(getClass().
getResource("logo.gif")));
public JLabel titulo = new JLabel();
public int X = 100;
public int Y = 300;
public int largo = 350;
public int ancho = 100;
public JMenuBar barra = new JMenuBar();
public JMenu menu2 = new JMenu("Archivo");
public JMenu menu = new JMenu("Categorias");
public JMenu menuIformacion = new JMenu("Ver");
public JMenuItem item[] = new JMenuItem[6];
public String palabrasPeleadores[] = {"scorpions", "subzero","kano","sonya",
"cage","rayden","cyrax","sector",
"ermac","nightwolf","jax","borrachio",
"boraicho","reptile","kunglao",
"kitana","smoke","jade","kabal",
"stryker"};
public String palabrasBoss[] = {"goro", "shaokahn","shangtsung","kintaro",
"sheeva", "baraka","motaro","shinnok",
"quanchi","blaze","mileena","sindel"};
String pantalla2;
static String palabra_ = null ;
char []palabras_display;
char []palabra_actual;
int randon;
char dato;
int error = 0;
panel inicio = new panel("inicio.jpg");
panel p = new panel("mortal.jpg");
public Ahorcado() {
initComponents();
setBounds(150, 50, 800, 640);
setTitle("NIMADRES");
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
setResizable(false);
repaint();
setIconImage(getIconImage());
}
public void actionPerformed(ActionEvent e) {
if(e.getSource().equals(item[0])){
Random rnd = new Random();
palabra_=palabrasPeleadores[rnd.nextInt(palabrasPeleadores.length)];
palabra_actual = palabra_.toCharArray();
palabras_display = new char[palabra_actual.length];
for(int i = 0;i < palabras_display.length; i++){
palabras_display[i] = '_';
}
pantalla2 = String.valueOf(palabras_display);
System.out.println(palabra_);
labelLlenado.setText(pantalla2);
menu.setEnabled(false);
}
if(e.getSource().equals(item[1])){
Random rnd = new Random();
palabra_ = palabrasBoss[rnd.nextInt(palabrasBoss.length)];
palabra_actual = palabra_.toCharArray();
palabras_display = new char[palabra_actual.length];
for(int i = 0;i < palabras_display.length; i++){
palabras_display[i] = '_';
}
pantalla2 = String.valueOf(palabras_display);
System.out.println(palabra_);
labelLlenado.setText(pantalla2);
menu.setEnabled(false);
}
if(e.getSource().equals(item[2])){
add(p);
inicio.setVisible(false);
labelLlenado.setText("");
error = 0;
menu.setEnabled(true);
titulo.setIcon(null);
titulo.setText("");
Dibujo.setIcon(null);
Dibujo2.setIcon(null);
}
if(e.getSource().equals(item[3])){
if(contador == 0)
playSound("audio.wav");
contador++;
}
if(e.getSource().equals(item[4])){
try {
if (Desktop.isDesktopSupported()) {
Desktop desktop = Desktop.getDesktop();
if (desktop.isSupported(Desktop.Action.BROWSE)) {
desktop.browse(new
URI("http://programacionparacoccidio.blogspot.mx"));
}
}
} catch (URISyntaxException uRISyntaxException) {
} catch (IOException iOException) {
}
}
if(e.getSource().equals(item[5])){
System.exit(0);
}
repaint();
}
public void keyTyped(KeyEvent e) {
}
public void keyReleased(KeyEvent e) {
}
public void keyPressed(KeyEvent e) {
if(error != 6 && !Ganador()){
char teclado = e.getKeyChar();
boolean encontrado = false;
dato = teclado;
for(int i=0;i<palabra_actual.length;i++) {
if(palabra_actual[i]==dato){
palabras_display[i]=dato;
encontrado = true;
}
}
if(!encontrado)
error ++;
pantalla2=String.valueOf(palabras_display);
labelLlenado.setText(pantalla2);
System.err.println(error);
Ahorcar();
Ganador();
}
}
public Image getIconImage() {
Image iconoVentana = Toolkit.getDefaultToolkit().
getImage(ClassLoader.getSystemResource("icono.png"));
return iconoVentana;
}
public void initComponents() {
p.setLayout(null);
labelLlenado = new JLabel();
labelLlenado.setBounds(X, Y, largo, ancho);
labelLlenado.setForeground(Color.red);
labelLlenado.setFont(new Font("chiller", 1, 60));
titulo.setBounds(250, 100, largo, ancho);
titulo.setForeground(Color.red);
titulo.setFont(new Font("chiller", 1, 60));
p.add(labelLlenado);
Dibujo.setBounds(500, 200, 200, 200);
Dibujo2.setBounds(400, 200, 200, 200);
logo.setBounds(350, 5, 50, 50);
p.add(logo);
p.add(titulo);
p.add(Dibujo2);
p.add(Dibujo);
Dibujo2.setVisible(false);
Menu();
add(inicio);
}
public void Menu() {
item[0] = new JMenuItem("Peleadores");
item[1] = new JMenuItem("Boss");
item[2] = new JMenuItem("Nuevo");
item[3] = new JMenuItem("Musica de fondo");
item[4] = new JMenuItem("<html><a href="+""+">Sitio Web</a></html>");
item[5] = new JMenuItem("Salir");
menu2.add(item[2]);
menu2.add(item[3]);
menu2.add(item[5]);
menu.add(item[0]);
menu.add(item[1]);
menuIformacion.add(item[4]);
barra.add(menu2);
barra.add(menuIformacion);
barra.add(menu);
add(barra, BorderLayout.NORTH);
item[0].addActionListener(this);
item[1].addActionListener(this);
item[2].addActionListener(this);
item[3].addActionListener(this);
item[4].addActionListener(this);
item[5].addActionListener(this);
addKeyListener(this);
menu.setEnabled(false);
}
public static synchronized void playSound(final String url) {
new Thread(new Runnable() {
public void run() {
try {
Clip clip = AudioSystem.getClip();
AudioInputStream inputStream = AudioSystem.
getAudioInputStream(Main.class.getResourceAsStream(url));
clip.open (inputStream);
clip.start();
}
catch (Exception e) {
System.err.println(e.getMessage());
}
}
}).start();
}
public void Ahorcar(){
Dibujo.setBounds(500, 200, 200, 200);
switch(error){
case 1:
Dibujo.setIcon(new ImageIcon(getClass().
getResource("scorpions1.gif")));
break;
case 2:
titulo.setIcon(new ImageIcon(getClass().
getResource("fight.gif")));
Dibujo.setIcon(new ImageIcon(getClass().
getResource("scorpions1.gif")));
Dibujo2.setIcon(new ImageIcon(getClass().
getResource("Liu_kang_1.gif")));
Dibujo2.setVisible(true);
break;
case 3:
Dibujo.setIcon(new ImageIcon(getClass().
getResource("scopions2.gif")));
Dibujo2.setIcon(new ImageIcon(getClass().
getResource("luikangGolpeado.gif")));
break;
case 4:
Dibujo.setIcon(new ImageIcon(getClass().
getResource("scorpions3.gif")));
Dibujo2.setIcon(new ImageIcon(getClass().
getResource("liu_KangGolpe.gif")));
break;
case 5:
Dibujo.setIcon(new ImageIcon(getClass().
getResource("scorpionsPerdiendo.gif")));
titulo.setIcon(new ImageIcon(getClass().
getResource("finishHim.gif")));
Dibujo2.setIcon(new ImageIcon(getClass().
getResource("Liu_kang_1.gif")));
break;
case 6:
try{
Thread t = new Thread(new fatalty());
t.start();
break;
}catch(Exception e){}
break;
default:
Dibujo.setIcon(new ImageIcon(getClass().
getResource("scorpions1.gif")));
}
}
public boolean Ganador(){
for(int i = 0; i < palabras_display.length; i ++) {
if(palabras_display[i] != palabra_.charAt(i))
break;
if(i == palabras_display.length - 1){
Dibujo.setIcon(new ImageIcon(getClass().
getResource("scorpionsWins.gif")));
if(error > 1)
Dibujo2.setIcon(new ImageIcon(getClass().
getResource("liuMuerto.gif")));
titulo.setIcon(null);
titulo.setText("YOU WIN!");
Dibujo.setBounds(500, 160, 200, 200);
return true;
}
}
return false;
}
class fatalty implements Runnable{
int x = 2;
public void run() {
do{
try {
titulo.setIcon(new ImageIcon(getClass().
getResource("fatality_1.gif")));
Dibujo.setBounds(350, 50, 350, 300);
Dibujo2.setVisible(false);
Dibujo.setIcon(new ImageIcon(getClass().
getResource("_fatality_.gif")));
repaint();
Thread.sleep((x--)*1795);
if(x == 0){
/*Dibujo.setBounds(350, 200, 200, 200);
Dibujo.setIcon(new ImageIcon(getClass().
* getResource("liukangWin.png")));*/
break;
}
} catch (InterruptedException ex) {
Logger.getLogger(Ahorcado.class.getName()).
log(Level.SEVERE, null, ex);
}
}while(true);
}
}
class panel extends JPanel {
private Image imagen;
public panel() {
}
public panel(String nombreImagen) {
if (nombreImagen != null) {
imagen = new ImageIcon(getClass().
getResource(nombreImagen)).getImage();
}
}
public panel(Image imagenInicial) {
if (imagenInicial != null) {
imagen = imagenInicial;
}
}
public void setImagen(String nombreImagen) {
if (nombreImagen != null) {
imagen = new ImageIcon(getClass().
getResource(nombreImagen)).getImage();
} else {
imagen = null;
}
repaint();
}
public void setImagen(Image nuevaImagen) {
imagen = nuevaImagen;
repaint();
}
public void paint(Graphics g) {
if (imagen != null) {
g.drawImage(imagen, 0, 0, getWidth(), getHeight(), this);
setOpaque(false);
} else {
setOpaque(true);
}
super.paint(g);
}
}
}
Ahora solo es cuestión de agregar la clase Principal del mismo juego en otro archivo (Main.java)
import javax.swing.UIManager;
public class Main{
public static void main(String[] args) {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
java.awt.EventQueue.invokeLater(new Runnable(){
public void run(){
new Ahorcado().setVisible(true);
}
});
}
catch(Exception e) {}
}
}
Ya para finalizar les dejo las imágenes que yo utilice para hacer este juego y el audio lo dejare en un link de google docs. Link del Audio