08 Des

4. BJC: Snap!Lab – Wall, Number guessing, Gameboard

Estic cursant el MOOC The Beauty and Joy of Computing i està molt i molt bé. Ara, porta temps i esforç: en diuen “hard fun” (diversió dura, diguem). La cosa és que l’he anat fent però hi ha coses que no em surten. I aquí ve el repte de debò: el de no abandonar.

La quarta setmana implica diverses activitats: primer, construir un bloc “max-min” per després dibuixar un mur. Tot plegat, ens servirà per seguir amb el joc del tres en ratlla (Tic Tac Toe) de la segona setmana. A més, crearem un joc d’endevinar el número: “Number guessing game”.

PREDICATS I LÒGICA

Els blocs punxeguts són “predicats”. I sempre responen amb un d’aquests valors: cert o fals. I d’aquests blocs se’n diuen “booleans”. Si els cliquem, ens diuen o una cosa o l’altra. En aquesta unitat, el primer que ens fan crear al curs és un nou bloc de “més gran o igual que”.

Snap! (com Scratch) porta per defecte tres blocs de predicat per equivalències entre números. Els trobem a la categoria d’operadors: un de “més gran que”, un altre de “més petit que”, i un altre “igual que”. Aquest darrer, el vam fer servir al projecte del ratpenat volador interactiu per saber si la resposta de l’usuari era igual a la resposta correcta.

En aquest exercici, doncs, creem el nou bloc i comprovem que funciona posant-hi valors diferents. Per crear un bloc de predicat (punxegut), hem d’indicar, al crear-lo, a quina categoria de blocs volem que pertanyi. En aquest cas, a operadors. De nom, li posarem “>=” i crearem dues ranures numèriques per a cada costat dels símbols: un abans del “>” i un altre després del “=”. I ja el tenim! :)

A la tercera setmana, dedicada a predicats i condicionals, ja vam començar a trastejar predicats amb el bloc “mod” per saber si un número era parell o imparell. A dins del bloc, però, haurem d’indicar que reporti una cosa o altra (operador “or”). Una cosa que reportem és que el primer número (a) sigui igual al segon (b); l’altra cosa que reportem, és que el primer número (a) sigui més gran que el segon (b).

Et voilà! Aquí un nou bloc que ens permet comprovar si un número és igual o major que un altre :)  Per exemple, si li preguntem al bloc (posant els valors a les ranures i clicant-l’ho) “És 3 més gran que 5?”. La resposta serà: FALS.  Si li preguntem: “És 3 més petit que 5?” La resposta serà: CERT.

Hi ha moltes maneres de definir-lo perquè podríem usar condicionals. A mi m’agrada així i així el deixo.

Després d’aquest bloc de “>=”, se’ns fa crear un altre bloc “max-min”, que és un  bloc rodó. Els blocs rodons són “reporters” i això significa que sempre reportaran un valor. Només cal clicar sobre el bloc perquè ens doni aquest valor, que pot ser en nombres o en lletres. El nostre nou bloc “max-min” és “reporter” de la categoria de blocs d’operadors: els verd clar. I ens permet saber quin número és el més gran dels números que hi posem.

Dit d’altra manera, el bloc “max-min” permet posar-hi tres valors. I quan el cliquem, ens indica quin dels tres números és més gran. Després, se’ns fa fer altres malabarismes de lògica amb els operadors.

MUR DE MAONS

Per seguir exercitant l’abstracció, en aquest exercici de la quarta setmana hem de dibuixar un mur de maons. Per fer-ho, hem de crear primer els maons en bits ;) A més dels maons, també fabricarem el morter per tal de fer-los encaixar. Com al món físic!

La tècnica és la mateixa que pel tres en ratlla: primer creem un maó (brick) o un quadrat (tile) i després repetim les vegades que vulguem per tal posar mida al nostre gust. La dificultat del mur de maons és que hem de crear tres blocs nous: un “RowA” (un maó sencer), un “RowB” (un mig maó pels cantos) i un “mortar”, que és pel morter o separació entre maons.

M’ha agradat molt aquest exercici! :) Jo, que sóc experta en anar picant de cap contra totes les parets que trobo, per fi em puc fer una paret al meu gust.

ENDEVINA EL NÚMERO

Un joc de preguntes facilet per començar a programar és el d’endevinar el número. En anglès, “Number Guessing Game”. Programem un objecte per tal que 1) triï un número 2) ens pregunti quin número és i 3) que ens digui quin número era quan l’encertem. Som-hi!

Si ens fixem, s’ha creat un nom bloc d’aparença titulat “Number guessing game”. A dins, s’hi ha posat una variable “secret number” i se li dóna un valor random de l’1 al 10, és a dir, que el número que triï la màquina serà entre aquests valors. Tot seguit, un bloc de “repeteix fins” (fins que la resposta sigui el número triat, que no sabem, perquè l’ha triat la màquina a l’atzar). Per construir aquest bloc de predicat que comprova si la resposta és correcta, necessitem un bloc d’operadors “igual que”, el bloc de sensors de la “resposta” i el de variable “número secret”.

Mentre no responguem correctament, s’anirà repetint l’acció de preguntar i esperar. Ara bé, quan responem correctament al número que la màquina ha pensat, ens diu que “l’hem endevinat. Que el número era… ” I diu quin era. Per construir aquest bloc digues, necessitem un d’operadors que permet unir lletres, números, blocs… També necessitarem el bloc de la variable amb el número secret.

Ara que tenim la plantilla del joc bàsic, farem algunes millores d’interacció:

  1. El nostre objecte ha de donar la benvinguda al jugador/a i demanar-li com se diu. La resposta, amb el nom de la persona, ens servirà pel feedback de la resposta: farem que l’objecte ens digui si el número que hem posat és correcte o no. Cada cop que ho digui, farà servir el nom del jugador/a. Per exemple: “No, Maria, aquest no és el número secret. Prova de nou!” o “Molt bé, Maria, l’has encertat! El número secret era el 3”.
  2. També haurem de fer servir el nom del jugador/a quan la resposta no és correcta. Programarem que el nostre objecte respongui al jugador/a si el número que ha posat és més gran o més petit que el número secret: “No, Maria, el número secret és més gran. Prova de nou!”
  3. De moment, el nostre projecte només tria un número entre 1 i 10. Farem que el jugador/a decideixi quin és el número màxim, és a dir, de l’1 al 100, 100 serà el màxim; de l’1 al 500, 500 serà el màxim. (I aquí reciclarem el bloc “max-min” de l’exercici anterior).
  4. També haurem de crear una nova variable per saber quants intents ha trigat el jugador/a endevinar el número. Quan el jugador/a endevini el número secret, li farem dir a l’objecte el número d’intents.
  5. Finalment, hem d’apel·lar al nom del jugador/a quan el felicitem al encertar el número.
  6. Per posar-hi la guinda, se’ns demana que variem la resposta de l’objecte: si el jugador/a no encerta durant tres vegades, que no digui sempre el mateix. En una ocasió pot dir: “No, Maria, el número secret és més gran. Prova de nou!” i, en una altra ocasió, pot dir: “No, Maria, segueix sent massa gran. Prova un altre número”.

El meu joc no és perfecte però funciona: l’únic que no he acabat de polir és això que doni respostes diferents. Fa gràcia posar tot un joc a dins d’un sol bloc :) Aquí el meu “Number guessing game”. Li he fet bloc addicional d’introducció. Mola el bloc de label! No ve per defecte, has d’importar les eines. Clica a la icona del document i selecciona “Import tools”. I, apa, ja el tenim! :)

TIC TAC TOE  2

Per acabar les pràctiques d’aquest quarta setmana, hem de recuperar el nostre joc del tres en ratlla de la segona setmana i fer-li algunes millores. I no em surt! Quina frustració, cullera! :_(

Hem d’aconseguir que cada cop que posem l’objecte a un quadrant de la graella, ens digui a quin número de la graella estem. Si la graella fa 3×3, el bloc central serà el cinquè, per exemple. Hem de crear un bloc “which cell?” (quina cel·la?). Per construir-lo, hem de crear-ne dos més abans: un per “which row?” (quina fila?) i un altre per “which column?” (quina columna?).

Entenc el concepte però no sé com implementar-ho a Snap! He suposat que necessito un “For Block” (ja que no sabem de quina mida és el nostre tauler, i suposo que cada (i) és un quadrant de la graella…) però no entenc com vincular la posició x o y amb la cel·la que reporta.

El més frustant de tot és que he demanat ajut al fòrum però m’he quedat igual… En fi, aviam si algun dia el puc acabar: seria molt satisfactori. I segur que és una tonterieta, però m’he bloquejat completament… I tot i que penso en en Papert i la fòbia a les mates que em van fer agafar de peque, no aconsegueixo desbloquejar-me. Tampoc tinc un entorn molt favorable, diguem, així que tot bufa en contra, concentració i autoestima incloses.

[Actualització de l’11 de desembre de 2016: M’ha sortit! Gràcies, a en Robert, un instructor del curs. Ara, he suat la cansalada, eh! :) La cosa és que encara no he acabat el joc i el que s’acaba aviat és el curs… Aquí la imatge del bloc “which cell?”. Fi de l’actualització de l’11 de desembre de 2016]

En fi, seguim… De seguida pugui, repasso la cinquena setmana: el joc d’endevinar la paraula “Word guessing game” (que no vegis els malabarismes amb els operadors). La sisena setmana tractava de fer un joc nosaltres, un “Fun Project” (projecte divertit): jo vaig fer un penjat en anglès. Guanyes si encertes tres paraules: totes tenen 6 lletres perquè no en sé més… Aquí el joc del penjat: “Hangman Game”, en anglès.

Deixa un comentari

L'adreça electrònica no es publicarà. Els camps necessaris estan marcats amb *