Presentacion de AppInventor
Presentacion de AppInventor
¿Qué es AppInventor?
App Inventor parte de una idea conjunta del Instituto Tecnológico de Massachusetts y de
un equipo de Google Education. Se trata de una herramienta web de desarrollo para
iniciarse en el mundo de la programación. Con él pueden hacerse aplicaciones muy
simples, y también muy elaboradas, que se ejecutarán en los dispositivos móviles
con sistema operativo Android.
App Inventor es un lenguaje de programación basado en bloques (como piezas de un juego
de construcción), y orientado a
eventos. Sirve para indicarle al “cerebro” del dispositivo móvil qué queremos que haga, y
cómo.
Consideraciones:
1. Crear una cuenta Google
2. 2. Instalar App Inventor 2
3. 3. Instalar MIT AI2 Companion en el dispositivo Android, o conocer el emulador
4. 4. Crear una aplicación e instalarla.
App Inventor sin conexión(offline) versión Ultimate
Para esto Krupong ha desarrollado a partir de los fuentes de MIT App Inventor una
versión de la herramienta que no necesita conexión a Internet y además podremos
llevarla de manera cómoda en un dispositivo
Verificar que versión de Windows tenemos
Una vez que tengamos la certeza que todo está en ejecución para poder comenzar a
trabajar desde la ventana anterior haremos clic en Start Invent o directamente en
nuestro navegador accederemos a la dirección http://localhost:8888
nos muestra inicialmente el interfaz en inglés, sin embargo, podemos utilizarlo también en
castellano. La elección del idioma se hace pulsando sobre el icono de la bola del mundo
situado en la esquina superior derecha de la página de App Inventor.
1- A la izquierda están los objetos que vamos a usar para diseñar la pantalla de nuestra
aplicación. Botones, imágenes, dibujos, etc. Es como la paleta de un pintor
2 centro: Representa la pantalla del móvil, y sirve para DISEÑAR el aspecto de la aplicación.
La llamada “Visor”
Para poder probar cómo funciona lo que vamos haciendo necesitamos transferirlo a un
móvil, o usar el emulador incluido en App Inventor (esta opción es menos
recomendable). SALTA
EJEMPLO:
El Programa consiste en la conexión
vía bluetooth desde Android al
Arduino, y que cuando oprima el
SALTA
botón ON
se enviara el numero 1 y cuando
oprima el botón OFF se enviara el
numero 2,.
SALTA
2 – Ingresar a bloques http://ai2.appinventor.mit.edu
SALTA
¿Por qué Arduino?
• Barato: Las placas Arduino son relativamente baratas comparadas con otras SALTA
plataformas microcontroladoras. La versión menos cara del modulo Arduino puede ser
ensamblada a mano, e incluso los módulos de Arduino preensamblados cuestan menos de 50$.
Diagrama de Pines(PinOut)
SALTA
Precauciones sobre el uso de la placa.
Diagrama de Pines(PinOut)
Modulo Bluetooth
El hardware que compone el dispositivo Bluetooth está
compuesto por dos partes:
Un dispositivo de radio, encargado de modular y transmitir SALTA
la señal. Un controlador digital, compuesto por una CPU, un
procesador de señales digitales (DSP – Digital Signal
Processor) llamado Link Controller (o controlador de Enlace)
y de las interfaces con el dispositivo anfitrión.
SALTA
Plataforma Software Arduino
SALTA
Plataforma Software Mblock
LOS BLOQUES
1 SALTA
3 4 Escenario (1)
2 Bloques(2)
Espacio de
construcción de
programa(3)
Codigo del
5 programa(4)
Interfases de
uso(5)
Utilizaremos la siguiente conexión para enviarle un HIGH Y UN LOW al LED
void loop(){
if(Serial.available()>0){
estado = Serial.read();
}
if (estado =='1'){
digitalWrite(led,HIGH);
}
if(estado=='2'){
digitalWrite(led,LOW);
}
}
Crear una aplicación para dibujar
SALTA
SALTA
Crearemos después otro botón verde, y finalmente otroazul
Para que estén en misma línea horizontal, vamos a recolocarlos en la pantalla añadiendo
un componente DisposiciónHorizontal .
SALTA
Para que se ajuste al ancho de la pantalla del visor propiedad Ancho egiremos la
opción Ajustar al contenedor...
Ahora añadimos el lienzo, arrastrando al Visor el componente Lienzo
SALTA
AppInventor utiliza el sistema cartesiano para determinar la posición de un punto
determinado dentro de un lienzo. La x aumenta desde la izquierda a la derecha, y la y lo
hace desde arriba hacia abajo.
SALTA
cuando.boton_rojo.Clic
cuando.boton_Azul.Clic
cuando.boton_Verde.Clic
SALTA
SALTA
SALTA
Tenemos que indicarle ahora a nuestro programa que modifique el ancho de la línea de nuestro
dibujo según variemos la posición de Tamaño pincel .
SALTA
Este bloque incluye una variable, posiciónDelPulgar , que contiene el valor actual de
la posición, y que puede utilizarse para nuestro propósito.
SALTA
Elegiremos en este caso el bloque tomar , y lo combinaremos con el bloque verde del objeto Lienzo que define el ancho de
línea de dibujo, para indicar al programa que cambie el ancho de la línea cada vez que arrastremos el puntero del deslizador
Tamaño_pincel a un nueva posición.
Guardar un archivo con el dibujo que hemos hecho
SALTA
Guardar un archivo con el dibujo que hemos hecho
SALTA
SALTA
En general, un sprite es una imagen en dos dimensiones, más o menos pequeña, incluida dentro de un escenario más
grande, y que ocupa un lugar en la memoria gráfica del ordenador. Se utiliza tradicionalmente para la programación de
juegos.
Definición del escenario de juego
Comenzaremos un nuevo proyecto y le daremos un nombre descriptivo, como
“Aplastabichos”.
Empezaremos creando el lienzo Escenario
SALTA
Incluiremos un componente
Pelota , que llamaremos
spritePelota .
En el Diseñador la altura y la
anchura del escenario se
ajusten automáticamente al
contenedor. En cuanto a
las propiedades de la pelota,
definiremos que su Radio es
15, para que se vea
suficientemente grande en el
escenario.
Definición del escenario de juego
Para que el escenario siempre ocupe todo el espacio de la pantalla del dispositivo
debemos definir algunos bloques dentro del bloque mostaza cuando.Screen1.Inicializar
SALTA
Definición del escenario de juego
Tenemos que adaptar el escenario a los límites de la pantalla, tomando las propiedades de
ancho y largo de la pantalla de cada dispositivo. Además, evitaremos que la pantalla rote
automáticamente poniendo el valor de la propiedad OrientaciónDeLaPantalla a 1.
SALTA
Como decíamos antes, este juego consistirá en ir aplastando con nuestra pelota todos los objetos que aparezcan a lo
largo y ancho del escenario. Para que la pelota ruede por el escenario tendremos que inclinar el dispositivo.
La pelota rodará siempre hacia la parte del escenario que se encuentre más cerca del suelo. Recogeremos cada objeto
cuando la pelota choque con él.
El movimiento de la pelota
Esta parte es muy importante, ya que de ella depende que el juego funcione
correctamente y su uso sea agradable para el usuario. Aunque parezca complicado,
una vez entendida la lógica, no será difícil crear los bloques que permitan este
movimiento.
SALTA
SALTA
Este bloque incluye tres variables, cada una de las cuales almacena la inclinación del objeto en uno de los ejes de
coordenadas. Vamos a hacer que la pelota tenga una dirección dependiendo de los valores de estas tres variables.
El movimiento de la pelota
Dentro de la tabla, en la columna de izquierda, colocaremos tres etiquetas con la descripción de
cada campo, E_nombre_acelX , E_nombre_acelY y E_nombre_acelZ .
En la columna de la derecha pondremos tres etiquetas E_valor_acelX , E_valor_acelY y
E_valor_acelZ , para mostrar las variables cuyo valor queremos conocer.
SALTA
El movimiento de la pelota
Utilizaremos el bloque cuando.Inclinación.CambioEnAceleración . Para conocer la aceleración
en el ejeX,por ejemplo, tenemos que dejar el puntero del ratón inmóvil durante un segundo
sobre el campo xAccel color naranja que hay dentro del bloque mostaza.Una vez aparezcan las
opciones tomar y poner para esa variable, podremos arrastrar el bloque tomar hasta el hueco
disponible a la derecha del bloque color verde oscuro correspondiente. SALTA
El movimiento de la pelota
usaremos el bloque violeta llamar.spritePelota. MoverA , que sirve para colocar el objeto en
cualquier punto del escenario que queramos.
Este bloque acepta dos parámetros de entrada, X e Y, que definen las coordenadas donde se
colocará la esquina superior izquierda del sprite de la pelota.
SALTA
Haremos que la coordenada X y la coordenada Y de la pelota que definen su colocación en el
escenario vayan variando cuando inclinemos el dispositivo en cualquiera de los dos ejes, o en los
dos al mismo tiempo.
Lo haremos simplemente
sumando el valor de la variable
xAccel al valor de la
coordenadaX actual de la
pelota, y sumando yAccel al
valor de la coordenada Y.
Los bloques de color verde
claro están dentro del cajón
de propiedades de
spritePelota
El movimiento de la pelota
Cuando hagamos esto veremos que el comportamiento vertical, el de la coordenadaY, será el
esperado, es decir, que la pelota caerá hacia nosotros cuando inclinemos el dispositivo hacia
nuestro lado, y se alejará de nosotros cuando inclinemos el móvil en la dirección contraria.
Sin embargo, cuando inclinemos el dispositivo hacia la derecha, en el eje X, la pelota caerá
hacia la izquierda, y viceversa. SALTA
Para solucionar este problema, y adaptar el funcionamiento al comportamiento natural de una pelota, tendremos que modificar
el bloque que indica el posicionamiento en la componenteX de la coordenada. En lugar de sumarle el valor de xAccel le
sumaremos el valor de restar xAccel a 1.
Crear los bichos a aplastar
Para empezar habrá que dibujar el sprite que queremos utilizar en el juego para representar al
bicho que queremos aplastar.
SALTA
Una vez creados los cinco objetos tenemos que colocarlos en el escenario. Lo haremos con
el bloque llamar.Sprite_enemigo_1.MoverA
Especificaremos para cada objeto una posición aleatoria. Con los bloques azules entero
aleatorio entre definiremos en qué coordenada X aparecerá la esquina superior del SALTA
sprite dentro del escenario.
Especificaremos un 0 para indicar que el objeto puede aparecer desde el margen izquierdo
del escenario.
A continuación le diremos con el bloque verde Escenario.Ancho que el límite máximo es el límite derecho del escenario.
Manejo de los enemigos
Pero, atención, si el bloque azul entero aleatorio entre nos devolviera precisamente un
valor de X muy cercano al límite derecho la mayor parte del enemigo sobrepasaría el
límite derecho del escenario, y no sería visible. Para solucionar esto se resta a
Escenario.Anchoel ancho del sprite del enemigo, Sprite_enemigo_1.Ancho SALTA
Cada vez que el juego se reinicie tendremos que colocar los objetos en el escenario, y
deberemos volver a usar todos estos bloques, así que lo mejor, para no tener que escribir el
mismo código varias veces cuando es tan grande, será definir un procedimiento, donde
incluiremos todos los bloques que sirven para colocar los objetos. SALTA
Una vez definido el procedimiento, y modificado su nombre, los bloques quedarán así.
SALTA
El jugador deberá inclinar el dispositivo para guiar a la pelota hacia cada uno de los objetos
y chocar con ellos. Cada vez que eso suceda deberemos retirar el objeto del escenario. El
juego acabará cuando el jugador haya hecho desaparecer todos los objetos.
SALTA
usaremos el bloque genérico poner SpriteImagen.Visible del componente como. Este bloque
nos permitirá cambian el valor de la propiedad Visible de cualquier componente del tipo
SpriteImagen, que especificaremos en el hueco del componente
SALTA
Tenemos también que mantener un contador de objetosrestantes, para saber cuándo se han
recogido todos y dar por completada la misión. Para ello usaremos dos variables,
v_objetos_totales, y v_objetos_restantes.
La primera define el número de objetos que vamos a manejar en cada partida, y la segunda SALTA
define el número de objetos que quedan por hacer desaparecer.
Como siempre, par indicar que estamos definiendo una variable, y que luego sea más fácil
identificarla como tal, comenzaremos los nombres con el prefijo v_
Podemos añadir un chivato debajo del escenario para saber cuál es el contenido de la variable
v_objetos_restantes. Así sabremos si nuestro juego está gestionando correctamente esta
variable tan importante.
SALTA
Reorganizando los bloques de código
Cuando una aplicación está empezando a crecer, como la nuestra, conviene mirarla un poco
“desde lejos” y pensar de qué manera podemos hacer que sea más fácil de manejar, cómo
organizarla mejor. Así pues, para facilitar el mantenimiento de nuestro programa, y su lectura,
vamos a definir dos procedimientos: Iniciar_juego y Fin_del_juego. SALTA
Para ellos abriremos el cajón Procedimiento y arrastraremos dos veces el bloque como
procedimiento ejecutar
Reorganizando los bloques de código
En el primero de ellos tendremos que reubicar los objetos, y reiniciar todas las variables que
tiene que manejar el juego. Es decir, dejar las cosaslistas para empezar a jugar.
SALTA
Vemos que el procedimiento Fin_del_juego aún está vacío, pero ya sabemos que
incluiremos en él los bloques que deberán ejecutarse cuando el juego termine.
Reorganizando los bloques de código
Habrá que hacer una llamada al procedimiento Iniciar_juego dentro del bloquec cuando
Screen1.Inicializar ejecutar, que ahora quedará así.
SALTA
Limitar el tiempo para crear tensión
Para dar mayor interés al juego usaremos un temporizador, un componente Reloj, que limitará
el tiempo que tiene el jugador para aplastar a los enemigos. Cuando el tiempo termine, el
jugador no podrá eliminar más objetos.
Tenemos que empezar por crear un objeto Reloj en el Diseñador. El componente Reloj se SALTA
encuentra dentro del cajón Sensores. Le daremos el nombre Cada_Segundo. Se pretende
conocer cuándo pasa cada segundo, así que su propiedad IntervaloDelTemporizador contendrá
el valor 1000 (1000 milisegundos es igual a 1 segundo).
La idea es mostrar siempre en la pantalla el número de segundosrestantes, y para eso necesitamos restar un segundo cada
vezrespecto de la cantidad que queda disponible. Así pues, definiremos el número de segundos disponibles con la variable
v_segundos_restantes, y le daremos el valor inicial 30. En el bloque cuando.Cada_segundo.Temporizador ejecutar
indicaremos que reste 1 a la variable v_segundos_restantes, y que lo muestre en un nuevo objeto de tipo Etiqueta que
llamaremos E_segundos_restantes. Con estos componentes que hemos definido controlaremos el tiempo de juego.
¿Cuándo termina el juego?
Cuando esta variable v_segundos_restantes alcance el valor 0 (cero) la partida habrá terminado,
porque ya no habrá segundos restantes. Podemos implementar esta comprobación añadiendo
un bloque mostaza si-entonces dentro del bloque cuando.Cada_segundo.Temporizador ejecutar.
Cuando se cumpla la condición del si-entonces habrá llegado el momento de hacer una llamada SALTA
al procedimiento Fin_del_juego
¿Cuándo termina el juego?
¿En qué otro caso deberá considerarse el juego terminado? Claro, el juego también deberá
terminar cuando no queden más objetos por recoger. Lo indicaremos con un bloque si-entonces
dentro del bloque cuando.spritePelota.EnColisiónCon.ejecutar
SALTA
Fin del juego
Tenemos entonces que definir qué hacer cuando el juego termine. Una opción sencilla y clara
puede ser informar al usuario a través de un texto, y tal vez un sonido. Por ejemplo, podemos
escribir el texto “Fin del juego” en la etiqueta E_segundos_restantes. Para ello abriremos el
cajón Texto del editor de bloques, y arrastraremos el componente de texto vacío al hueco verde
SALTA
que asigna un valor al texto de la etiqueta E_segundos_restantes
SALTA
SALTA
SALTA
App Inventor 2 -Bloques.
SALTA
SALTA