Documente Academic
Documente Profesional
Documente Cultură
Introducción
• Usaremos una variable que sirva de índice para recorrer las distintas preguntas
del cuestionario una a una, y la variable nos permitirá conocer cuál es la
respuesta adecuada (buscando en la lista de respuestas) para la pregunta
planteada.
• Usaremos programación condicional (bloque if-then) para realizar determinadas
acciones bajo ciertas condiciones, es decir, qué sucede cuando el usuario acierta
una pregunta, cuando falla o cuando llegamos al final del cuestionario.
• Usaremos un componente imagen para mostrar distintas imágenes que irán
cambiando de forma dinámica en base a la pregunta planteada.
Width al valor 250 píxeles y la propiedad Height al valor 200 píxeles. En la sección
Media, sube al servidor de App Inventor las imágenes que vamos a usar en esta
app y que puedes descargar desde la carpeta de Descargas de este tema. Asigna
a la propiedad Source del componente Image1 la imagen roosChurch.gif.
• Debajo del HorizontalArrangement2, crea un componente Label (etiqueta) y
asígnale a su propiedad Text la frase Pregunta 1. Renómbralo por LblPregunta.
Usaremos esta etiqueta para mostrar las distintas preguntas del cuestionario.
• A continuación, crea un nuevo componente HorizontalArrangement, el que
puedes ver en la imagen con el número 1.
• Dentro del componente anterior, inserta un TextBox. Cambia su nombre por
TxRespuesta y su propiedad Hint al texto Escribe tu respuesta, esta frase será el
Lo primero que haremos será crear dos variables de tipo lista. En la primera
guardaremos el texto de cada pregunta (ListaPreguntas). En la segunda tendremos la
respuesta correcta (ListaRespuestas). El Gran Concurso de Presidentes
Igual que hemos hecho en otro temas, el trabajo de desarrollo de una app se hace
más fácil si nos centramos en una parte cada vez. Nosotros, de momento, dejaremos
de lado el tema de mostrar las imágenes de cada pregunta y nos centraremos en las
propias preguntas y las respuestas del usuario.
Nota
Antes de continuar, compara los bloques que hemos creado para los eventos
BtSiguiente.Click y Screen1.Initialize. En el caso del evento Initialize, la app
selecciona una pregunta de la lista a partir de un número concreto (1). En cambio,
en BtSiguiente.Click la app selecciona una pregunta de la lista en base al valor de
una variable (indice), es decir, no se selecciona ni el primero, ni el segundo, ni ningún valor
concreto de la lista sino que elige la pregunta que se corresponde con el valor que tenga en
ese momento la variable indice; de este modo, cada vez que se toca el botón BtSiguiente se
seleccionará una pregunta distinta de la lista. Es una práctica habitual usar un índice de este
modo para recorrer una lista y poder acceder a todos sus elementos. El problema de nuestra
app, en su versión actual, es que siempre se incrementa el valor de la variable índice para
pasar a la siguiente pregunta sin preocuparse por comprobar si hemos llegado al final del
cuestionario. De hecho, si estamos en la pregunta 3 y el usuario toca otra vez el botón
BtSiguiente, la app debería volver a la pregunta 1 en lugar de tratar de buscar en la lista una
pregunta 4 que, en su nuestra app, no existe. Así pues, ¿cómo podemos hacer para que la
app sepa que ha llegado al final de la lista y debe volver a empezar?
Prueba tu app
Prueba el comportamiento del botón BtSiguiente para ver si la app está funcionando
correctamente. Si tocas el botón de siguiente, la app mostrará la segunda pregunta. Y si lo
haces otra vez, mostrará la tercera. Pero si lo vuelves a hacer se producirá un error puesto
que estarás tratando de obtener el cuarto elemento de una lista de 3.
El Gran Concurso de Presidentes
Para solucionar el problema expuesto anteriormente, la app tiene que hacerse una
pregunta: ¿es la variable indice superior a 3? Si la respuesta es sí, debe establecer el
valor de dicha variable a 1 para que se vuelva a mostrar la primera pregunta. De lo
contrario, es decir, si es menor o igual que 3, debe mostrar la pregunta que
corresponde al valor de la variable. Observa los bloques de la imagen siguiente:
En los bloques anteriores puedes apreciar que cuando se toca el botón siguiente, la
app incrementa el valor de la variable tal y como ya hacía antes. Pero después, se
comprueba su valor para saber si es superior a 3 (if), en cuyo caso, se vuelve asignar el
valor uno a la variable (parte correspondiente al then). Finalizada la comprobación
del if-then, y ahora que ya estamos seguros que la variable indice nunca podrá tomar
un valor superior a 3, se procede a seleccionar la siguiente pregunta del mismo modo
que hacíamos antes.
lo que tiene que pasar porque así hemos programado el evento BtSiguiente.Click.
Fíjate que apenas hemos realizado un único cambio con respecto a la versión
anterior de este mismo evento. En lugar de escribir un número concreto, el 3 (ó 4, 5 ó
el número de preguntas que tengamos), usamos una función que nos permite
calcular la cantidad de elementos de la lista.: length of list list. Con esta nueva versión
ya no importa cuántas preguntas tengamos, es más, podremos modificar la cantidad
de preguntas y respuestas siempre que queramos y los bloques seguirán
funcionando correctamente siempre.
Prueba tu app
Pon a prueba la nueva versión de tu app. Cuando hagas clic en el botón siguiente sucesivas
veces, la app debe rotar de la primera a la última pregunta y volver a empezar.
Ahora que ya hemos programado todos los comportamientos para que la app pueda
moverse a través de las preguntas y, además, hemos hecho el código más
inteligente y más flexible, y consecuentemente más abstracto, ha llegado el
momento de hacer que las imágenes también vayan cambiando.
El Gran Concurso de Presidentes
Acto seguido, tendremos que modificar el evento BtSiguiente.Click una vez más para
que cambie la imagen que aparece en pantalla en función de la pregunta. La
propiedad Image1.picture será la que usaremos para cambiar la imagen que se
muestra.
La variable que ya venimos usando (indice) sirve tanto para determinar cuál es la
siguiente pregunta como para seleccionar la imagen correspondiente de la
ListaImagenes. Siempre que hayas configurado correctamente las listas de manera
que la primera pregunta de su lista y la primera imagen de su respectiva lista, se
correspondan, la segunda pregunta con la segunda imagen, y así sucesivamente, la
app funcionará correctamente.
Prueba tu app
Cuando hagas clic en el botón siguiente debería cambiar la pregunta y también la imagen,
El Gran Concurso de Presidentes
¿es así?
Hasta ahora, hemos creado una app que simplemente se desplaza entre las
preguntas mostrando distintas imágenes, y aunque es un buen ejemplo de app’s que
utilizan listas, para ser una app funcional debe informar a los usuarios sobre si lo
están haciendo bien o mal con sus respuestas.
Supongamos que la pregunta actual es la primera (la variable indice tiene el valor 1),
la app comparará la respuesta del usuario con el elemento 1 de la lista de respuestas
(ListaRespuestas) pero antes de hacerlo convierte ambas palabras a mayúsculas
usando la función upcase. Dicho de otro modo, primero se convierte a mayúsculas el
texto de la respuesta número 1 de la lista ListaRespuestas, después se convierte a
mayúsculas la respuesta del usuario y, por último, se realiza la comparación. Si el
resultado de la comparación es cierto (parte del then) entonces la respuesta es
correcta y se escribe ¡Correcto! en la etiqueta. De lo contrario (parte del else) se
escribe la palabra ¡Incorrecto!
Prueba tu app
Intenta responder a una de las preguntas. La app debe informar si la respuesta que has
escrito es correcta o no, y además, sólo dará la pregunta por correcta si escribes exactamente
la misma palabra que existe en la lista de respuestas. Prueba también a introducir alguna
respuesta incorrecta intencionadamente y comprueba si EtCorregir muestra la exclamación
¡Incorrecto!
El Gran Concurso de Presidentes
La app debería funcionar, pero verás que después de hacer clic al botón siguiente y
mostrarse la siguiente pregunta el texto ¡Correcto! o ¡Incorrecto! sigue viéndose en
pantalla, al igual que la respuesta del usuario a la pregunta anterior. Para solucionar
este pequeño inconveniente tendremos que realizar un último cambio al evento
BtSiguiente.Click que consistirá en limpiar el contenido del cuadro de texto
TxRespuesta y también de la etiqueta EtCorregir. Observa la imagen siguiente:
Mejorar la app
Puedes intentar mejorar la app de distintas formas, aquí te ofrecemos como ejercicio
algunas opciones.
Resumen
El Gran Concurso de Presidentes
Algunos de los puntos más importantes que hemos desarrollado en este tema son:
• Hemos dividido la app en dos partes bien diferenciadas, por un lado los datos
(que con mucha frecuencia se almacenan en una lista) y por otro los bloques
encargados de controlar los eventos.
• Hemos utilizado un bloque if-then-else para comprobar si el usuario acertaba o
no las preguntas del cuestionario.
• Para pasar de una pregunta a la siguiente hemos diseñado un conjunto de
bloques totalmente abstracto que funcionará siempre independientemente del
número de preguntas de nuestra app.
• Las variables índice hacen un seguimiento de un elemento dentro de una lista.
Cuando se incrementa el índice, es muy importante comprobar con un bloque if-