jump to navigation

Entrega juego Junio 3, 2008

Posted by beceoca in Posts normales.
1 comment so far

 

El pasado jueves entregamos el juego terminado. Vamos a contar un poco como lo hemos hecho y los problemas que nos hemos ido encontrando a lo largo de su programación.

 

Lo primero es que nuestro juego es el Brain Training. Partiendo de esta idea hemos creado un test con 15 preguntas en las que recorremos todos los aspectos para entrenar el todas las partes del cerebro.

Con las respuestas correctas hacemos un cálculo aproximado de la edad mental.

Para responder a cada pregunta disponemos, dependiendo del nivel de dificultad elegido de 17 o 13 segundos según hayamos escogido entre fácil y difícil respectivamente.

 

Para empezar el juego no elegimos la implementación de la algoritmia como se aconseja, ya que en nuestro caso las acciones a realizar dependen directamente de los botones que se pulsen y por tanto comenzamos por la parte de Swing.

 

Los principales problemas que nos encontramos a lo largo del juego se pueden resumir en estos cuantos:

- Cuántas clases crear. Esto nos llevó más de un quebradero de cabeza, tanto que hicimos que las clases heredaran de JFrame y así poder usar la clase entera como una ventana, y por lo tanto creamos una clase por ventana (en total 7). También podríamos haberlo echo de forma que en una sola ventana y mediante el método removeAll() quitáramos o pusiéramos componentes dependiendo de la parte del juego en que nos encontráramos, pero lo descartamos por falta de tiempo (al tener todo echo de la otra forma).

- Creación de una algoritmia capaz de decidir si la respuesta elegida es la correcta o no. Esto lo solucionamos creando un array de respuestas, ya que la pregunta y las posibles cuatro respuestas están contenidas en una sola imagen que no se puede modificar. Por lo tanto solo teníamos que comparar la respuesta pulsada (de la imagen i) con la posición i en el array de respuestas. Pensamos en realizar las respuestas de forma aleatoria, pero lo descartamos al decidir que las imágenes aparecerían en orden de dificultad creciente.

- Otro problema fue la forma de manejar el  timer, ya que no teníamos mayor experiencia con él que la vista en la teoría y en las prácticas. Esto lo solucionamos a última hora, y vimos que nuestro error no era otro que el de no crear el manejador para el timer que estábamos poniendo en marcha. Finalmente y tras mucho darle vueltas conseguimos controlarlo de forma que realizara la cuenta parcial de tiempo, es decir, cada 1 segundo.

- Otra de las cosas que nos quebraron la cabeza a la hora de programar el juego fueron los errores que el usuario podría cometer al introducir su nombre y su edad. En el nombre únicamente comprobamos que pongas al menos una letra o un número para que no se quede vacío, pero en la edad y para evitar problemas, decidimos controlar que lo único que se introdujese fueran números del 1 al 99. Par a informar de estos errores creamos varios JOptionPane con el error que hayas cometido.

- El ultimo problema que el juego nos dio fue el de crear un reproductor JMF que en un momento dado de la aplicación nos pusiera en marcha un sonido. Con el reproductor de la teoría no teníamos más que usar una parte de su código para conseguir lo que nos hacía falta.

Práctica 11 Junio 2, 2008

Posted by beceoca in Posts normales.
add a comment

 

En esta práctica se desarrollan los conceptos de eventos en Swing.

 

Para comenzar nos hacen una introducción de lo que vamos a realizar en la sesión, y es crear un programa controlado por la interfaz gráfica.

Hasta ahora los programas que hemos desarrollado no eran demasiado interactivas con el usuario, los únicos mecanismos que teníamos para comunicarnos con la aplicación eran: los argumentos de entrada, entrada estándar y el manejador de ventanas.

Necesitamos alguna forma de comunicarnos con la aplicación distinta a las mencionadas anteriormente, y para ello nos servimos de los componentes de swing que tienen esta utilidad.

 

En el primer apartado se pide realizar un programa de nombre Simple00GUI que presente una ventana con un botón, cada vez que se pulse el botón se imprimirá un mensaje por la salida estándar.

Únicamente debemos implementar el manejador del botón y añadir en su método actionPerformed la acción System.out.println(“Botón pulsado!”);

 

El siguiente apartado trata de implementar otra clase de nombre Simple01GUI que además de presentar un botón presente también una etiqueta. Cada vez que el botón sea pulsado debe cambiar el color de fondo de la etiqueta. No debemos olvidar añadir el código etiqueta.setOpaque(true); tras crear la etiqueta para que esta tenga color de fondo.

Para ello añadimos en el actionPerformed del botón la acción que mire el color al que está en ese momento la etiqueta y cambiarle por otro. Para ello debemos elegir un par de colores y crear un if-else para mirar que color tiene la etiqueta y cambiarlo (en nuestro caso hemos elegido los colores blanco y negro).

El algoritmo que realiza esta acción es el siguiente:

if(etiqueta.getBackground() == Color.white){

etiqueta.setBackground(Color.black);

}

else{

etiqueta.setBackground(Color.white);

}

}

 

El apartado tres consiste en crear otra clase que realice las mismas acciones anteriores, pero añadiendo otra más (cada vez que la tecla Enter sea pulsada se cambiará también el color de la etiqueta). En esta clase comenzaron nuestros problemas de hilos, ya que al atender al evento del botón se desatiende el evento de pulsado de la tecla Enter. Utilizando el método Thread.getName() antes de cambiar el color de la etiqueta vemos que hace caso únicamente al evento del botón.

En este apartado nos quedamos, ya que el resto del tiempo lo dedicamos a la realización de algunos asuntos relacionados con el juego.