Tutorial Snap! Clons

2016-08-23

Resum i objectius

En aquestes últimes entrades d’extensions:

  • Hem creat un Pong multijugador
  • Hem creat un laberint amb nivells

Ara, recuperarem el projecte del marcianitu i el cometa que vam posar d’exemple a la pràctica de les coordenades de l’escenari. El projecte no era realment cap joc però en podem reciclar el codi per crear-ne un: crearem un joc senzill d’un marcianitu que esquiva cometes. El marcianitu tindrà 3 vides i, cada cop que un cometa toqui el marcianitu, explotarà i li restarà una vida. S’acabarà el joc quan les vides siguin 0.

Tal com està programat el projecte del marcianitu i el cometa, només surt un sol cometa en tot el projecte. La modificació que farem és que, ara, en sortiran molts de cometes, però serà el mateix objecte: el que realment farem és clonar l’objecte “Cometa”. Això sí que serà una “amenaza de los clones”, hehe, “de los clones-cometa”.

joc-marcianitu-2

Escenari

En aquest nou projecte reciclat del marcianitu i el cometa, trobem que l’escenari ha canviat i molt: no en el seu disseny, que segueix sent negre; sinó en la seva programació. Ara, l’escenari, conté tres valuoses variables que haurem de crear.

  • La primera “Vides” que controla les vides del marcianitu. Arrenca el joc amb tres vides i, com veurem a la programació del marcianitu, cada cop que toca un cometa, en resta una.

  • Al segon barret de bandera verda, trobem la “Velocitat” dels cometes. Comencen baixant a -2 píxels o passos (en negatiu a l’eix de les y com veurem a la programació del cometa) i augmenten la seva velocitat cada segon fins que el valor de les vides és més petit que 1, és a dir, 0.

  • La tercera variable que hem programat és la de la “Freqüència” en que apareixen els cometes.

Per molt ràpid que vagin, si només en surt un de tant en tant, és massa fàcil i no té cap gràcia. La cosa és fer-los sortir, cada cop més ràpid i cap cop en major nombre, és a dir:

  • Controlant amb la “Velocitat” que s’augmenti en negatiu el valor de l’eix de la y.

  • Controlant amb la “Freqüència” que l’espera de la creació del clon entre una aparició i una altra sigui menor.

blocs-marcianitu-escenari

L’script de la bandera verda que controla la variable velocitat de l’objecte cometa i dels seus clons: veiem que atura el joc un cop les vides són més petites que 1, és a dir, quan les vides són 0.

L’script de la bandera verda que controla la variable freqüència, veiem que es repeteix fins que té un valor de 0.3. La programació de l’escenari determina què farà la variable programada però per veure l’efecte de la variable hem d’anar a la programació del cometa. La repetició, però, no la programem com la resta (fins que les vides siguin més petites que 1) perquè si el cometa espera és 0 o menys de 0, és a dir que no s’espera entre la creació d’un clon i d’un altre, se’ns omplirà la pantalla de clons i ja no podrem jugar més.

Per cert, a mi em va molt lent el joc, suposo que perquè hi ha molts clons… I com faig servir Iceweasel (Firefox de Debian) i no pas Chrome com es recomana, doncs deu ser per això que se’m clava el joc sovint fins al punt de tenir que aturar scripts del navegador…

Marcianitu

El nostre marcianitu no ha canviat tant com l’escenari en qüestió de blocs de programació. Segueix movent-se en el seu eix x controlat pel ratolí (d’esquerra a dreta) i té fixe el seu eix y per situar-lo a la part inferior de l’escenari.

Ara, però, el nostre marcianitu té programada una interacció amb el cometa.

  • Fins que les vides no siguin inferiors a 1, és a dir, 0, a més de moure’s i rebotar,

  • Si el marcianitu toca el cometa, augmentarà en -1 el valor de la variable “Vides”, amb el que restarà 1 al marcador de vides.

Com vèiem en altres pràctiques, no es pot restar amb els blocs de les variables: s’ha de restar sumant en negatiu i em sembla divertidíssim! :) Per cert, s’espera una mica per si comença a restar més vides de les que toca: prova de treure el bloc d’espera aviam què passa, és probable que perdis a l’instant totes les vides i s’aturi el joc.

blocs-marcianitu

Cometa-clon

El nostre cometa també ha canviat molt des de l’últim projecte: abans només en queia un de sol per exemplificar les coordenades y de l’escenari. Ara, en sortiran una pila! I aniran sortint fins que el marcianitu no perdi totes les vides. Ho vèiem a la programació de l’escenari, on s’atura el joc. El nostre cometa es clona a si mateix quan es prem la bandera verda.

  • Veiem que, un cop més, algú estarà repetint una acció fins que no ens quedin vides o, tècnicament, fins que el marcianitu no toqui tres cometes.

  • Dins el bloc de repetició, veiem que té l’espera programada amb la variable “Freqüència”. Com vèiem a la programació de l’escenari, aquesta variable fa que cada l’espera sigui més curta i, per tant, fa aparèixer més clons.

  • Just a sota de l’espera, descobrim el bloc que permet la creació dels clons. Està dins del bucle perquè sinó només en crearia un. I nosaltres volem clons fins que no hi hagi vides.

  • Si el fem amagar primer és perquè volem que mostri els clons i no l’original, que es quedaria clavat a la pantalla i faria lleig. Prova de treure el bloc amaga o posa un bloc mostra al seu lloc.

blocs-marcianitu cometa

Tot seguit, l’script que manega què fan els clons:

  • Quan una còpia o clon es crea, què volem que faci? Doncs li especifiquem amb aquest bloc. En el nostre cas, el cometa…

  • Ha d’apuntar avall perquè sembli que caigui. Canvia’l de posició amb la pestanyeta i veuràs que la cosa perd gràcia…

  • Després, volem que vagi a dalt de tot de l’escenari, és a dir, a la coordenada y -180 però que es mostri en una posició a l’atzar en l’eix x

  • Per això fem servir el bloc d’atzar que tenim a la categoria d’operadors. Prova de posar una posició fixa i veuràs quin joc més poc divertit…

  • Tot seguit, fem que canviï el vestit al primer vestit (en té dos i els segon és el de l’explosió vermella).

  • Com, a més, volem que es mostrin mides diferents, determinem la mida a l’atzar entre uns valors (o la meitat de l’original o un una meitat més gran de l’original).

  • A continuació, volem que caigui del cel fins que toqui al marcianitu o el terra, així que programarem les passes o píxels dins del bucle de repetició. La variable “Velocitat” la vèiem a l’escenari. Augmenta en negatiu l’eix de les y perquè el cometa cada vegada caigui més ràpid.

  • Si toca el marcianitu o el terra, canvia de vestit al vestit de l’explosió una miqueta, (just per veure’l: si no posem aquesta espera, no veurem el vestit de l’explosió perquè tot seguit s’esborra el clon. Però prova-ho si vols).

Ara, m’ha picat per posar-li una variable més que es digui “Punts” i programar el marcianitu perquè ens digui la puntuació al finalitzar cada partida.

Digues punts

Primer haurem d’anar a l’escenari i crear una nova variable “Punts”.

blocs-marcianitu punts

  • Agafem un altre bloc de barret “Quan la bandera verda es premi” i l’arrosseguem a l’àrea de treball de la programació.

  • Just a sota, assignem a la variable punts el valor de 0 i tornem a muntar un bucle de “repeteix fins que les vides siguin menys que 1”. Dins del bucle, posem una “espera d’un segon” i, tot seguit, un bloc de “augmentar la variable punts en 1”.

Ara, cada vegada que comenci el joc, els punts es posaran a zero i augmentaran a cada segon. Ho hem convertit en un joc de supervivència, hehe. Quants segons aguantaràs abans de ser colpejat per tres clon-cometes?

blocs-marcianitu vides

Snap-Practica-Extensions4-Digues-punts2-marcianitu-tall

Doncs la puntuació ens la donarà el marcianitu un cop hagi perdut les seves tres vides. Descobrim un nou bloc d’operadors que pot anar dins un bloc d’aparença “digues” per fer que el marcianitu ens digui la nostra puntuació final. Un cop ens ha dit la puntuació, s’atura el joc. Fi de la partida.

Atenció: si implementem que el marcianitu ens digui la puntuació, hem de procurar treure el bloc d’atura tot que tenim a l’escenari. Si el deixem, aturà el joc just quan les vides siguin menys que 1 i no veurem el que ens diu el marcianitu!

Per cert, m’agrada molt aquesta combinació de blocs aparença, operadors i variable: és molt diversa i colorida ;) Aquí el resultat a la pantalla:

joc-marcianitu-punts

Si cada punt és un segon… quants minuts i segons he durat sota la pluja de cometes? Mates creatives :) De fet, li podríem programar al marcianitu que ens ho digués en minuts i segons. I podríem canviar en nom de la variable per “Temps”. El marcianitu, però, ens hauria de dir alguna cosa com: “Has aguantat X segons!” o en cas de depassar un minut: “Has aguantat X minuts i X segons!”.

Juga al marcianitu!

Continuació

I per la propera, afegirem un menú al joc del marcianitu i l'atac dels clon-cometes!