Tutorial Snap! Laberint nivells
Objectius
Recordem que, al nostre projecte del laberint, el nostre escenari “Laberint” té només un vestit i que és força fàcil. Per complicar el joc, podem afegir altres vestits-laberint al nostre escenari. Així, quan l’abella arribi fins la flor, passarem a un nivell més difícil. Per posar nivells a un joc necessitarem els blocs de variables. Així serà el nivell 2 amb el nou vestit!
Si voleu reciclar el projecte, podeu fer-ne una còpia i desar-lo amb un altre nom amb l’opció “Anomena i desa”. Per exemple, enlloc de “Projecte laberint” es pot dir “Projecte laberint nivells”.
Escenari
Primer, crearem una variable que podem anomenar “Nivell” i farem que tingui un valor de 1 al començar el joc.
Quan es premi la bandera verda, es posarà el nivell a 1 i…
L’escenari canviarà el seu primer vestit “Laberint 1”, que és el més fàcil dels dos que hi ha.
Tot seguit, envia un missatge “Juga!” (l’envia l’escenari i només el rep l’abella).
A més, com veurem a l’objecte “Abella”, al nostre projecte s’envia un altre missatge: “Nivell” (l’envia l’abella i només el rep l’escenari). S’envia quan l’abella toca la flor per fer augmentar el nivell en 1 (1+1=2) i passar al següent escenari, el del nivell 2.
Abella
Com vèiem al projecte del laberint, l’abella, a més de moure’s amb les fletxes del teclat, interactua amb l’escenari i amb la flor amb els blocs de sensors: si toca el laberint, torna a la seva posició inicial i si toca la flor, diu “Polinització!” i s’atura el joc.
En aquest nou projecte, hem hagut de fer alguna variant. Per cert, no sé perquè, si no poso el bloc de “tecla premuda”, l’abella no torna a la posició inicial fins que deixa de tocar el color negre… Fes la prova, treu el bloc verd d’operadors “això i això” i el de “tecla premuda”.
En fi, que “Quan rebi el missatge “Juga!” que envia l’escenari, l’abella fa dues en paral·lel:
- “per sempre”,
- Si toca el color negre i alguna tecla està premuda,
- Enviarà el missatge de “Posició Inicial”.
A diferència del primer projecte que hem fet del laberint, ara, hi ha dos laberints i l’abella no pot tornar sempre a les mateixes coordenades perquè el lloc on va depèn del laberint en el que es troba. Aquest missatge, com veurem, servirà a l’abella per saber on ha d’anar, cap a on ha de mirar i quina mida ha de mostrar.
Com ara tenim dos laberints, farem acabar el joc al segon laberint (nivell 2) i no al primer (nivell 1).
La segona cosa que fa l’abella quan rep el missatge “Juga” és:
Esperar fins que toca la flor. Al tocar-la, comprova si el nivell és el 2. Si ho és, dirà “Fi de joc!” i aturarà el projecte.
Si no és el nivell 2 (i, per tant, serà l’1 perquè no n’hem programat cap més), l’abella dirà “Polinització” i enviarà tres missatges.
Al nivell 1, quan l’abella toca la flor, diu “Polinització” durant 2 segons i s’acaba el joc, però ara tenim dos nivells.
Quan es completa un nivell tocant la flor, s’envia el missatge “Nivell”, amb el que, com hem vista a l’escenari, aquest augmenta la variable “Nivell” i canvia el vestit del laberint al següent vestit que tingui.
Just després d’enviar el missatge “Nivell”, l’abella envia el missatge “Posició Inicial” que, com tot seguit veurem, reben tan l’abella com la flor, que varien mida i posició en funció del nivell al que estem jugant.
I per últim, després d’enviar el missatge “Posició Inicial”, envia el missatge “Juga!”, per tal de posar en funcionament un altre cop l’script que gestiona la interacció amb la flor “espera fins”. S’ha aturat després de tocar la flor al nivell 1 i si no enviéssim aquest missatge “Juga!”, al canviar de nivell, l’abella no faria la interacció amb la flor de nou al segon nivell.
Podem detectar que, al aturar-se el projecte, encara podem moure l’abella amb les fletxes de direcció. Per solucionar aquest problema, hauríem de crear una variable “Velocitat”, com hem fet a l’extensió anterior del Pong multijugador. Haurem d’assignar-li a la velocitat el valor de 10 quan comenci el projecte, fer moure l’abella a “Velocitat” passos i assignant la velocitat el valor 0 abans d’aturar el joc.
Mida i posició
En el nostre cas, posant un nou laberint, veurem que hem de fer més petita l’abella perquè sinó, de seguida toca el laberint i no es pot jugar. A més, la posició d’inici de l’abella i de la flor als dos laberints és diferent, així que haurem d’indicar a l’abella i la flor a quin laberint són perquè es mostrin a un lloc o a un altre i amb una mida o altra.
- “Quan la bandera verda es premi”, l’abella fixarà la mida al 100%,
- Anirà a unes coordenades i…
- Apuntarà a la dreta.
Aquests ordres són dins d’un bloc nou que hem creat que es diu “Abella Nivell 1”. Com vèiem en una pràctica anterior, podem crear els nostres propis blocs que, en llenguatge de codi, serien funcions. I són útils quan repetim comportaments: ens estalviem repetir blocs i és més eficient pel projecte que estem programant.
Hem creat aquest nou bloc, doncs, per no repetir tres blocs a dos llocs diferents. Les ordres de mida, posició i direcció són exactament les mateixes tan quan comença el joc (que és nivell 1) com quan l’abella toca el laberint al nivell 1. Però no són les mateixes ordres quan canviem de laberint: la mida, posició i direcció varien, així que ho indiquem a l’abella amb un condicional.
Com vèiem a l’escenari, al clicar la bandera verda, l’abella es posa a la mida i la posició necessàries per al nivell 1 amb el bloc “Abella Nivell 1”. Al rebre’l, l’abella, estableix la seva mida i posició en funció del nivell:
Si el nivell és igual a 1, “Abella Nivell 1”, (fixa mida a 100%, vés a coordenades i apunta dreta).
Si el nivell és igual a 2, que fixi mida a 60%, vés a les coordenades i apunta a la dreta.
Flor
Amb la flor farem el mateix que amb l’abella, dir-li on ha d’anar en funció del nivell. Per fer-ho, establim una condició:
Li crearem un bloc nou “Flor Nivell 1”, que la posicionarà a l’escenari i li donarà una mida del 100% quan la bandera verda es premi i quan, estant al nivell 1, toqui el laberint. El missatge s’envia des de l’abella.
Si som al nivell 2, la flor es farà més petita (75% de la seva mida original) i es mostrarà a una altra coordenada perquè el laberint és diferent i ha d’anar a un altre lloc.
Continuació
He fet una última entrada per crear clons amb el marcianitu :)