Bloques de Control – Decisiones

En ocasiones necesitamos que nuestro programa tome decisiones y active unos bloques u otros en función de cosas que queremos controlar.
En este capítulo vamos a aprender cómo hacerlo.

 Introducción

En ocasiones necesitamos que nuestro programa tome decisiones y active unos bloques u otros en función de cosas que queremos controlar. Por ejemplo, si el usuario de nuestro videojuego ha logrado un nuevo record, le felicitamos con un mensaje. Si ha introducido un dato erróneo en un campo, le mostramos un mensaje de error, etc. Para que nuestro programa pueda tomar decisiones utilizamos expresiones lógicas. Las expresiones lógicas son aquellas que nos dicen si algo es verdadero o falso. Por ejemplo: ¿es 3 menor que 4? ¿es 1 igual a 1? ¿es "Juan" igual que "Juan"? ¿es "Roma" distinto de "París"?, etc.
La respuesta a cada una de estas preguntas (expresiones lógicas) será verdadera o falsa y en función de esto podremos hacer una cosa u otra dentro de nuestro programa. Vamos a verlo con un ejemplo.

 Comparando números

Vamos a hacer una pequeña aplicación que nos pregunte por dos números y nos diga si el primer número es igual, mayor o menor que el segundo. Para hacerlo vamos a aprender a usar bloques de control. Empieza un proyecto nuevo y llámalo "comparando_numeros".
Desde el Diseñador añade dos componentes textbox, después añade debajo una etiqueta label y por último un botón. Puedes quitar los textos de estos componentes y dejarlos vacíos. Cambia también si quieres el texto del botón.
Ahora vamos al Editor de bloques.
Coge el evento button1.Click y ponlo en tu programa.
Cuando pulsemos el botón queremos comprobar en primer lugar si el primer número es igual que el segundo y, si es así, mostrar el mensaje en la pantalla. Si no fuese igual continuaremos con la comprobación para saber si es mayor o  menor. Vamos a ver cómo hacer estas comprobaciones.
Dentro de la categoría Control coge el bloque marrón "if-then" y añádele el bloque “else” haciendo click sobre el recuadro azul. Ponlo dentro del evento Button1.Click. Te tiene que quedar así:

En el apartado “if” pondremos la expresión lógica, es decir, la pregunta que queremos hacer. En nuestro caso: ¿es el primer número igual que el segundo?
Como estamos comprobando dos números, coge el bloque "=" de la categoría Math, que nos permite preguntar si dos números son iguales.
En el primer espacio pon el bloque (variable) TextBox1.Text que contiene el número que haya puesto el usuario en el primer campo (recuerda que este bloque es de color verde claro).
En el segundo espacio haz lo mismo con el segundo componente TextBox2.Text. Así:

10 Ahora pega este bloque al campo “if” del bloque de control “if-then-else”.

Ya tenemos construida la pregunta, ahora tenemos que decidir qué vamos a hacer si la respuesta es correcta (verdadera) o no (falsa).
11 Dentro del bloque de control verás un espacio llamado then (entonces... haz esto). Aquí pondremos lo que queremos que ocurra si la respuesta es verdadera (los dos números son iguales). Coge un bloque "set label1.Text to" y ponlo dentro.
12 Ahora crea un bloque de texto y pon dentro "Los números son iguales" y pégalo al bloque "set label1.Text".
13 Ahora en el espacio llamado else (si no... haz esto) pondremos los bloques que queremos activar si los números son distintos.
14 Ya hemos preguntado si los números son iguales. Si la respuesta es falsa (son distintos) vamos a comprobar ahora si el primer número es mayor o menor que el segundo. Vuelve a coger otro bloque de control "if-then-else" como el anterior y colócalo dentro de este espacio. Así:

15 Vuelve a crear un bloque Math pero esta vez “>”, que nos permite preguntar si un número es mayor que otro. Lo encontrarás en el desplegable del bloque "=".
16 En el primer espacio pondremos el bloque (variable) TextBox1.Text y en el segundo el bloque (variable) TextBox2.Text. Pégalo ahora al segundo bloque de control “if”.
17 Recuerda que si la respuesta es verdadera (el primer número es mayor) entonces se activarán los bloques del espacio “then”, así que dentro haremos lo mismo que antes, cambiando el valor de la etiqueta. Selecciona el bloque "set Label1.Text to" que usamos antes y duplícalo.
18 Coge la nueva copia y ponla en este espacio.
19 Ahora cambia el texto y pon "El primer número es mayor".
20 Si la respuesta es negativa (falso) quiere decir que el segundo número es menor que el primero. Vuelve a duplicar el bloque "set Label1.Text" anterior y ponlo en el espacio else.
21 Ahora cambia el texto y escribe "El segundo número es mayor".

¿Funciona?

 Adivina un número

Vamos a hacer otro pequeño programa que genere un número al azar (también llamado aleatorio) que tendremos que adivinar. Un número aleatorio es un número que nuestro ordenador o dispositivo elige al azar entre un rango de números que nosotros decidimos. Los números aleatorios son muy útiles en programación. Imagina que quieres hacer un videojuego en el que quieres que aparezca algún personaje o imagen cada vez en un sitio distinto e impredecible de la pantalla, o un videojuego de guerra en el que el usuario juegue en un bando u otro al azar. Más adelante vamos a ver varios ejemplos más.
Crea un proyecto nuevo y llámalo: "adivina_numero".
Para esta aplicación vamos a necesitar por este orden: una etiqueta (label), un campo de texto (textbox) y dos botones. Puedes quitar el texto por defecto de la propiedad text de cada componente para que aparezcan en blanco.
Cambia el nombre del primer botón por "boton_comprobar" y el texto también por "Comprobar". Al segundo botón llámalo "boton_azar" y cambia el texto por "Nuevo número".
Vamos ahora al Editor de bloques.
En primer lugar vamos a definir una variable para guardar el valor del número aleatorio que vamos a generar. Recuerda que se hace desde Variables. Usa el bloque "Initialize global name to" y cambia el nombre de la variable por "numero_azar". Pega a este bloque un nuevo bloque numérico con el valor 0.
Ahora de cada uno de los botones vamos a coger el evento .Click.
Vamos primero con el boton_azar que es el que nos dará el número aleatorio. ¿Cómo asignamos un valor a una variable? Si la hemos creado correctamente en el paso anterior ahora aparecerá dentro de Variables / "set...to". Recuerda que el bloque que buscamos se llama "set global numero_azar to". Ponlo dentro del evento boton_azar.Click.
Si quisiésemos asignar un número cualquiera a esta variable bastaría con pasarle a este bloque otro bloque numérico con el número que queremos. En este caso queremos que el número sea aleatorio y para hacer esto necesitamos el bloque "random integer from... to" dentro de la categoría Math. Pégalo al bloque "set global numero_azar to".
Verás que necesita dos datos: "from" (desde) y "to" (hasta). Este es el rango (límite inferior y superior) que queremos para el número al azar. Es decir, nuestro ordenador / dispositivo nos dará un número ni más pequeño, ni más alto que los que pongamos aquí. Para nuestro caso, pon entre 1 y 10.
Para este ejemplo vamos a mostrar el número aleatorio en la etiqueta así que tenemos que cambiar la etiqueta "set Label1.Text to" al valor de la variable. Coge un bloque "set label1.Text to" y pégale la variable numero_azar. ¿Recuerdas cómo hacerlo?
10 Vamos ahora con el boton_comprobar. Cuando el usuario pulse este botón comprobaremos si el valor que ha introducido es o no igual al número aleatorio. Desde Control coge el bloque "if-then" y añádele el bloque “else”.
¿Cuál sería la expresión lógica (pregunta) que tendríamos que realizar?
¿Es el número del textbox igual al numero_azar?
11 Para comprobar si dos números son iguales usamos el bloque "=" de la categoría Math y lo pegamos al campo "if".
12 El primer valor será el número que ha introducido el usuario. Recuerda que el componente textbox tiene una variable TextBox1.Text donde se guarda este dato. Así que cógelo y ponlo ahí.
13 El segundo valor a comprobar será nuestra variable numero_azar. Ya sabes dónde está.
14 Ya sabes que si la respuesta es cierta (la expresión lógica es verdadera) entonces se activarán los bloques dentro del espacio "then" así que vamos a cambiar la etiqueta Label1.Text para que ponga "¡Lo has adivinado!"
15 Si es falso, en la etiqueta pondremos "¡Error!". Ya sabes cómo hacer esto. ¿Cómo podemos saber si funciona?
16 Si pulsas con el botón derecho del ratón encima de la variable numero_azar verás que aparece un menú con una opción llamada "Do It". Esta opción te permite ver el valor de la variable mientras el programa está funcionando. Así:

Al activarla en la variable numero_azar podrás saber el valor de esta variable cada vez que pulses el boton_azar.

 Más expresiones lógicas

Dentro de la categoría de bloques Math tienes más bloques que puedes usar para controlar tus programas.
Por ejemplo, el bloque "distinto que" que encontrarás en el desplegable del bloque "=" funciona justamente al contrario que este. Es decir, podemos usarlo cuando queremos saber si un valor no es igual a otro.
También tienes bloques para saber si un valor es mayor (>) o menor (<) que otro. Mayor o igual (>=) o menor o igual (<=). Puedes usarlos para saber si un usuario ha alcanzado un nuevo record jugando con tu aplicación: (puntuación_actual <= puntuación_record), etcétera.