Ejercicio 1. Desarrollar un pequeño juego de tiro al blanco. Paso 1

Anuncio
Examen Curso 2001-2002. Convocatoria de Febrero
Página 1
Ejercicio 1. Desarrollar un pequeño juego de tiro al blanco.
Este ejercicio se divide en dos partes con el fin de que el alumno no intente afrontarlo en su
totalidad ya que podría entrañar bastante dificultad. De esta manera la primera parte sirve como
base de la segunda y con la primera completada el alumno conseguiría un notable en este
ejercicio. Si se quiere conseguir la máxima nota, se tendrá que realizar la segunda parte (cosa no
muy difícil ya que sólo hay que añadir ciertos detalles a lo ya implementado). Si se intenta hacer
la segunda parte sin acabar la primera, el ejercicio resultará mucho más difícil de realizar.
Paso 1. Introducción (Primera Parte)
Este juego consiste en acertar con el ratón a una serie de “proyectiles” que van cayendo desde
arriba y evitar así que los proyectiles alcancen su “objetivo” (representado con una línea recta
dibujada debajo). Para interceptar a los proyectiles, bastará con situar el ratón encima de ellos,
entonces el cursor del ratón cambiará indicando que se puede hacer blanco pulsando el botón del
ratón.
En la Figura 1 se muestra una imagen de la
ventana de la aplicación que hay que
realizar en la primera parte. Se aconseja a
los alumnos que practiquen con el fichero
Proyectil_1.exe que se les proporciona.
Hay que ejecutarlo las veces que haga falta
hasta que se esté seguro de saber que tiene
que hacer el programa. Eso significa jugar
con la aplicación probando todos los
posibles casos.
Figura 1. Ventana de Proyectil_1
Cuando el alumno se haya familiarizado con el funcionamiento del programa, debería abrir el
Visual Basic y crear un proyecto Proyectil.vsp. Se recomienda encarecidamente que cada vez que
el alumno consiga algo nuevo (creación de la interfaz, conseguir que se mueva el proyectil, etc),
haga una copia de seguridad en otro directorio.
El ejercicio puede parecer complicado si se trata de abordar en su conjunto sin tener una idea
clara de los pasos a seguir. Para evitar este problema se van a enumerar una serie de pasos que
facilitan la resolución del ejercicio. Evidentemente no es imprescindible seguirlos, pero es la
manera más rápida y más directa de hacerlo, porque tiene separados todos los problemas que
presenta el ejercicio. Esto hace que en cada paso haya que solventar problemas muy sencillos.
Además se debe tener en cuenta que el criterio de corrección está basado en estos pasos.
Examen Curso 2001-2002. Convocatoria de Febrero
Página 2
Paso 2. Creación de la interfaz gráfica
En este apartado el alumno SÓLO tiene que preocuparse de conseguir una interfaz gráfica con el
mismo aspecto que la dada en la Figura 1 (no hace falta programar todavía ningún evento). Los
elementos de los que consta son los siguientes:
-
Un pictureBox en el que se dibujarán los proyectiles y la línea que representa el
límite. Los proyectiles hay que representarlos como shapes con forma circular.
-
Una caja de texto indicando cuántos proyectiles se han alcanzado.
-
Otra caja de texto en la que hay que ir poniendo los proyectiles que han llegado a
la línea del límite permitido.
-
Varios etiquetas explicando el significado de cada caja de texto.
-
Tres botones: uno para empezar/parar, otro para resetear el juego y que todo
vuelva al inicio, y otro para salir de la aplicación.
-
Por supuesto para conseguir el movimiento de los proyectiles hace falta un timer.
Paso 3. Inicialización
En este paso hay que empezar a inicializar ciertos objetos. Lo principal que tiene que conseguir
el alumno es poder mover el proyectil. De momento sin ninguna lógica, simplemente que se
mueva en la dirección correcta. Para conseguir esto hay que inicializar antes ciertos controles:
-
El pictureBox hay que escalarlo desde el código y las coordenadas irán desde el
(0, 0) hasta el (100, 100)
-
El intervalo del timer será de 200 milisegundos.
A continuación sólo queda mover el proyectil (usar un valor de 2 unidades para ir incrementado
la posición). Antes de pasar a los siguientes apartados el alumno debería haber conseguido esto
último. Es mejor realizarlo ahora cuando el ejercicio acaba de comenzar.
Paso 4. Botones
Aquí se describe la funcionalidad de los botones:
-
Start/End: este botón simplemente activará o parará el timer del juego. Hay que
tener en cuenta que el texto del botón también cambia según esté parado o no el
juego.
-
Salir: terminar la aplicación.
-
Reset: empezar de nuevo el juego. Esto implica poner a 0 las cajas de texto que
llevan los contadores, poner el timer otra vez a 200 ms y llamar a una función que
calcule una nueva posición para el proyectil. Esta función nuevaPosicion() tiene
que posicionar el proyectil otra vez en la parte superior del pictureBox. La
coordenada ‘Y’ la conocemos gracias al margen del pictureBox pero la
coordenada ‘X’ hay que sacarla aleatoriamente (para que el proyectil no salga
siempre en la misma posición). Sabiendo que el pictureBox mide 100 y la función
Rnd() te devuelve un número aleatorio entre 0 y 1, se puede calcular la nueva
coordenada ‘X’ (hay que tener en cuenta la anchura del proyectil).
IMPORTANTE: siempre que se use Rnd(), en la línea anterior hay que poner la
instrucción Randomize.
Examen Curso 2001-2002. Convocatoria de Febrero
Página 3
Paso 5. Detección de la línea límite
Cada vez que se mueve el proyectil hay que mirar a ver si ha alcanzado la línea límite. Para eso
habrá que hacer una función detectLine() en la cuál se compara la posición del proyectil con la
coordenada ‘Y’ de la recta. Si se detecta impacto, entonces hay que incrementar la caja de texto
que lleva la cuenta de impactos. Además, el juego sólo tiene 3 oportunidades, por lo que si se
detecta que han ocurrido 3 impactos hay que parar el juego y sacar unos mensajes por pantalla
(mirar el fichero Proyectil_1.exe para ver los mensajes).
Paso 6. Control del Timer
El juego tiene nivel de dificultad, así que cada 5 segundos hay que acelerar la velocidad del
juego. Para ello se usará un segundo timer el cual tendrá que ser inicializado a 5000
milisegundos. Para acelerar el juego, sólo habrá que decrementar el timer de movimiento en el
evento de este segundo timer. Por ejemplo, decrementar en 20 milisegundos el timer del
movimiento. Cuidado con que el timer del movimiento no llegue a 0 porque en ese caso el juego
se pararía, para arreglarlo se puede dejar de decrementar cuando el timer llegue a un valor
mínimo de 20.
Paso 7. Eventos del ratón
Para terminar de desarrollar el juego sólo queda por gestionar los eventos del ratón para la
interceptación de los proyectiles. Hace falta programar 2 eventos de ratón: el de posición
(MouseMove) y el de botón pulsado (Click).
-
MouseMove: con este evento hay que testear si las coordenadas del ratón
coinciden con las coordenadas del proyectil (hay que usar las propiedades Top,
Left, Height y Width del shape). En ese caso hay que cambiar el cursor del ratón
(el puntero de cruz es el número 2).
-
Click: si se pulsa el botón del ratón (y además se ha detectado que el ratón está
encima del proyectil) entonces hay que incrementar la caja de texto que lleva la
cuenta del número de proyectiles alcanzados y llamar a la función que calcula una
nueva posición del proyectil.
Paso 8. Introducción (Segunda Parte)
Si el alumno ha conseguido realizar todo lo que se pedía en la primera parte, entonces está en
condiciones de hacer esta segunda parte que no es más que una ampliación del juego para que
aparezcan más proyectiles. Tal y como aparece en la Figura 2, el aspecto de la interfaz es el
mismo salvo que en lugar de un proyectil, ahora aparecen tres proyectiles.
Examen Curso 2001-2002. Convocatoria de Febrero
Página 4
Figura 2. Ventana de Proyectil_2
Para ver cómo funciona el programa, el alumno puede ejecutar el archivo Proyectil_2.exe que se
facilita. Como se puede comprobar rápidamente, el funcionamiento es exactamente el mismo
pero con tres proyectiles. Entonces, lo que antes se hacía con un solo shape (por ejemplo la
función detectLine()) ahora hay que hacerlo para los tres shapes.
De todas formas, no todo es tan simple como copiar tres veces lo que ya se hacía antes. Aquí se
dan unas pistas para orientar al alumno hacia una posible solución (se puede hacer con matriz de
controles o con controles independientes, a elección del alumno):
-
La función nuevaPosicion() cambia un poco y ahora necesita un argumento de
entrada en el que se le indica el proyectil (1, 2 ó 3) que hay que cambiar de posición.
nuevaPosicion (numero As Integer)
-
Ahora cuándo se pulsa el botón del ratón, no se sabe sobre qué proyectil está situado
el cursor. Para ello habrá que crear una variable global (de nombre marcado por
ejemplo) en la que se guardará el proyectil (1, 2 ó 3) que se está apuntando. Gracias a
esta variable al pulsar el botón se puede llamar a la función de forma:
nuevaPosicion(marcado).
Descargar