Ejercicio 1. Desarrollar una versión del juego Memoria.

Anuncio
Examen Curso 2001-2002. Convocatoria de Febrero
página 1
Ejercicio 1. Desarrollar una versión del juego Memoria.
En este ejercicio se debe realizar un programa en Visual Basic cuyo objetivo es descubrir
parejas de imágenes ente 16 botones numerados (CheckBox). Es necesario que haya dos
competidores, y el juego se desarrolla destapando por turno dos iconos que si coinciden,
permiten al mismo jugador destapar otros dos iconos dentro de su turno, y se suma un punto en
su panel de recuento. Cada vez que se destapan dos iconos el programa no permite que se destape
otro más hasta que se halla presionado el botón de “siguiente”. El juego termina cuando todos las
parejas de iconos han sido descubiertas.
En la Figura 1 se muestra el formulario que
hay que desarrollar, y en la Figura 2 se
muestra una imagen de la aplicación final
que ve el jugador.
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
es que el criterio de corrección está basado
en estos pasos.
Examen Curso 2001-2002. Convocatoria de Febrero
página 2
Paso 1. Creación de los objetos
En este paso se crearán
1. El formulario
frmMemoria
con
el
nombre
2. Nueve checkBox de tipo array con el
nombre de chkIcono.
3. Un command-button con el texto
“siguiente”, al cual se le asignará el
nombre cmdTurno.
4. La lista donde se guardará el orden
inicial de los números dispuestos en
los botones, con el nombre lstOrden
5. Dos cajas de text textBox de tipo array
con el nombre txtJugador
6. Dos labels de tipo array con el nombre
lblJugador
Paso 2. Inicialización: creación de lista aleatoria de números
Este paso consiste en la programación del método Form_Load(). En él se debe crear en la lista
dieciseis elementos con un número aleatorio entre 1 y 8 cada uno, con una repetición; es decir, el
contenido de los elementos de la lista tiene que ser el mismo, dos a dos, y diferente el de todas la
parejas entre sí.
Para esta tarea hay que hacer uso de la instrucción Rnd y Randomize. La función Rnd da como
resultado un valor entre 0 y 1, aleatorio y la función Randomize sirve para que la función Rnd
funcione correctamente. Si por ejemplo se quiere obtener un número aleatorio entre 2 y 11 hay
que escribir:
Randomize
MiValor = Int((11 * Rnd) + 2)
En cada llamada a la función Rnd ésta da como resultado un valor aleatorio, independientemente
de los valores que haya dado antes, que por lo tanto pueden ser valores repetidos. Por lo tanto,
para crear los ocho valores de la lista, todos distintos ente sí, hay que crear un algoritmo que
esquemáticamente haga:
Examen Curso 2001-2002. Convocatoria de Febrero
página 3
1.-Mientras que el tamaño de la lista sea inferior a 16, que se ejecuten los puntos desde
el 2 al 5:
2.-Calculo MiValor de manera aleatoria
3.-Comprueba si MiValor coincide con el contenido de alguno de los
elementos que se hayan creado hasta el momento de la lista lstOrden
3.1.-Si MiValor coincide con el contenido de algún elemento de la
lista, hay que asignar el valor 1 a una variable auxiliar, y hay que
salir del punto 3.- y continuar en el punto 4.3.2.-Si MiValor no coincide con el contenido del elemento de la lista,
hay que hay que asignar el valor 0 a la variable auxiliar, y se
continúa comprobando dentro del punto 3.4.-Si la variable auxiliar tiene el valor 1, entonces el contenido de MiValor ya
estaba incluido en la lista, y por lo tanto habrá que volver directamente al
punto 2.5.-Si la variable auxiliar tiene el valor 0, entonces el contenido de MiValor no
estaba incluido en la lista, y por lo tanto habrá que incluirlo, y volver al
punto 2.6.- Fin del algoritmo
Paso 3. Creación de variables
Será necesario crear las siguientes variables de ámbito general (accesibles desde todas las
funciones del formulario).
1.- Variable ord01 Almacenará el número del primer botón que se haya activado mediante clik
(checked)
2.- Variable ord02 Almacenará el número del segundo botón que se haya activado mediante clik
(checked)
3.- Variable sel01 Almacenará el contenido del elemento ord01 de la lstOrden
5.- Variable sel02 Almacenará el contenido del elemento ord02 de la lstOrden
6.- Variable turno: Cuando su valor sea 0 será el turno del primer jugador, y cuando sea 1 será el
turno del segundo
7.- Variable aux03 Servirá para saber cuántos botones han sido activados. Cada vez que se active
uno su valor tiene que aumentar un una unidad, y cuando se empiece a
destapar una nueva pareja, su valor se tiene que poner a cero.
8.- Vector con dos elementos cuenta El primer elemento contabilizará los puntos acumulados del
jugador 1, y el segundo los puntos acumulados del jugador 2
Examen Curso 2001-2002. Convocatoria de Febrero
página 4
Paso 4. “Destapar Iconos”
Para que aparezca un icono en un checkbox es necesario utilizar la instrucción LoadPicture
Supongamos que tenemos un checkbox llamado chkEjemplo, y que queremos cargar en él el
icono llamado 1.ico, contenido dentro de la misma carpeta donde esté grabado el proyecto y el
formulario, entonces habría que escribir:
chkEjemplo.Picture = LoadPicture(1 & ".ICO")
Si se quisiese borrar el icono del checkBox, bastaría con hacer:
chkEjemplo.Picture = LoadPicture
en el directorio del examen se adjuntan 16 iconos con los nombres 1.ico, 2.ico, 3.ico, 4.ico, 5.ico,
6.ico, 7.ico, 8.ico, 9.ico, 10.ico, 11.ico, 12.ico, 13.ico, 14.ico, 15.ico, 16.ico., de los cuales
•
el 1y 9 son iguales
•
el 2y 10 son iguales
•
el 3y 11 son iguales
•
el 4y 12 son iguales
•
el 5y 13 son iguales
•
el 6y 14 son iguales
•
el 7y 15 son iguales
•
el 8y 16 son iguales
Para realizar el paso de destapar iconos, habrá que programar el siguiente algoritmo:
1.- Pasa al 1.1.- sólo si al presionar el botón éste se ha activado (checked) y si es el primer botón
que se activa; si no pasa al 2.1.1.- Asigna el numero del botón presionado a la variable ord01, y el contenido de la
lista en esa posición a la variable sel01
1.2.- Incrementa la variable aux3, para registrar que hay un primer botón activado
1.3.- Carga el icono cuya numeración venga dada por la variable sel01
Examen Curso 2001-2002. Convocatoria de Febrero
página 5
2.- Pasa al 2.1.- si al presionar el botón éste se ha activado (checked) y si es el segundo botón que
se activa; si no pasa al 3.2.1.- Asigna el numero del botón presionado a la variable ord02, y el contenido de la
lista en esa posición a la variable sel02
2.2.- Incrementa la variable aux3, para registrar que hay un primer botón activado
2.3.- Carga el icono cuya numeración venga dada por la variable sel02
3.- Pasa al 3.-1 si al presionar el botón éste se ha activado (checked) y si es el tercer botón que se
activa; si no pasa al 4.3.1.- desactiva el botón (unchecked)
4.- Final del algoritmo
Paso 5.Comprobación de las parejas, puntuación y cambio de jugador.
Al hacer click en el botón con el texto “siguiente” se tiene que comprobar si la pareja
seleccionada corresponden al mismo icono o no.
La condición que se cumple cuando hay pareja es que la diferencia entre el nombre de los dos
iconos es siempre 8 en valor absoluto: ( los iconos 1.ico y el 9.ico son iguales, los iconos 2.ico y
el 10.ico son iguales, …
Si se cumple esta condición, hay que aumentar en una unidad el recuento del jugador que tenga el
turno, y si no se cumple (el jugador ha fallado), hay que desactivar los dos botones, descargar
los dos iconos, poner a cero la variable aux3, y cambiar el valor de la variable turno (le toca al
otro)
Descargar