Validar respuesta en un texto

Estoy haciendo un nuevo juego para repasar las sumas.
En este caso donde el usuario pueda ingresar la respuesta en un campo de texto.
He utilizado un texto para escribir la respuesta.
En la escena del juego he implementado el siguiente código para generar los números aleatorios:


class JUEGO extends Escena {
  iniciar() {
    let a = this.pilas.azar(1, 30);
    let b = this.pilas.azar(1, 30);
    let c = a + b;

    let pregunta = this.pilas.obtener_actor_por_nombre("pregunta");
    pregunta.texto = `${a} + ${b} = _`;



  }

  actualizar() {

  }
}

La respuesta en el texto con el siguiente código:

class texto extends ActorTextoBase {
  c: number;
  iniciar() {
    this.c = 0;
  }
  cuando_pulsa_tecla(tecla) {
    var nombre: string;
    if (tecla === "backspace") {
      this.texto = this.texto.slice(0, -1)
    }
    if (tecla === "espacio") {
      this.texto += " ";
    }
    if (tecla.length === 1) {
      this.texto += tecla;
    }
    if (tecla === "enter") {

      this.enviar_mensaje_global("gana");
    }

Si la respuesta ingresada por el usuario es igual a la variable c de la escena del juego debe enviar un mensaje global. Pero no he logrado validar la respuesta.

**if (tecla === "enter") {**

**      this.enviar_mensaje_global("gana");**

En esta parte del código debo validar la respuesta, pero no he logrado hacerlo.

Si la respuesta es correcta envía un mensaje y este mensaje lo recibe el actor Reiniciar escena asi volver a generar otro ejercicio. Esa es la idea.
suma

LINK BORRADOR DEL JUEGO
https://app.pilas-engine.com.ar/#/proyecto/5d0b34a9-7e6c-49de-bd02-a3f769ae011e

Hola @Marisol_Ramos !!!

Lo que yo haría es guardar la respuesta esperada en una variable del proyecto al iniciar la escena. Y luego, cuando el usuario pulsa “enter”, miraría si el texto que ingresó el usuario coincide con el valor esperado o no.

Es decir, en el código de la escena agregaría esta linea de código para guardar el valor esperado:

Luego, para validar que el jugador contestó bien a la pregunta se podría agregar un código como este:

Te paso el proyecto con esos cambios:

https://app.pilas-engine.com.ar/#/proyecto/977af4d6-e0f7-4b64-9007-57abe5fd8e7a

Oh, por cierto, esto de guardar variables (como la respuesta esperada) en el proyecto es algo que se menciona en el manual de pilas: Código de proyecto de hecho, en el manual se muestra cómo crear un contador, algo que te podría servir para almacenar la cantidad de respuestas correctas en el juego.

Volviendo al juego que nos mencionas, en el link anteriore hice que el juego solamente muestre un texto de acierto o error cuando el usuario pulsa “enter”, pero no hice que el jugador reciba otra suma para responder.

Si quieres hacer que la escena se reinicie cuando el usuario contesta bien, podrías agregar este código extra cuando el usuario pulsa la tecla “enter”:

      if (this.texto == this.proyecto.respuesta_esperada) {
        this.decir("Has ganado!");

        // espera dos segundos y reinicia la escena:
        this.pilas.luego(2, () => {
          this.pilas.reiniciar_escena();
        });

      } else {
        this.decir("mmm... intenta de nuevo");
      }

Por cierto, la función “luego” se puede ver en el manual de pilas aquí: Manejo de tiempo

Avisanos si te sirve marisol !

1 Like

Nuevamente gracias por tu gran ayuda.
Si era lo que necesitaba.
Gracias.
Abrazos.