# Que número estás a pensar?

[CC0 Dominio Público. Pixabay.com]

## Obxectivo

Imos facer unha aplicación para adiviñar que número estás a pensar
Para iso aprenderemos:

- Que é unha variable e como manexala ( tomar e poñer )
- Comprenderemos como se xera un número ao chou ( random )
- Coñeceremos que é unha instrución condicional (bucle se-entón )
- Usaremos operacións de comparación

## Que número estás a pensar?

Imos facer un programa sinxelo pero eficiente. O programa pensará un número e nós temos que adiviñalo. Parecerá que o móbil pensa!

Para que o dispositivo Android poida facer isto correctamente temos que ensinarlle como facelo, paso a paso, engadindo bloques de código.

## Deseño da interface

Temos que crear unha interface para que a aplicación che pregunte un número e che vaia dando pistas dicindo se é demasiado alto, demasiado baixo, ou se finalmente acertaches o número secreto.

### Compoñentes no Diseñador:

1. Creamos unha Etiqueta, que chamamos EtiquetaNumero e cambiamos en propiedades o Texto para que apareza nela a palabra “Número: “. Ademais o dispositivo vai ter que “escoitar” cada número que lle digamos, para indicarnos se acertamos ou non.
2. Engadiremos un Campo de Texto. Servirá para que o xogador indique que número cree que pensou o programa. Nas súas propiedades en Pista escribe “Indica o teu número”.
3. Teremos que engadir un Botón co texto “Adiviña” para que o dispositivo saiba cal eliximos.
4. Creamos outra Etiqueta, que lle chamamos EtiquetaPista e cambiamos en propiedades o Texto para que apareza nela a palabra “Pista “.
5. Engadimos un compoñente Reloj1, que se atopa dentro de Sensores. Como o reloxo é un compoñente non visible, aparecerá fóra da zona visible do Visor. Chamarémolo Temporizador.

### O reloxo

Unha das propiedades máis importantes do reloxo é IntervaloDelTemporizador, que controla cada canto tempo se “dispara” o reloxo. Exprésase en milisegundos, e o seu valor inicial é 1000, ou o que é o mesmo, un segundo. Isto significa que cada segundo o reloxo dirá “Pasou unha unidade de tempo”. Se cambiamos o seu valor por 500, por exemplo, o reloxo avisará cada medio segundo.

Para esta aplicación definiremos o IntervaloDelTemporizador cun valor de 30000, e así lle daremos ao xogador a posibilidade de tentar adiviñar o número durante 30 segundos.

## Programación

### Xerar un número aleatorio

Cando xogamos a este xogo, que é o primeiro que facemos cando lle dicimos a un amigo que adiviñe que número estamos a pensar? Pensamos un número ao azar.

Imos ao editor de Bloques:

O primeiro que o programa ten que facer é pensar nun número. Neste caso imos indicar como debe pensar nun número entre 1 e 10.

Abriremos o caixón Matemáticas, e usaremos o bloque entero aleatorio entre. Teremos que especificarlle entre que dous números debe pensar o seu número, entre 1 e 10.

A continuación imos facer que o programa garde este número na súa memoria.

### Gardamos o número nunha variable

Unha variable é un espazo da memoria do dispositivo reservado para gardar datos que os nosos programas teñen que manexar durante o seu funcionamento. Para poder utilizar as variables de memoria é necesario en primeiro lugar darlles un nome.

Para iso abrimos o caixón Variables, inicializar global nombre como, podemos darlle á variable o nome número_pensado (fai clic enriba de nombre). É importante dar ás variables un nome descritivo, porque en programas máis complexos, con máis variables, facilitaranos saber para que serve cada unha.

Os bloques deben quedar así:

Con estes dous bloques dixémoslle ao o xogo que ten que pensar un número entre 1 e 10, e gardalo nunha variable da súa memoria, sen mostrarllo ao xogador.

### Pedimos un número ao xogador

Para comezar a xogar deberiamos pedirlle ao xogador que nos diga un número. Isto conseguirémolo por medio do Campo de Texto que creamos no Visor. O xogador irá escribindo números neste campo e o programa irá indicando se o número aleatorio xerado secretamente é maior ou menor ao que o xogador escribiu.

Polo tanto, cada vez que o xogador escriba o seu número e pulse o botón Adiviñar o programa vaino comparar co número secreto.

### Facer comparacións

Agora que xa temos o número pensado e o número que elixiu o xogador, a aplicación ten que comparar ambos números, para saber se acertou, ou se é maior ou menor.

En Control, sacamos o bloque Si — entonces

Dependendo do resultado da comparación a aplicación deberá facer unha cousa ou outra:

- Si se cumpre unha condición
- Entonces executa isto

Cun exemplo entenderase millor:

- Si numero_x>2
- Entonces escribe “numero_x é maior que dous”

Imos comparar dous números, o pensado e o que dixo o xogador.

### Comparamos os números

No caixón Matemáticas arrastramos o bloque comparador ata encaixalo co primeiro dos ocos do bloque Si — entonces:

Dentro do caixón Variables atópase o bloque tomar que arrastramos ata o primeiro oco do bloque azul de comparación, unha vez colocado eliximos que variable é a que queremos usar, despregando a lista de variables situada dentro do bloque tomar.

Agora que xa sabemos como consultar cal é o contido da variable numero_pensado, podemos modificar a comparación facendo clic no centro do bloque azul. Empezaremos avaliando se o número pensado é maior que o número do xogador.

No caso de que se cumpra a condición deberemos darlle ao xogador unha pista, dicíndolle que o número que nos dixo é demasiado baixo.

Co bloque poner imos asignar o valor “Demasiado baixo” ao texto da EtiquetaPista, para que o xogador o vexa na pantalla de xogo.

Crearemos os bloques para completar a instrución Si — entonces

Cando debemos facer a comparación? Cada vez que o usuario faga clic no Boton1, que ten o texto Adiviñar. Polo tanto, incluiremos todo o bloque anterior dentro do bloque cuando.Boton1.Clic

Haberá que facer tres bloques Si — entonces, un para cando o número sexa menor, outro para cando sexa maior, e o último para cando sexa igual, nese caso o xogador acertaría o número.

Observemos que en cada bloque azul o signo de comparación será diferente. Podemos duplicar os bloques Si — entonces completos (botón dereito enriba do bloque Si — entonces) e logo modificar os bloques azuis e fucsia para que se adapten a cada comparación.

### Bucles aniñados

Cada vez que o xogador pulsa o botón Adiviña o programa fai tres comparacións seguidas (é menor, é maior, e é igual). Con todo, só una delas será certa, así que non é necesario facer as tres preguntas. É dicir, se se cumpre a primeira condición non é necesario avaliar a segunda condición, nin a terceira. En realidade, non soamente non é necesario facer as tres preguntas, senón que non é tampouco conveniente, porque a aplicación fará sempre traballo inutilmente, facendo a aplicación máis lenta, menos eficiente.

Nota:

É importante que como programadores tentemos escribir un código tan eficiente e limpo como poidamos. Para iso hai que pensar un pouco cal é a mellor maneira de levar a cabo un proceso concreto, evitando liñas innecesarias ou redundantes, que afean o código.

No noso programa, para evitar as execucións de código innecesarias, imos utilizar sentenzas Si — entonces aniñadas, ou Si — entonces –si no. Só se executarán os bloques do si no cando NON se cumpra a condición do Si — entonces anterior:

- Si se cumpre unha condición
- Entonces executa isto
- Si no executa isto outro

Cun exemplo sería:

- Si numero_x>2
- Entonces escribe “numero_x é maior que dous”
- Si no escribe “numero_x é menor ou igual que dous”

De tal maneira que o bloque cuando.Boton1_Clic executarase moito máis rápido, ao evitar pasar por bloques sen necesidade.

### Uso dun reloxo para calcular o tempo

Un compoñente moi útil para controlar e xestionar a execución dos programas é o temporizador, ou reloxo. Grazas a este compoñente podemos definir cando suceden cousas, independentemente do que faga o usuario da aplicación. Tamén podemos controlar o tempo que duran os procesos que se están executando.

Neste caso utilizarémolo para limitar o tempo do que dispón o usuario para adiviñar o número pensado. Cando remate o tempo establecido o usuario non poderá seguir tentando adiviñar o número.

Para saber cando se cumpren os 30 segundos usaremos o bloque cuandoTemporizador.Temporizador ejecutar, que se atopa dentro do caixón do reloxo. Todo o que queiramos que suceda cando se cumpran os 30 segundos haberá que poñelo dentro deste bloque.

Poñeremos os bloques para que o xogo nos informe de que transcorreron os 30 segundos a través dunha mensaxe de texto. Como chegados a este punto xa non imos utilizar máis a EtiquetaPista, podemos reutilizala para mostrar ao xogador o texto de tempo esgotado nela.

## Proposta de mellora

Podemos facer que o xogador só dispoña de 3 intentos para adiviñar o número. Para facer isto temos que crear outra variable, Intentos, na que gardaremos o número de intentos que o usuario consumiu.

Inicialmente esta variable terá o valor cero, para indicar que non consumimos aínda ningún intento.

Despois, cun gran Si — entonces, indicaremos que facer cando aínda queden intentos, e que outra cousa facer cando xa se consumiron todos.

É importante que ao final do proceso de preguntas se sume 1 ao número de intentos, para que se reduzan os intentos restantes para a seguinte volta.

## Programación de bloques da app

## Reto:

Outra mellora sería poñer un botón para empezar de novo o xogo, é dicir, para que o móbil pense un novo número. Noutro caso, o xogador tería que saír da aplicación e volver entrar para que a aplicación pensase un novo número para xogar, e seguro que o xogador non estaría disposto a facer isto moitas veces.

Serías quen de facelo?

### App Inventor

### Prácticas

### Apps para Arduíno

### Licenza