Proyecto Personal


Ramo: Diseno y Programacion orientada a objetos
Tema: El juego del colgado

Fecha: 13/ junio/ 2005imagen_colgado


Grupo:
Pierre Calonne [@] (2590061-8)
Nicolas Navarro [@] (2121052-8)
Ingo Steidl [@] (2590051-0)


Agenda



Descripcion general

La idea es crear un juego sencillo, pero divertido que ayude a matar el tiempo. Por eso hemos tomado el juego del colgado que consiste en adivinar una palabra para salvar a un hombre. El juego comtempla tres areas: la primera muestra la cantidad de caracteres que tiene la palabra, la segunda contiene las letras ya mensionadas llevando un registro de las correctas y las erradas y la tercera area tiene al "colgado". La palabra a adivinar puede ser seleccionada aleatoriamente o puede ser ingresada por otra persona.

atras


Requerimientos

Para poder realizar el juego del colgado fisicamente se necesita tres partes, o sea tres panels:
La idea de este juego fue poder implementarlo más adelante en un Celular, por esta razón no usamos botones y la lógica de funcionamiento esta orientada a un manejo por consola por parte del usuario, o sea, el recive información del programa a través de la pantalla y el envia información a través del teclado.

Eso signifca que tuvimos que implementar un KeyListener que escucha los events del teclado. Al recibir un tal event, o sea un Character, el programa tiene que chequear si la letra ingresada existe en la palabra buscada, y ademas - si existe - buscar las posiciones en donde existe la letra en la palabra. Por consecuencia hay que actualizar el campo que muestra la palabra en su estado actual. Cuando el usuario ingresa una letra falsa hay que actualizar el imagen del colgado y el campo que contiene las letras ya ingresadas. Esas tareas deben ser implementado por los paneles correspondientes, o sea por metodos dentro de ellos.

Estos metodos se llaman:
Al metodo setPalabra se pasa la entera palabra actual y ella tiene la funcion de imprimir esta palabra en el campo correspondiente. El metodo addCharacter recibe un solo Character lo cual adjunta en un arreglo de characters que ya fueron ingresadas por el usario. Despues imprime estas letras junto con la frase "Letras ya ingresadas". El metodo setImage recibe un Integer que representa la cantidad de intentos falsos. Este numero corresponde al elemento de un arreglo de imagenes, cuales muestras los diferentes pasos hasta que muera el colgado.

Nos decidimos por dos modos para jugar el juego:
En el modo para un jugador el programa selecciona al azar una palabra de un arreglo de Strings disponible en una propia clase. En el modo "2 Players" uno de los usuarios ingresa una palabra cual tiene que adivinar un segundo jugador. En ambos casos se necesita guardar las letras de la palabra en un arreglo de Characters. Eso se recomiende para faciltar las operaciones siguientes sobre la palabra que sean:
Por el Menu para elegir el modo del juego se requiere un KeyListener que reacciona solamente cuando escucha un "1" o un "2". Ingresando un "2" con el teclado se muestra un campo para ingresar la palabra. Por eso se usa igualmente un KeyListener. Con presionar la tecla "Enter" se manda la palabra a un metodo que motiva iniciar el juego.

Al inicio la ve "_" en la cantidad de letras que tiene la palabra buscada. Ingresando letras correctas se reemplaza el "_" correspondiente por la letra ingresada.

atras

Analisis - Casos de Uso

1.) iniciar el juego en modo "1 Player"
  1. el usuario ejecuta el programa ($ java Interfaz)
  2. el programa muestra el Interfaz para seleccionar el modo
    (presione "1" si quieres jugar contra el computador, presione "2" si quieres jugar contra un amigo)
  3. el usuario ingresa "1" con la tecla de su teclado
  4. el programa selecciona la palabra a adivinar
  5. el programa muestra la primera pantalla del juego
    (se ve tantos "_" como letras que contiene la palabra buscada)


2.) iniciar el juego en modo "2 Player"
  1. el usuario ejecuta el programa ($ java Interfaz)
  2. el programa muestra el Interfaz para seleccionar el modo
  3. el usuario ingresa "2" con la tecla de su teclado
  4. el programa muestra una pantalla para ingresar una palabra con el teclado
    (ingrese la palabra que tu amigo debe adivinar)
  5. el amigo del usuario ingresa una palabra con el teclado
  6. el programa la guarda y muestra la primera pantalla del juego


3.) ingresar una letra correcta
  1. el usuario presiona una tecla del teclado
  2. el programa chequea si la tecla fue una letra y busca las posiciones donde existe esta letra en la palabra buscada
  3. el programa reemplaza los "_" correspondientes con la letra ingresada
  4. el programa adjunta la letra en el campo de las "letras ya ingresadas"


3a.) ingresar la ultima letra correcta para solucionar la palabra
  1. el usuario presiona una tecla (de letra) del teclado
  2. el programa imprime la palabra buscada en el campo correspondiente
  3. el programa imprime la frase "felicitaciones! Usted ha ganado!" en el campo que contenía las letras ya ingresadas


4.) ingresar una letra falsa
  1. el usuario presiona una tecla del teclado
  2. el programa nota que la letra ingresada no existe en la palabra buscada
  3. el programa adjunta la letra en el campo "letras ya ingresadas"
  4. el programa actualiza el imagen del colgado en el campo correspondiente


4a.) ingresar la última letra falsa (ultimo intento)
  1. el usuario presiona una tecla (de letra) del teclado
  2. el programa imprime la palabra buscada en el campo correspondiente
  3. el programa muestra el último estado del imagen del colgado (muerto)
  4. el programa imprime la frase "Game Over!" en el campo que contenía las letras ya ingresadas

atras

Diseno - CRC

Clases existentes en el juego:
Interfaz
crea el menu que da instrucciones al usuario Menu
adjunta KeyListener al Frame MenuListener

Menu (extends JPanel)
imprime instrucciones para elegir el modo del juego

MenuListener (implements KeyListener)
recibe evento de teclado del usuario para elegir modo
(modo 1) pide una palabra MuchasPalabras
(modo 1) manda palabra Juego
(modo 2) produce la pantalla para ingresar palabra EnterWord
(modo 2) adjunta KeyListener a Frame EnterWordListener

EnterWord(extends JPanel)
imprime instrucciones para ingresar una palabra

EnterWordListener (implements KeyListener)
contiene KeyListener para escuchar eventos del teclado
manda palabra ingresada Juego

MuchasPalabras
selecciona palabra para jugar (random)
manda palabra Juego

Juego (implements KeyListener)
recibe letras ingresadas por el usario
chequear la existencia de las letras ingresadas
actualiza el campo de la palabra PalabraPanel
actualiza el campo de "letras ya ingresadas" CaracterPanel
actualiza el campo del imagen del colgado ColgadoPanel
se da cuenta cuando el juego esta terminado FinPanel

PalabraPanel (extends JPanel)
imprime arreglo de characters en el campo correspondiente

CaracterPanel (extends JPanel)
imprime arreglo de characters ya ingresadas en el campo correspondiente

ColgadoPanel (extends JPanel)
dibuja el imagen actual del colgado

FinPanel (extends JPanel)
reemplaza las letras ya ingresadas por una frase final

atras

Implementacion

Diagrama de Secuencia

Iniciar el juego con modo "2 Players":
diagrama de secuencia1
Comentarios:
Ingresar una letra falsa (no existe en la palabra):
diagrama de secuencia2


Diagrama de Clases

diagrama de clases

atras

Pruebas

El desarrollo del programa se realizó en la RCE con los recursos disponibles en ese lugar, por lo que es necesario que dispongas de la versión de java llamanda J2SE 1.5.0. la que te permitira realizar una correcta ejecución y una compilación sin problemas.

Por la falta de tiempo no fue posible probar el funcionamiento del juego con todos los versiones anteriores de Java.

atras

Documentacion

La documentacion se hace con el comando $javadoc -d <directorio> <nombre.java> .

Aqui puedes ver la documentacion de todas las clases de forma HTML:
atras

Anexos

Conclusiones:

No nos fue posible completar una versión que pudiese ser implementada en un telefono celular, por lo complejo que ese trabajo y la demanda de tiempo que involucra.

Mejoras:

Una mejora que puede ser implementada al momento de ser creada una vesion para un celular es dibujar las imagenes, en vez de usar unas prehechas por motivos de espacio disponible en equipos moviles.
Otra posibilidad es crear un applet que permita poner en disposición el juego a un mayor número de personas.

Problemas de diseno:

Uno de nuestros mayores problemas se nos presento al momento de implementar los KeyListener, ya que nuestro diseno implicaba crear o más bien usar un Listener diferente para distintas etapas del juego, o sea, a los mismos comandos le dabamos una interpretación distinta dependiendo de la etapa del juego en la que se encuentra. este problema fue solucionado creando objetos que solo eran Listener y los creabamos y adjuntabamos a nuestra conveniencia, es posible resolverlo de otra manera, pero no quisimos modificar demasiado nuestro diseño previo.
Otra gran problema fue el poder refrescar las imagenes que mostrabamos cada vez que se ingresaba una letra equivocada, este problema todavia no hemos solucinado.

atras