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)