Crear un entrenador de idioma con App Inventor - Final

Paso 4. Evento cnvWords.Touched y procedimiento gameOver

El siguiente paso de la programación del Trainer es tomar una palabra aleatoria desde la lista de palabras wordList y mostrarla en el canvas cnvWords. En el evento Touched del canvas colocamos la variable word y le asignamos un elemento aleatorio desde la lista wordList. Luego llamamos el procedimiento drawWord que mostrará el contenido de la variable word en la pantalla. Esto permite que cada vez que el usuario toque el canvas (parte central de la pantalla, la aplicación muestre una palabra aleatoria.

Fig. 1 Evento cnvWords.Touched

Y ¿Cuándo ya no haya palabras para mostrar?  Pues habremos llegado al final del entrenamiento y será necesario amablemente notificarle al usuario. Para este propósito creamos el procedimiento gameOver (Final del juego) que usa el componente Notificador para mostrar una alerta con el título y mensajes adecuados.

Fig. 2 Procedimiento gameOver


Paso 5. Lanzar el reconocimiento de voz

Para que el usuario pueda pronunciar la palabra mostrada, después de un tiempo adecuado, agregamos el procedimiento que captura el texto pronunciado por el usuario usando el reconocimiento de voz dentro del evento Timer del temporizador. Si ajustamos el intervalo del temporizador Clock1 podemos controlar la rapidez de lanzamiento del reconocimiento de voz.

Fig. 3 Evento Clock1.Timer


Paso 6. Procedimiento updateWordList

¿Qué sucede con las palabras pronunciadas correctamente? Lo ideal es que no se vuelvan a mostrar en la pantalla. Para lograr esto, creamos el procedimiento updateWordList (Actualizar Lista de Palabras) que verifica si la lista de palabras no está vacía y elimina de ella, aquella que el usuario haya pronunciado correctamente. Nos apoyamos en los bloques de lista REMOVER e ÍNDICE para lograr el objetivo propuesto.

Fig. 4 Procedimiento updateWordList


Paso 7. Manejador de eventos para el texto capturado

Para capturar la pronunciación del usuario usamos el evento DESPUÉS DE OBTENER EL TEXTO (AfterGettingText) del componente de Reconocimiento de Voz. Creamos un bloque condicional doble que compare el contenido de la variable result, obtenida por el componente cuando el usuario pronuncia, contra el contenido de la variable global word, mostrada en la pantalla. Para asegurar que la comparación se realice correctamente, utilizamos el bloque upcase, que convierte a mayúsculas ambos contenidos antes de compararlos.

Si la comparación se evalúa como verdadera (True) se muestra la retroalimentación tomada aleatoriamente de la lista de mensajes positivos y se actualiza la lista de palabras, en caso contrario (mal pronunciada) se muestra la retroalimentación aleatoria desde la lista de mensajes negativos. En ambos casos se suman los aciertos o errores y se visualizan sus valores mediante el procedimiento showScore (Mostrar Puntaje) 

Fig. 5 Manejador de eventos para AfterGettingText


Fig. 6 Procedimiento showScore

Hemos llegado al final de este tutorial y te dejamos algunos retos para expandir la funcionalidad de esta aplicación

  • Agregar botón para escuchar pronunciación
  • Agregar botón para pronunciar
  • Agregar funcionalidad para reiniciar el entrenamiento (incluye contadores en 0)
  • Agregar funcionalidad para guardar, localmente, el progreso del usuario

نموذج الاتصال