Pràctica 2. Generant la seqüència

Hem de generar una seqüència que després haurem d'encertar. Per tant l'haurem de guardar en algun lloc per poder reproduir-la posteriorment. En principi necessitaríem una variable per cada element de la repetició. Si volem augmentar la dificultat del joc hauríem de crear tantes variables com la màxima seqüència que volguéssim fer servir. A més, quan volguéssim comprovar que la seqüència és correcta hauríem d'anar variable per variable comprovant els valors.

L'alternativa que funciona des de la versió 1.3 de l'Scratch és fer servir una llista. La llista és una estructura de dades que permet anar afegint dinàmicament elements. És a dir, pot anar creixent o minvant en funció de les nostres necessitats. A més es pot accedir a qualsevol element de la mateixa, mitjançant un índex. Simplement canviant aquest valor podem fer un recorregut per la llista i fer les comparacions que desprès necessitarem.

Les operacions amb llistes les trobarem a la categoria 'Variables' (color carbassa) i només seran visibles després de fer servir el botó 'Nova llista'.

Aquí teniu les diferents peces que trobareu quan feu una llista nova:

La primera instrucció afegeix un element al final de la llista. El següent grup d'instruccions permeten esborrar, afegir i canviar elements de la llista, donant la posició que volem modificar. També tenim una peça que ens permet accedir a un element determinat de la llista i una altre que ens diu la llargada de la llista, és a dir el número d'elements que té. A la versió 1.4 d'Scratch, es va afegir una peça que permet detectar si una llista conté un element.

L'índex per accedir o modificar la llista pot ser un número o també es pot indicar 'darrer' per accedir al darrer de la llista o en algun cas 'qualsevol' que retorna o accedeix a una posició a l'atzar dins de la llista. A la instrucció esborrar també trobarem 'tots' que permet buidar la llista.

Per generar la nostra seqüència anirem afegint mitjançant la peça 'afegeix … a …'. Ho farem tantes vegades com elements vulguem reproduir i el que posarem a la nostra llista seran els diferents colors dels elements. Farem servir un nombre a l'atzar entre 1 i 4 per triar el color i l'afegirem a la llista.

Una primera aproximació al codi per generar la llista amb 5 elements seria el següent:

La primera instrucció és buidar la llista; escollim 'esborra l'element tots de llista'. Després anem assignant els valors en funció del valor del nombre generat. Podem inspeccionar la llista marcant la casella que es troba al costat del nom de la mateixa. Noteu que podem manipular elements directament des d'aquest visualitzador. El botó '+' afegeix un nou element.

Proveu un altre mètode per emplenar la llista fen l'exercici 2

La flexibilitat de les llistes s'entén millor fent una modificació al nostre codi. Farem servir una variable que es dirà 'nivell' que ens indicarà la dificultat del joc. Com més elements tingui la llista més difícil serà de recordar. El nostre codi no varia pràcticament en res si fem servir aquesta variable. Només canviem el 5 per 'nivell'. Fer el mateix codi amb variables suposaria crear tantes variables com el màxim nivell que tinguéssim.

Ens falta construir el codi que agafa la informació de la llista i que reprodueix la seqüència. El que farem serà recórrer la llista variant l'índex i, amb el valor que obtindrem enviarem el missatge d'activació al botó. Recordeu que els nostres botons es diuen igual que els elements que hem afegit a la llista. És a dir si trobem 'VERMELL' hauríem d'enviar un missatge 'VERMELL' i el botó vermell respondrà il·luminant-se i sonant.

El codi per reproduir seria el següent:

Tenim un bucle que es repeteix tantes vegades com el nivell en el que estiguem. Simplement fitxem 'Index' a 1 al començar i anem incrementant el seu valor amb ''suma 1 a Index'. La clau d'aquest codi és la instrucció que envia el missatge. Accedim a l'element de la llista mitjançant la peça 'element Index de Llista' i enviem el missatge a tots els objectes del programa. Si fos, per exemple el 'GROC' seria equivalent a posar la peça 'enviar a tots GROC'. L'objecte 'GROC' respondrà canviant el seu aspecte i fent un so.

Per posar-ho tot en conjunt podem fer visible la variable Nivell amb un lliscador i afegir un botó de 'Començar'. Variant el valor del lliscador generem una seqüència nova. També hem canviat els objectes per uns dibuixos per fer-la una mica més atractiva.

L'aspecte d'aquesta pràctica serà el següent:

El botó 'Començar' genera la seqüència i desprès la reprodueix en funció del valor de 'nivell'. A més, hem introduït una variable que es diu 'Jugant' que ens indica si estem reproduint la seqüència o si estem esperant la resposta de l'usuari.

El codi del botó 'Començar' seria el següent':

Veurem en la propera pràctica la importància de definir aquesta variable per distingir l'estat del programa. Ara només ho farem servir per controlar que no es puguin prémer quan estem en la fase de reproduir la seqüència.

El codi modificat pels botons és el següent:

Hem fet algunes variacions en l'efecte del botó amb efectes 'ull de peix' i 'lluentor'.