Que número estás a pensar?

dados
[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.

desenopensaunnumero

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.

entero-aleatorio

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í:

variable_numero_pensado
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

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:

comparador

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.

tomarvariable

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.

campo-de-texto

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

epista

texto

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

demasiadobaixo

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

cuandoboton1

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.

tres_sientonces

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”

sinosi

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

sinosi_fin

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.

temporizador

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.

tresintentos

Programación de bloques da app

programacionpensaunnumero

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?