Nuestro juego es el ahorcado. Decidimos hacer el ahorcado a raíz de la práctica 2, en el que nos pedían que hiciésemos uno según unas características determinadas, ese fue el que entregamos en la primera parte, pero después decidimos hacer un cambio radical. Cuando dimos swing y empezamos a aprender las interfaces gráficas, quisimos que el juego fuese totalmente diferente a lo que era, así que lo modificamos muchas veces, quedando como resultado esto:
PANTALLA INICIAL
Al ejecutar el juego, se inicia una pantalla con la imagen de Simpson.jpg (un ImageIcon). Sobre la imagen hay 4 botones JButton:
- Créditos, se muestran los créditos del juego. En el escuchador del FrameAhorcado hay un
If( evento= =”CREDITOS”)
{
(Llamamos a la clase que se encarga de eso)
}
Para que en el FrameAhorcado salga otra ventanita aparte,no hemos utilizado un Frame, sino que hemos creado unas clases internas que heredan de JDialog. El JDialog puede recibir como argumento un JFrame, entonces, en las clases de Instrucciones y Créditos, tenemos un método que se encarga de devolvernos un JFrame con un JPanel ya relleno con los elementos que queremos mostrar. El constructor de la clase Creditos, se encarga de leer desde un fichero externo el texto que presentaremos como créditos. Para salir tenemos que dar al botón Aceptar o pinchar el aspa.
- Instrucciones, la explicación de cómo jugar. Escribimos en un fichero las instrucciones que más tarde queremos que se vean cuando pulsemos este botón mediante la clase Instrucciones. Funciona igual que la clase anterior pero con diferente dimensión y texto. Para salir hay que pinchar en Aceptar o en el aspa.
- Opciones, aparece una ventana pequeña la cual hemos impedido que se pueda maximizar (con setResizable()) para evitar que se pierda el orden y la buena apariencia.También hemos bloqueado la opción de cerrar del aspa con frame.setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHIN G_ON_CLOSE); así, la única manera de cerrar esta ventana, es pulsar el botón
Aceptar. Lo hemos hecho así para confirmar las opciones de configuración, de lo contrario, nos quedaríamos con la configuración por defecto y no con la que el usuario desea.
En la ventana se muestra los elementos en el siguiente orden:
· Una ventana desplegable, JComboBox, con diferentes temas a elegir para la palabra secreta. Los temas son: arte, ciencia, deportes, música, personajes, tecnología, programación y otros. De estos se puede marcar uno. Al abrir la ventana, por defecto se marca el tema de arte en la ventana desplegable.
· Se puede elegir la dificultad entre fácil, normal, difícil y muy difícil. Se elige gracias a 4 JRadioButton mostrando cuatro pequeños círculos, en los que si pinchas se rellenan con un punto negro. Sólo se puede elegir uno de los 4, por esta razón elegimos JRadioButton.
· Un botón Aceptar, JButton, para aceptar las opciones establecidas por el jugador.
- Iniciar Juego, si es pulsado inicia el juego. Al pulsarlo aparece una ventana que se compone de varias partes.
à PANTALLA DEL JUEGO
Estas partes están colocadas en columna obedeciendo el orden establecido por un GridLayout:
- Lo siguiente se logra gracias a la clase PanelBorder, el cual coloca un borde en un panel. En letras rojas colocamos JUGUEMOS!! poniendo un nombre al borde del panel. Mientras que el borde no se aprecia porque está en negro y no se distingue con el fondo.
- Botón denominado Menú principal, con el que puedes volver a la pantalla inicial. En el momento que el jugador esté situado en dicha ventana, se puede realizar todas las operaciones que ésta ofrece.
- La imagen del muñeco ahorcado es un ImageIcon. El juego está compuesto de 7 imágenes del ahorcado del clásico juego, y una carita feliz en el caso de haber ganado la partida. La primera vez que aparece, cuando empieza la partida, tan solo sale la soga. Si se pulsa una letra errónea, que no se encuentra en la palabra secreta, sale también la cabeza, después la cabeza y el cuerpo,… y así sucesivamente hasta completar todo su cuerpo, momento en el que se habrá perdido la partida.
- Un JLabel en el que se encuentra la palabra a adivinar oculta entre los asteriscos. Los asteriscos son de color blanco para que resalten sobre el fondo negro.
- Un JButton en amarillo, al pulsarlo se invoca a un objeto de la clase CompletaPalabra, apareciendo una ventana donde puedes introducir la palabra que se cree que es la correcta. Esta ventana sólo se cierra en el momento que se pulsa el enter. En el botón se puede ver escrito ¿sabes la solución? En la pantalla de juego, cuando se pulsa cualquier botón, esta pantalla se coloca sobre la de la palabra secreta, sólo está debajo cuando se inicia una nueva partida. De momento, está opción está deshabilitada.
- Un borde blanco que rodea el teclado en el que aparece escrito TECLADO en letras blancas. Esto se consigue gracias al PanelBorder.
- Y un array con 30 JButton, con las 27 letras del abecedario en color rojo, un botón para iniciar una nueva partida, otro para resolver la palabra y otro para salir del juego, éstos tres últimos en color negro. Hemos utilizado el constructor del JButton que permite poner un nombre y un icono al botón. Para que las letras se quedasen centradas, se empleó el método de JButton setHorizontalAlligment(int posicion);
à INTENTOS
En cada intento puedes pulsar una tecla correspondiente a una letra.
- Si la letra se encuentra en la palabra, la letra se descubre en la palabra de asteriscos en su correspondiente posición, actualizando el JLabel que la contiene.
- Si la letra no está en la palabra secreta, pierdes una oportunidad, y la imagen del ahorcado se actualiza, colocándose un miembro más del cuerpo del pobre muñeco.
- Si pulsas una letra ya pulsada anteriormente, no hace nada.
Pulsando el botón Nueva Partida, comienzas una nueva partida del ahorcado directamente preparado para jugar, sin aparecer en la pantalla de bienvenida.
Con el botón Resolver, se desvela la palabra secreta hayamos perdido, ganado o nos encontremos en medio de la partida, pero en el momento en que la pulses, ya no podrás seguir jugando con esa palabra, el jugador estará obligado a pulsar Nueva Partida si quiere seguir jugando.
Con el botón Salir, se sale de la aplicación cerrándose la ventana del ahorcado.
à PERDER Y GANAR
Se pierde si en los 6 intentos no has conseguido resolver la palabra.
De forma contraria, se gana si consigues resolver la palabra antes de que el muñeco aparezca totalmente ahorcado, es decir, antes de que se acaben los 6 intentos. Entonces, en el lugar en el que está la imagen del ahorcado, se verá una carita contenta en señal de felicitación.
Se puede jugar tantas partidas como se quiera pulsando el botón correspondiente a Nueva Partida.
à IMPLEMENTACIÓN DEL JUEGO. CLASES.
El juego se compone de las siguientes clases:
- Compara, implementa el algoritmo del ahorcado. En él situamos los arrays de String para cada tema con las posibles palabras a jugar, busca una palabra aleatoria, se escoge la palabra según la dificultad elegida (la dificultad se escoge acorde al número de letras de la palabra), oculta la palabra entre asteriscos,…
- FrameAhorcado, es la clase principal, la que engloba todas las clases. Se encarga de la interfaz gráfica de usuario. Contiene 4 clases internas: FrameConfigura, FrameCreditos, FrameInstrucciones y Configuracion. Las tres primeras llaman al método getFrame() con un objeto correspondiente a la clase Configura, Creditos e Instrucciones, respectivamente. Los 3 heredan de JDialog. Mientras que la clase interna Configuración, contiene a su vez otra clase interna llamada EscuchaBoton.
Se colocaron clases internas con el fin de reutilizar el código y buscando lo más cómodo y fácil para programar. Si no hubiésemos hecho clases internas, sería más complicado de programar. Al estar interna, podemos acceder directamente a los atributos y métodos de la clase que la contiene. En cambio, desde una clase externa, no se puede acceder a los atributos de otra clase de una forma tan sencilla, ya que siguiendo la encapsulación, están con el modificador de acceso private.
- Instrucciones, lee desde un fichero externo (llamado instrucciones.txt), las instrucciones que aparecen al pulsar dicho botón de la pantalla inicial.
- Configuración, se encarga de sacar las opciones de la pantalla de bienvenida, puedes elegir la dificultad y el tema del que tratará la palabra a adivinar.
- ComparaPalabra, hace que aparezca una ventana para resolver la palabra oculta. Si la palabra es correcta, se gana automáticamente. De lo contrario, se pierde. En estos momentos se encuentra deshabilitado.
- Créditos, la clase créditos es para mostrar lo que está escrito en el fichero créditos.txt. Al igual que la clase Instrucciones carga lo que vamos a mostrar por pantalla desde un fichero externo.
- PanelBorder, hereda de TitledBorder. En esta clase hemos construido 6 constructores diferentes para formar bordes según lo deseado en cada momento.
1. Constructor en el que se introduce el color del borde y la palabra que aparecerá en dicho borde.
public PanelBorder(Color color,String nombre)
{
super(new LineBorder(color),nombre);
}
2. Constructor al que se le pasa el color del borde, la anchura del borde y la palabra en él escrita.
public PanelBorder(Color color,int ancho,String nombre)
{
super(new LineBorder(color, ancho),nombre);
}
3. Constructor al que se le pasa el color del borde, el color de la letra de la palabra que se va a escribir en el borde y la palabra que desees colocar.
{
super(new LineBorder(color),nombre);
super.setTitleColor(letra);
}
4. Constructor al que se le añade a los anteriores el ancho del borde.
public PanelBorder(Color color,Color letra,int ancho,String nombre)
{
super(new LineBorder(color, ancho),nombre);
super.setTitleColor(letra);
}
5. Constructor al que se le pasa lo del anterior pero en lugar de meter el color de la letra, pasamos la posición.
public PanelBorder(Color color,int ancho,int posicion,String nombre)
{
super(new LineBorder(color, ancho),nombre);
super.setTitleJustification(posicion);
}
6. Y el último al que se le pasan todos los parámetros anteriores.
public PanelBorder(Color color,Color letra,int ancho,int posicion,String nombre)
{
super(new LineBorder(color,ancho),nombre);
super.setTitleColor(letra);
super.setTitleJustification(posicion);
}
à RELACIÓN ENTRE CLASES.
Ver en página anexa por favor.
à VENTANA DE COMANDOS.
Para compilar el juego las imágenes (Homer y Bart, los distintas fases del ahorcado, las diferentes imágenes para los botones y la carita contenta) y los códigos fuente deben estar en la misma carpeta. Así, una vez que se haya colocado en la ventana de comandos la ruta en la que se encuentra dicha carpeta, escribir la sentencia javac *.java para compilar todos los archivos de una sola vez. Entonces, se formarán los .class de cada una de las clases. Una vez hecho esto, se ejecuta mediante java FrameAhorcado. Después, aparecerá la ventana principal del juego en el lado izquierdo de la pantalla del ordenador, y todo preparado para comenzar la partida.
à PROBLEMAS.
- Tuvimos muchos problemas sobre todo al comenzar desde cero.
- Los Escuchadores.
- Con el botón de Nueva partida: A la hora de activar este botón fue bastante complicado. Al principio cada vez que se le pulsaba, aparecía una partida nueva pero en un nuevo frame, de forma que cada vez que le pulsases se iban acumulando las ventanas una encima de otra. Esto no era lo que nosotros queríamos. Para llegar a que saliese en la misma ventana que en la que empezamos la primera partida, tuvimos que crear varios métodos, el NuevaPartida(), Panel(), Limpia(), …
- Para actualizar los paneles.
- Enganchar la GUI con el algoritmo del juego.
- Lectura externa desde un fichero.
à MEJORAS.
Siempre se puede mejorar. De hecho, podríamos estar años con él y años dedicaríamos a colocar mejoras, solventar errores,… Entonces, es imposible evitar que surja algún problema en algún momento de vida del juego, aunque nosotros hemos intentado controlarlos y dejarlo lo mejor posible.
Ideas que han ido surgiendo para innovar el juego a raíz de enseñárselo a gente y de jugar nosotros fueron:
- Pistas, dar pistas sobre la palabra a adivinar.
- Temas, colocar más temas a elegir.
- Más oportunidades para acertar la palabra.
à CONCLUSIÓN.
En un principio no íbamos a hacer el juego, porque necesita emplear muchísimo tiempo y queremos aprobar el mayor número posible de asignaturas, pero cambiamos de opinión con la práctica 2, y nos decidimos a ello.
Programar el juego nos ha servido, más que nada, a aprender a utilizar SWING y a surfear por el API. A cualquier duda, mirábamos en el API. Fue un gran amigo nuestro. El mayor problema era el idioma, pero entre los dos y el diccionario como nuestro aliado, después de largos ratos, se podían sacar cosas en claro.
Hemos aprendido mucho sobre SWING.
Para mostrar como ha ido evolucionando nuestro juego y su código, y nosotros con él, hemos hecho “un viaje” en el tiempo. En el anexo2 se puede apreciar los pasos que hemos dado, desde nuestro aprendizaje a la actualidad.
Descargar Código y Documentación
Descargar ejecutable ( Ahorcado.jar)
PD: Para ejecutar el juego se necesita que este instalado JVM en tu ordenador. Si no lo tienes lo puedes descargar de aqui.








) dentro de este campo, fue realizar una clase en la que se ignorase el mensaje de cierre del manejador de ventana. En un principio pensamos en utilizar el método descrito en la práctica setDefaultCloseOperation(), pero después caímos en la cuenta de la tontería que íbamos a hacer. Para ignorar el mensaje de cierre, simplemente evitamos que llegue ese mensaje quitando la sentencia que lo provoca, es decir, quitando frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); La diferencia es que ahora, puedes cerrar la ventana pinchando en el aspa, pero el programa sigue corriendo, sigue ejecutado. Para pararlo hay que pulsar ctrl+ C.

“);

