Es mostren els missatges amb l'etiqueta de comentaris programació. Mostrar tots els missatges
Es mostren els missatges amb l'etiqueta de comentaris programació. Mostrar tots els missatges

Càrrega automàtica de projectes

A vegades ens agradaria poder mostrar una sèrie de projectes o animacions d'Scratch "encadenats", es a dir, que es reprodueixin un darrera l'altre, en una mena de SlideShow, i sense necessitat de prémer la bandereta, ni anar-los carregant manualment. Aprofitarem la possibilitat de passar-li als projectes embedits el paràmetre autostart=true, de forma que es comencin a reproduir automàticament un cop carregats.

Així, la URL bàsica per carregar un projecte seria (NumProjecte és el número del projecte): 

https://scratch.mit.edu/projects/embed/NumProjecte/?autostart=true

Segons els recursos que tingui el projecte (i la connexió disponible) pot trigar més o menys a carregar-se, però un cop carregat, començarà automàticament la reproducció.

Un cop aconseguit això, barregem-ho amb una mica de JavaScript i HTML i tindrem un autoscratch!

<html>
<head>

<script type="text/javascript">
//temps de visualització en milisegons
var time = 10000; 

//Definim la primera i segona part de la URL
var URL1 = "https://scratch.mit.edu/projects/embed/"; 
var URL2 = "/?autostart=true"; 

//Definim idntificador de pàgina i creem llistat de projectes. 
//Entre cometes el núm del projecte. Podem afegir tants com vulguem. 
//Copiem la darrera línia, renumerem i copiam el núm de projecte de la web d'Scratch.

var pag_id = 0;
var pag = new Array();
    pag[0] = new Array("220105859");
    pag[1] = new Array("218414180");
    pag[2] = new Array("222879392");
    pag[3] = new Array("220421576");
    pag[4] = new Array("220420625");

 
function temp() {
 document.getElementById('frame').src = URL1 + pag[pag_id] + URL2; 
 setInterval(show, time);
}
    
 
function show(){
 pag_id = pag_id + 1; 
 if (pag_id == pag.length) {pag_id = 0}; 
 document.getElementById('frame').src = URL1 + pag[pag_id] + URL2; 
} 

</script>
</head>

<body onload="temp();">

<iframe id="frame" style="width:93%; height:93%;" frameborder="no" scrolling="auto" src="" ;>
</iframe>
<br><center><b><font face="verdana" size="6">
Els alumnes de 4t han animat el seu nom amb Scratch.</font></center></b>
</body>
</html>

Ho copiem en un editor de text i ho desem com un fitxer HTML i llestos. Podem llençar-ho en local, penjar-lo en algun servidor, personlitzar-ho...

Aquí podeu veure un exemple en funcionament!

Ideal per a jornades i presentacions, portes obertes, web's d'aula... se t'acut alguna altra utilitat? Comenta-la! #ForçaScratch

Edito: Veig que pot donar problemes si abans no hem donat permisos al navegador per executar flash a la web d'Scratch, ja que llença l'avís des d'un iframe. Si no veieu el projectes, aneu a la web d'Scratch, doneu permís al Flash i torneu a provar.

Programació: Llistes

Definició


Les llistes són contenidors de diferents elements d'informació. Aquests elements estan indexats, que vol dir que tenen associat un nombre d'ordre segons la posició que ocupen a la llista. Per tant, podrem referir-nos a ells per l'ordre que ocupen: el tercer element de la llista dies de la setmana és dimecres. Per tant, ens podem imaginar una llista com un àlbum de cromos, on podem accedir a cada cromo pel seu número; tot i això, a diferència dels àlbums, podem canviar cada cromo de posició, eliminar-lo de la llista, afegir-ne de nous...

Altres llenguatges de programació presenten estructures semblants a llistes: arrays, vectors, matrius... tot i que segons el llenguatge, pot haver-hi forces diferències d'un concepte a l'altre.

Com crear llistes a Scratch

Per crear una llista anem als blocs de dades i cliquem el botó Crea una llista. Com en el cas de les variables, haurem d'especificar el nom de la llista, i si és local o global. Un cop creada la llista, apareixeran els blocs que ens permet gestionar-la.

Per defecte, veurem la llista a l'escenari. Com fèiem amb les variables, podem amagar-la o no, clicant la casella de selecció de davant del nom de la llista. Un cop creada, la llista apareix buida, però podem omplir-la directament al seu monitor, clicant el signe +  i escrivint els diferents elements. També els podem eliminar directament clicant l'element i la creu que apareix al seu costat. 

Com gestionar llistes a Scratch

Les llistes, al igual que les variables, quedaran en l'estat en que estiguin en el moment de desar el programa. En alguns casos, això ja ens està bé, però en alguna ocasió ens pot interessar que el mateix programa canviï, afegeixi o suprimeixi elements. Per això tenim els diferents blocs de gestió de llistes, que ens permetrà crear-les al mateix programa, de forma que ens assegurem sempre de la integritat de les dades.


Veieu que podem afegir, eliminar o canviar qualsevol element de la llista (el primer, el darrer o qualsevol triat a l'atzar). També podem localitzar un element de la llista segons el seu índex, o bé, obtenir la llargada de la llista. Tots aquests blocs ens ajuden a modificar la llista segons ens convingui per a la creació del nostre programa.

Podem també importar i exportar el contingut de les llistes a fitxers de text pla, simplement clicant la llista amb el botó de la dreta en l'entorn de creació.

Exemples

Exemple 1
Crea una llista amb diferents salutacions. Fixa't en l'exemple: 


El següent programa et saludarà cada cop amb una de les frases de la llista triada a l'atzar. 



Exemple 2
Crea dues llistes: la llista mes amb els mesos de l'any (gener, febrer, març...) i la llista dia de la setmana (diumenge, dilluns, dimarts...). Prova el següent programa, que et dirà en quin mes i en quin dia som. Fixa't que fem servir el sensor (mes) actual, que ens torna un nombre, com a índex del valor a cercar en la llista.




Exemple 3
Amb les llistes es poden crear fàcilment jocs de preguntes/respostes. Crea una llista de Comarques i una de les seves capitals. Vigila que estiguin correctament ordenades! També hauràs de crear una variable que ens indicarà quina pregunta estem fent.


El joc ens preguntarà per una comarca de la llista (un nombre triat a l'atzar entre 1 i la llargada de la llista). Si el nom escrit correspon a l'element amb el mateix nombre de la llista de capitals, haurem encertat.


Exemple 4
Al joc Endevina la bandera juguem amb una llista ordenada segons les disfresses del personatge. 
Ens pregunta per una bandera i si s'encerta, l'afegim a una llista de control per evitar repetir la pregunta. 

Programació: Definir els nostres blocs

Definició

En els diferents llenguatges de programació existeixen procediments, subrutines o funcions, que no és res més que un petit programa que és utilitzat dins d'un programa més gran. Tot i que no son exactament el mateix concepte, per al nostre cas els podem asimilar.

Utilitzar funcions ens ajuda a reduir el còdi i a fer més fàcil entendre'l, mantenir-lo i depurar-lo.

Si per exemple, vull dibuixar un tauler d'escacs, no em preocupare de dibuixar un quadrat 64 vegades, si no que en programarè un prodediment "fill", separat del codi general del programa, i utilitzaré aquest procediment separat per dibuixar els quadrats:
  • Definiré un procediment que dibuixi un quadrat blanc i li posaré nom: [quadrat_blanc]
  • Definiré un procediment que dibuixi un quadrat negre i li posaré nom: [quadrat_negre]
  • Crearé el programa, on aniré cridant els procediments [quadrat_blanc] i [quadrat_negre] alternativament.

Com crear nous blocs a Scratch

A l'Scratch, com no podia ser d'una altra forma, els procediments o funcions tenen també el seu bloc corresponent. Per crear-los, cliquem a la patela Més blocs i cliquem el botó Crea un bloc.


Haurem d'assignar un nom al nou bloc, i un cop acceptat , passarem a definir-lo, colocant a sota de la definició els blocs que vulguem que s'executin en utilitzar-lo.



Un cop definit el nou bloc, podem utilitzar-lo dins el programa del personatge.


 A més de crear blocs simples, tenim també la posibilitat de passar paràmetres a la seva execució. D'aquesta manera podem crear un procediment més flexible i més fàcil de reutilitzar.




Exemples

Si volem tenir un personatge que salti quan el cliquem amb el ratolí o quan pitgem la fletxa amunt, podem definir el moviment de salt en un bloc, i utilitzar el mateix programa amb els dos esdeveniments. Quan volguem canviar l'alçada del salt, els efectes, ho tindrem tot concentrat.


En el joc de Pillar cuques, definim les noves cuques amb un nou bloc, que agrupa tots les accions necessàries: posicionar a l'atzar, triar el dibuix, el color i la mida.... i el cridem en crear clons:


En aquest altre exemple reprenem el quadrat amb un costat com a paràmetre. Ara, per anar canviant el costat, ens proveïm d'una variable que anem incrementant.


Programació: Còpia de personatges o clons

Definició
Clonar un objecte o personatge vol dir fer-ne una còpia. En programació és molt útil la clonació ja
que així ens preocupem només de crear i programar el primer objecte: com es mourà, com respondrà a diversos esdeveniments o sensors... Si necessitem més còpies del personatge el clonem, i cada còpia conservarà les característiques programades per l'objecte original. És una forma senzilla de reutilitzar codi.

Si volem que els clons apareguin en diferents llocs o que es moguin o actuïn de forma diversa, ho podem programar amb l'atzar, o bé podem seqüenciar-los amb una variable que els faci actuar en funció del seu número.

Com treballar la còpia de personatges amb Scratch? 
En treballar amb còpies seguim normalment un mateix patró:
  1. Creen la còpia del personatge
  2. Programem què ha de fer cada una de les còpies
  3. Esborrem la còpia
Per crear els clons utilitzem el bloc crea una còpia de jo mateix. Podem posar el bloc dins d'un repeteix, si volem un número determinat de clons, o bé dins d'un per sempre, si volem que vagi fent les còpies contínuament. La còpia apareix a la mateixa posició que el personatge original, i desapareix quan aturem l'execució del programa.


Per definir què ha de fer cada còpia utilitzem el bloc quan una còpia meva comenci. Sota seu enganxarem els bloc amb el programa que volem que realitzi cada clon. Segueixen les mateixes normes que la resta de personatges d'Scratch: responen als mateixos esdeveniments i accions que l'original.


Un cop acabada la feina a fer, si hem de fer desaparèixer el clon, el millor és suprimir-lo. Ho farem amb el bloc esborra aquesta còpia. Això és així per què Scratch té un límit de 300 clons funcionat alhora, per tal de no esgotar els recursos de l'ordinador.


Els clons o còpies apareixen a la versió 2.0 d'Scratch. Fins a les hores, si volíem fer sortir diversos personatges idèntics no teníem més remei que duplicar el personatge un cop programat.

Exemples
En el primer exemple, cada cop que premem la tecla espai es crearà un clon. Quan hagi estat crear, es situarà en un lloc a l'atzar, i canviarà la mida i el color.


En el segon exemple els clons es creen en fer clic al personatge. Un cop creats, els clons es desplaçaran fins a tocar la vora, moment en que el personatge copiat desapareix. Aquest exemple demostra que els clons conserven totes les característiques del personatge original: si cliqueu un dels clons, a la seva vegada es clonarà.


Aquest altre exemple demostra la limitació dels 300 clons. El programa de la esquerra crea un clon, que va dient el seu número. En arribar a 300, la copia s'atura (en realitat, arriba fins a 301; l'original no compta com a clon).  En canvi, en el de la dreta, els clons poden ser infinits, ja què, un cop han fet la feina, els suprimim.


En aquest últim exemple, controlarem la posició de cada una de les còpies amb una variable. Després utilitzem la seva posició per tal que en clicar el clon ens digui el seu número; cada clon, per tant, actua de forma diferent. (En el projecte Caixa de ritmes, teniu aquest exemple portat a l'extrem, amb llistes en comptes de variables).


Molts dels jocs de CrearJocs utilitzen clons: Pillar cuques, Flappy Birds, Invasió d'Asteroides... Pots analitzar-los per veure diferents formes d'utilitzar les còpies.

Programació: Enviar missatges (Broadcast)

Definició

Es normal que, en un determinat moment, vulguem que els nostres personatges "manin" accions a altres personatges, escenaris, etc... En aquestes ocasions utilitzem l'enviament de missatges o broadcast.

En arribar un moment o condicions determinades, un personatge enviarà un missatge a la resta d'objectes del programa, i aquells que han estat programats per respondre a aquest missatge, executaran les seves accions.

Aquest sistema de broadcast és la millor forma de sincronitzar accions en el nostres programes, tot i que també es pot utilitzar com eina per a reutilitzar codi, com a eina de recursivitat...

En altres llenguatges de programació podem veure estructures semblants: calls, subrutines, definició de funcions... tot i que poden tenir altres característiques que aquests missatges senzill no tenen.


Com treballar boadcasting a l'Scratch?

A Scracth disposem de tres blocs que ens permeten gestionar els missatges:


El bloc [envia a tots "missatge"] envia un missatge, i continua amb l'execució dels blocs de sota immediatament.
El bloc [envia a tots "missatge" i espera] envia un missatge, i atura l'execució de la resta de blocs del programa, fins que el personatge que respon no acabi les accions relacionades amb el missatge. Llavors, continuarà executant els blocs de sota.
El bloc [quan rebi "missatge"] és el que ens permet definir què ha de fer el receptor en rebre el missatge. Tot personatge que tingui aquest bloc està esperant a que es produeixi el missatge, i actuarà immediatament.



Per tant, per a realitzar crides d'aquest tipus, cal que programem l'esdeveniment [envia a tots "missatge"] en el personatge emissor i el programa que volem que s'executi en rebre la crida [quan rebi "missatge"] en el personatge receptor.


Exemples

Els missatges són una bona forma de interactuar entre personatges. A l'exemple següent, el gat envia un missatge en atrapar el ratolí, i aquest es queixarà i desapareixerà,


Quan treballem diàlegs és molt millor utilitzar missatges que provar de sincronitzar-ho per temps, ja que és molt més flexible, i ens permetrà anar canviant els diàlegs sobre la marxa, sense necessitat de tornar a sincronitzar el temps. En aquests cas, hem fet que Pico enviï un missatge de diàleg a Giga, i que esperi a que ella acabi per continuar; després li envia un segon missatge; finalment el missatge d'esternudar tots dos (sincronitzat) l'envia Giga.


En aquest altre exemple utilitzem els missatges com a definició de funció, o com una subrutina, amb la intenció d'estalviar-nos haver de repetir l'escriptura de codi i per tal que el programa quedi més compacte i fàcil de modificar.


Programació: repeticions (Iteracions)

Definició
Les repeticions (o iteracions en altres llenguatges de programació) són molt comuns en els jocs i altres programes:
  • El personatge del joc fan una sèrie d'accions contínuament.
  • Cada 10 segons canviem l'escenari.
  • Un comptador de temps resta 1 cada segon.
Però, en el cas d'Scratch, moltes vegades també controlem l'estat de sensors o variables dins de blocs de repetició:
  • Controlem que el temps arribi a 0 per dir que el joc s'ha acabat.
  • Esperem que l'usuari premi una tecla
  • Si un personatge toca un altre, guanya un punt 

Com creem repeticions amb Scratch?
Per crear repeticions amb Scratch utilitzem bàsicament 2 blocs:


Dins del bloc posarem ordenades les accions que volem que es repeteixin. En el cas del bloc repeteix__vegades, les accions es repetiran el nombre indicat de vegades i després continuarà executant els següents blocs. En el cas del bloc per sempre, es repetiran indefinidament fins que no ho aturem.


Exemples

En el primer exemple, farem que el gat es mogui  4 vegades a dreta i esquerra i que indiqui la seva posició. Després, miolarà i dirà "Estic cansat!!!". Fixeu-vos que afegim els blocs que volem que el personatge faci després de la repetició enganxats a sota del bloc, ja que els blocs s'executen de dalt a baix.


Aprofitant que els polígons regulars tenen costats i angles iguals, amb el bloc repeteix podem dibuixar-ne qualsevol d'ells. Per fer ho hem de dibuixar repetidament un costat i girar un cert angle (360 dividit pel nombre de costats). Aquí ens un hexàgon, però segur que pots fer un octògon, un triangle...


Aquest altre és l'exemple típic per fer que un personatge sembli camini o voli. Tenim diversos vestits i els anem canviant contínuament dins un bloc repeteix. Com que volem una repetició contínua, fem servir el bloc per sempre.



Ara farem servir un bloc especial, repeteix fins <__>, que indica que els blocs s'aniran repetint fins que la condició indicada sigui certa. Després s'executaran els blocs següents. És una bona forma de crear un marcador de temps!


Un altre ús habitual del per sempre és el control de les tecles en un joc. El definim dins d'un per sempre amb un bloc condicional associat, perquè és necessari estar contínuament a l'aguait de l'estat de les tecles. Aquí teniu la definició d'un personatge que es mou a dreta i esquerra; primer el situel, i llavors, contínuament esperem a que la tecla sigui premuda per a realitzar l'acció.


Programació: condicionals

Definició
Els condicionals són estructures de programació que responen a una pregunta o condició. Nosaltres mateixos estem prenent decisions cada dia guiats per sentències condicionals: 
  • Si són les 8, llevat per anar a l'escola!
  • Si s'ha fet fosc, encén el llum!
  • Si el semàfor està vermell, aturat!

En un condicional hi ha sempre una condició o pregunta que es pugui contestar amb CERT o FALS i una o diverses accions que cal fer si la condició es certa. Per programar un condicional...
  1. Pensarem bé la pregunta o condició.
  2. Li direm al programa que volem que faci SI la condició és CERTA.
  3. No és obligatori, però també podem dir-li que volem que faci SI NO és CERTA.
Aquesta és la estructura típica d'un bloc condicional:
SI < Pregunta o condició >
    [Accions a realitzar si és CERT]
SI NO
    [Accions a realitzar si és FALS]

Com treballar amb blocs condicionals a l'Scratch?
 Disposem de diversos blocs amb condicions, però els més importants són el SI i el SI - SI NO:

Com a condicions, podem utilitzar o bé sensors, o bé operadors, col·locant-los dins del lloc adequat. Penseu sempre que esteu fent una pregunta, que s'ha de poder contestar amb CERT o FALS.


Dins del bloc, col·locarem les accions que volem que es realitzin si la condició es compleix (la resposta a la pregunta és CERT). En l'exemple de sota, si premem el botó del ratolí es realitzaran les accions de dins el bloc, i l'Scratch saltarà cap amunt.


Un cop avaluada la condició i realitzades o no les accions, Scratch continua executant els blocs que hi hagi a sota del condicional. Hagi saltat o no, l'Scratch s'esperarà un segon.
 

Si és un bloc SI - SI NO, a la part superior coloquem les accions a realitzar si la condició es compleix (CERT), i a la part inferior les accions a realitzar si no es compleix (FALS). Si el temps és igual a 0, l'Scratch dirà S'ha acabat el temps, si no, dirà Encara queda temps!



Cal destacar que els condicionals s'executen només una vegada, a no ser que estiguin dins d'un bloc PER SEMPRE o REPETEIX, o bé si utilitzem el bloc PER SEMPRE SI. A efectes de programació, els dos conjunts de bloc següents fan el mateix.


Exemples 

Cada cop que cliquem el ratolí, Scratch dirà Clic!



Un ús habitual dels condicionals és controlar l'estat d'una variable i decidir que fer segons el seu valor. Aquí teniu un senzill comptador de temps, que atura el joc si el temps és igual a 0.


En el següent exemple, l'Scratch s'anirà movent, fins trobar una vora, llavors farà mitja volta i seguirà movent-se. Utilizem el sensor tocant vora com a condició del bloc SI. 


En el següent exemple, utilitzem el bloc SI NO, per simular gravetat en una caiguda; si premem el ratolí l'objecte puja, si no, baixa. S'ha afegit també moviment a esquerra i dreta amb blocs SI simples.