App InventorMASHER
App InventorMASHER
App InventorMASHER
AppInventor
PRÁCTICA 5. MoleMash
En esta práctica se muestra cómo crear MoleMash, un juego inspirado en el clásico arcade Whac-A-Mole,
en el que criaturas mecánicas salían brevemente fuera de unos agujeros, y los jugadores conseguían
puntos al golpearlos con un mazo. MoleMash fue creado para probar la funcionalidad de los Sprite.
Conéctate al sitio Web de App Inventor y empiezar un nuevo proyecto. El nombre será "MoleMash", y
también establece el título de la pantalla para "MoleMash". Abre el Editor de bloques y conecta con el
emulador o el móvil.
En esta sección, vamos a colocar los componentes necesarios para la acción del juego.
Ahora vamos a colocar los componentes para la visualización del usuario del número de aciertos y errores.
Después de crear los componentes anteriores, pasamos al Editor de bloques para programar el
comportamiento del programa. En concreto, queremos que el topo se mueva a un lugar al azar en el lienzo
a cada segundo.
El objetivo del usuario es pulsar en el topo siempre que aparezca, y la aplicación mostrará el número de
veces que tenemos éxito en los impactos y las veces que no lo alcanzamos. (Nota: "¡Se recomienda el uso
de tu dedo, no un mazo!" ;-)) Al presionar el botón "Reset", restablece el número de aciertos y errores a 0.
Curso 2014-2015 – TIC página 4
AppInventor
En los programas que has realizado hasta ahora los procedimientos, como la vibración en HelloPurr
estaban preestablecidos. No existen procedimientos establecidos para todos los eventos que podamos
realizar, como hacer que se mueva un a imagen pòr la pantalla de forma alearoria, pero sí podemos crear
nuestros propios procedimientos. Al igual que los procedimientos incorporados, tus procedimiento se
mostrará en una paleta y se puede utilizar en cualquier lugar de la aplicación.
En concreto, vamos a crear un procedimiento para mover el topo a un lugar al azar en la pantalla, que
denominaremos MoveMole . Queremos llamar a MoveMole en el inicio del juego, cuando el usuario toca
con éxito el topo, y una vez por segundo.
Para entender cómo mover el topo, tenemos que ver cómo funcionan los gráficos Android. El lienzo (y la
pantalla) se pueden considerar como una cuadrícula concoordenadas X (horizontal) e Y (vertical) , en el
que el las coordenadas (x, y) de la esquina superior izquierda son (0, 0). La coordenada X aumenta a
medida que se mueve hacia la derecha, y la coordenada Y aumenta a medida que se mueve hacia abajo,
como se muestra en la Figura 5. Las propiedades X e Y de un ImageSprite indican donde estará su
esquina superior izquierda, por lo que el topo, cuando está en la esquina superior izquierda tiene valores X
e Y de 0.
Ahora indicaremos qué hace el procedimiento, mover el Sprite del topo. Arrastraremos un bloque desde
la paleta de la imagen del topo:
Haz clic en paleta de Canvas1 y arrastra un bloque Canvas1.Width hacia el lado izquierdo de la operación
de resta.
Del mismo modo, haz clic en la paleta Mole y arrastra Mole.Width al espacio de trabajoy colócalo en el lado
derecho del bloque de la resta.
Repite las operaciones para especificar que la coordenada Y debe ser un número entero aleatorio en el
rango de 0 a Canvas1.Height - Mole.Height .
Ahora que ya has programado el procedimiento MoveMole , vamos a hacer uso de él. Teniendo en cuenta
que es muy común que l@s programador@s quieran que suceda algo cuando se inicia una aplicación, hay
un bloque para ese mismo propósito:
Curso 2014-2015 – TIC página 6
AppInventor
Screen1.Initialize .
Hacer que el topo se mueva cada segundo requerirá un componente Clock (reloj) . Dejamos la propiedad
TimerInterval de Clock1 en su valor predeterminado de 1000 (milisegundos), o 1 segundo. Eso significa
que cada segundo el bloque Clock1.Timer se llevará a cabo. Lo programarás así:
Como recordarás, se han creado dos etiquetas, HitsCountsLabel y MissesCountsLabel , que tenían
valores iniciales de 0. Nos gustaría incrementar los números en estas etiquetas cada vez que el usuario toca
con éxito el topo (un impacto) o toca la pantalla sin tocar el topo (un fallo). Para ello, vamos a utilizar el
bloque Canvas1.Touched , lo que indica que el lienzo fue tocado, las coordenadas X e Y donde fue
tocado (que no necesitamos saber), y si un sprite fue tocado (que sí necesitamos saber). Figura 9 muestra
el código que va a crear.
Mediante estos bloques comprobamos si dentro del Canvas1 se tocó al Sprite Mole o no. Si Mole se toca,
agrega uno al número de HitsCountLabel.Text , de lo contrario, agrega uno a MissesCountLabel.Text .
Haz clic en la paleta Variables y arrastra un bloque get y selecciona touchedSprite en el menú y lo colocas
en el conector "if".
Como queremos que HitsCountLabel.Text se incremente si la respuesta a la pregunta "si ...." (if) es
afirmativa "then", de la paleta HitsCountLabel.Text, arrastra elHitsCountLabel.Text a la derecha de una
suma y a la izquierda coloca el número uno:
Repite las operaciones para la segunda opción "else", pero para los errores :
Prueba tu aplicación. Puedes probar este nuevo código, toca el lienzo con topo y sin
topo y observa las puntuaciones.
Hemos dicho anteriormente que queremos que el dispositivo vibre cuando se toca el topo, podemos hacerlo
con el bloque Sound1.Vibrate , como se muestra en la Figura 11:
Variaciones
Aquí están algunas ideas para añadir a MoleMash:
Agrega botones para que el usuario haga que el topo se mueva más rápido o más lento.
Añadir una segunda ImageSprite con un dibujo de algo que el usuario no deba golpear, como una flor. Si el
usuario lo toca, le penalizará reduciendo su puntuación o terminar el juego.
En lugar de utilizar una imagen de un topo, que el usuario pueda seleccionar una foto con el ContactPicker
componente.
Debes de realizar una de estas variaciones o añadir otro tipo de comportamiento que tú mismo diseñes.