
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:
- 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.
- 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”.
- Teremos que engadir un Botón co texto “Adiviña” para que o dispositivo saiba cal eliximos.
- Creamos outra Etiqueta, que lle chamamos EtiquetaPista e cambiamos en propiedades o Texto para que apareza nela a palabra “Pista “.
- 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?