EJERCICIO 9 – ¿Qué número está pensando?
Vamos a hacer un programa sencillo pero eficiente. Él pensará un número y nosotros tenemos que adivinarlo.
Para que el dispositivo pueda hacer esto correctamente, tenemos que enseñarle cómo hacerlo, paso a paso, añadiendo bloques de código. Se trata de enseñarle al programa la lógica que seguimos nosotros, los seres humanos, cuando jugamos a este juego.
Definimos la interfaz del juego
Tenemos que crear un interfaz para para que la aplicación se relacione con el usuario, es decir, le pregunte un número, y le vaya dando pistas, diciendo si es demasiado alto, demasiado bajo, o si finalmente ha acertado el número secreto.
Creamos entonces en el Diseñador una etiqueta, y cambiamos el texto para que aparezca en ella la palabra “Número:”.
Uno de los retos más importantes cuando programamos ser ordenados.
Debemos acostumbrarnos a seguir prácticas o métodos que nos libren del problema de perder información de los componentes a largo plazo.
A partir de este proyecto vamos entonces a intentar ser más ordenados. Vamos a dejar una E_ delante del nombre mi nueva etiqueta.
Así siempre sabremos, cuando vea los bloques, que esa es una etiqueta, y no un botón, ni campo de texto, ni otro tipo componente. Llamaremos a la etiqueta E_número.
Además, el dispositivo va a tener que “escuchar” cada número que le digamos, para decidir si hemos acertado, así que añadiremos en nuestra ventana del visor un campo de texto. Servirá para que el jugador indique qué número cree que ha pensado el programa.
Para diferenciarlo de la etiqueta que hemos creado antes, al campo de texto le llamaremos T_número. Así cuando estemos en el editor de bloques podremos diferenciar fácilmente entre la etiqueta y el campo de texto, porque uno comienza con E_ y otro con T_.
Aunque parezca innecesario, esta costumbre en la asignación de nombres puede ser muy interesante. Con el tiempo cada programador va desarrollando sus propios métodos, o tomándolos de otros programadores, para disfrutar del “arte” de programar sin complicarse la vida.
Finalmente tendremos que añadir un botón con el texto “Adivina” para que el dispositivo sepa cuál hemos elegido. A este botón lo llamaremos B_adivinar. Cuando el jugador lo pulse el programa tendrá que hacer algunas comprobaciones que ahora iremos viendo.
Generamos un número aleatorio
Vamos al editor de bloques.
Lo primero que el programa tiene que hacer es pensar en un número. En este caso le vamos a indicar cómo debe pensar en un número entre 1 y 10. Al ser una instrucción matemática, abriremos el cajón Matemáticas, y usaremos el bloque entero aleatorio. Tendremos que especificarle entre qué dos números debe pensar su número.
A continuación, vamos a hacer que el programa guarde este número en su memoria, porque si no lo olvidaría y no podríamos jugar.
Una variable es un espacio de la memoria del dispositivo reservado para guardar datos que nuestros programas tienen que manejar durante su funcionamiento.
Para poder utilizar las variables de memoria es necesario en primer lugar darles un nombre. Para ello abrimos el cajón Variables y elegimos el bloque inicializar global…
Podemos darle a la variable el nombre V_número_pensado. Es importante dar a las variables un nombre descriptivo, porque en programas más complejos, con más variables, nos facilitará saber para qué sirve cada una.
Como venimos haciendo, y para identificar rápidamente que se trata de una variable, el nombre comienza con una V_.
Con estos dos bloques le hemos dicho al el juego que tiene que pensar un número entre uno y diez, y guardárselo en una variable de su memoria, sin mostrárselo al jugador.
Para comenzar a jugar deberíamos pedirle al jugador que nos diga un número. Esto lo conseguiremos por medio del campo de texto T_número que hemos creado en el Visor. El jugador irá escribiendo números en este campo y el programa le irá indicando si el número aleatorio generado secretamente es mayor o menor al que el jugador ha escrito.
Por lo tanto, cada vez que el jugador escriba su número y pulse el botón B_adivinar el programa lo comparará con el número secreto.
Ahora que ya tenemos el número pensado y el número que ha elegido el jugador ¿cuál será el siguiente paso? La aplicación tiene que comparar ambos números, para saber si ha acertado, o si es mayor o menor.
Este bloque tan importante es el que nos permitirá a los programadores enseñarle al dispositivo cómo debe tomar las decisiones durante la ejecución de un programa. El bloque si-entonces bloque sirve para darle inteligencia a las aplicaciones.
Dependiendo del resultado de la comparación la aplicación deberá hacer una cosa u otra:
Si se cumple una condición
Entonces Ejecuta esto
El bloque que sirve para hacer una comparación entre dos números está en el cajón Matemáticas. Lo arrastraremos al editor de bloques, hasta encajarlo con el primero de los huecos del bloque si-entonces
En el primer hueco del bloque azul pondremos el número secreto que almacenamos antes en la variable, y en el otro lado indicaremos cuál es el número que ha escrito el jugador en el campo T_número
Podemos saber cuál es el contenido de una variable con el bloque tomar. Arrastramos al editor el bloque tomar que se encuentra dentro del cajón Variables hasta el primer hueco del bloque azul de comparación, y una vez colocado elegimos qué variable es la que queremos usar, desplegando la lista de variables situada dentro del bloque tomar.
Ahora que ya sabemos cómo consultar cuál es contenido de la variable V_numero_pensado, podemos modificar la comparación haciendo clic en el centro del bloque azul.
Empezaremos evaluando si el número pensado es mayor que el número del jugador.
En caso de que se cumpla la condición deberemos darle al jugador una pista, diciéndole que el número que nos ha dicho es demasiado bajo. Lo haremos creando una nueva etiqueta E_pista en el interfaz del juego.
Bloque poner para guardar el valor de una variable, texto o etiqueta
Igual que con el bloque tomar tomábamos el valor de la variable, con el bloque poner vamos a asignar el valor “Demasiado bajo” al texto de la etiqueta E_pista, para que el jugador lo vea en la pantalla del juego.
Para incluir el texto “Demasiado bajo” usaremos un bloque fucsia que hay dentro del cajón Texto
Cada vez que el usuario haga clic en el botónB_adivinar. Por lo tanto, incluiremos todo el bloque anterior dentro del bloque cuando.B_adivinar.Clic
Hacemos tres bloques si-entonces, uno para cuando el número sea menor, otro para cuando sea mayor, y el último para cuando sea igual, en cuyo caso el jugador habrá acertado el número.
Observamos que en cada bloque azul elsigno de comparación será diferente. Podemos duplicar, botón derecho>Duplicar, los bloques si-entonces completos y luego modificar los bloques azules y fucsia para que se adapten a cada comparación.
Cuando estamos probando la aplicación, no sabemos cuál es el contenido de la variable V_número_pensado, así que no tenemos certeza de si el programa está ejecutándose bien, es decir, si está informando correctamente al jugador si el número es demasiado alto, o demasiado bajo.
Para saber si el programa funciona como debe tenemos que poner “chivatos”. Por ejemplo, podemos hacer que se muestre siempre el número pensado en pantalla, para saber si el programa funciona bien.
Un chivato se utiliza sólo durante la fase de desarrollo del programa, mientras se está escribiendo. Cuando todo está probado, y antes de ponerlo a disposición de los usuarios, hay que acordarse de quitar todos los chivatos.
Para poner un chivato podemos definir una etiqueta E_chivato, y luego usar estos bloques:
Ubicamos este bloque es dentro del evento cuando B_adivinar.Clic, como primera instrucción.
Así se actualizará en la pantalla el valor delchivato cada vez que usuario pulse el botón de adivinar.
En nuestro programa, para evitar las ejecuciones de código innecesarias, vamos a utilizar sentencias si-entonces anidadas, o si-entonces-si no. Sólo se ejecutarán los bloques del si no cuando NO se cumpla la condición del si-entonces anterior.
De esta forma el bloque cuando.B_adivinar_Clic se ejecutará mucho más rápido, al evitar pasar por bloques sin necesidad.