====== Lecția 3: Mesaje. Broadcast și receive ====== Bine te regăsim la a treia lecție legată de condiții. Astăzi vei afla despre semnalarea unei condiții într-un alt bloc sau unui alt sprite folosind mesaje în Scratch. ===== Recapitulare operatori de condiție ===== Până să verifice instructorii [[:module:06-conditii-in-programare:lectia-02#lucru-pentru-acasa|lucrul pentru acasă de la lecția trecută]], hai să facem câteva exerciții scurte pe hârtie legate de operatori. Completează, pe caiet, zonele marcate cu puncte de mai jos cu operatori de forma: * ''>'' (mai mare decât) * ''='' (egal cu) * ''<'' (mai mic decât) * ''not ='' (nu egal cu) * ''and'' (ȘI) * ''or'' (SAU) if varsta ... 17 say "Ești major." if luna ... 2 ... luna ... 6 say "Este primavara." if zi ... "sambata" say "Azi merg la DigitalKids." if pet ... "pisica" ... pet ... "caine" ... pet ... "hamster" say "Animalul tau de casa este mamifer." if lifes ... 1 say "Ai murit. Incepe din nou jocul." if zi ... 8 ... luna ... 3 say "Azi este ziua femeii." if instructor ... "Teo" ... instructor ... "Flori" ... instructor ... "Ada" say "Suntem la modulul M6, condiții". if n mod 2 ... 0 say "Este număr impar." if viteza ... 340 m/s say "Ești mai rapid decat viteza sunetului." ===== 1. (tutorial) Folosire mesaje în Scratch ===== Mesajele în Scratch sunt transmise de la un sprite la alt sprite în momentul producerii unui eveniment. De exemplu, dacă un sprite a realizat o acțiune atunci dorește să comunice acea acțiune și altui sprite în forma unui mesaj. Pentru aceasta folosim blocurile "broadcast message" și "When I receive message", din setul "Events". Blocul "broadcast message" trimite un mesaj către toți cei care așteaptă mesaj. Blocul "When I receive message" așteaptă un mesaj să fie primit; programul este blocat în blocul "When I receive message" până când mesajul este blocat. Hai să vedem cum funcționează în [[http://scratch.mit.edu/projects/18937575/|exemplul Scratch de aici]]. Deschide exemplul și creează un remix în Scratch. Rulează programul în Scratch folosind steagul verde. Uită-te peste programul fiecărui sprite din Scratch. Dă click pe fiecare sprite din zona cu sprite-uri și apoi uită-te în program folosind meniul "Scripts". În exemplul de mai sus, ori de câte ori pisica atinge o minge, câinele spune un mesaj. Pentru acesta, la atingerea mingii, mingea execută acțiunea "brodcast minge-atinsa". Mesajul "minge-atinsa" este acum transmis către sprite-ul "câine". Aceasta așteaptă mesajul în blocul "When I receive minge-atinsa". În momentul primirii mesajului, funcție de numărul de mingi atinse, afișează un mesaj. Bravo, ai văzut cum funcționează mesajele în Scratch. ===== 2. Resetare scor și mingi ===== Acum că ai văzut cum funcționează mesajele în Scratch, hai să facem programul mai bun. Pentru început fă în așa fel încât, după ce pisica prinde cele trei mingi, să fie resetat scorul la zero și mingile să reapară. Fă în așa fel încât, după ce este atinsă ultima minge, adică după ce scorul devine 3, să aibă loc următoarele: * să fie resetat scorul la zero (adică să fie pusă variabila ''scor'' la valoarea zero) * să fie trimis un mesaj ''game-over'' folosind blocul ''broadcast''. În momentul în care o minge primește mesajul ''game-over'', folosind blocul ''When I receive game-over'' atunci mingea reapare. Trebuie să implementezi aceste schimbări pentru programul tuturor celor trei mingi. Poți face drag pe un program peste alt sprite ca să copiezi programul în acel sprite. ===== 3. Resetare poziție pisică ===== Continuă programul dinainte și fă în așa fel încât să fie pusă pisică în poziția centrală a planșei după ce toate mingile sunt atinse. În programul sprite-ului pisică trebuie să ai, de asemenea, un bloc ''When I receive game-over''. Când pisica primește mesajul ''game-over'', este plasată în poziția centrală a planșei. ===== 4. Mesaje diferite din partea câinelui ===== Continuă programul anterior și fă în așa fel încât câinele să afișeze mesajele următoare, după ce pisica a atins câte o minge: * Bravo, mai ai doua mingi de strans! * Bravo, mai ai o singura minge de strans! * Bravo, ai strans toate mingile. Cel mai simplu este să pui un set de blocuri ''if'' în programul sprite-ului câine. În conditii verifici dacă scorul este ''1'', ''2'' sau ''3''. ===== 5. Mai multe mingi ===== Continuă programul anterior și pune 5 mingi pe planșă. Poți da click dreapta pe sprite-ul minge și selecta opțiunea "Duplicate". Trebuie să ajungă acum scorul la 5 înainte să fie resetat iar câinele să spună, pe rând: * Bravo, mai ai patru mingi de strans! * Bravo, mai ai trei mingi de strans! * Bravo, mai ai doua mingi de strans! * Bravo, mai ai o singura minge de strans! * Bravo, ai strans toate mingile. Parcurge toate programele sprite-urilor și fă-le să meargă cu 5 mingi, nu doar cu 3. ===== Bonus 1: Scor cu cerculețe roșii ===== Vrem să afișăm mai frumos scorul. Pentru aceasta vom folosi sprite-uri în formă de cerculețe roșii mici (creează-le chiar tu). La început vom afișa 5 cerculețe roșii, apoi 4, apoi 3, apoi 2, apoi un singur cerculeț și la final nici unul. Un cerculeț dispare în momentul în care pisica atinge o minge. La resetare toate cerculețele reapar. Continuați programul și adăugați această funcționalitate: să ținem scorul cu cerculețele roșii. Pune cerculețele în stânga sus. Nu mai afișa variabila "scor"; este mai frumos să apară doar cerculețele. Cel mai bine scrii programul pentru un cerculeț, apoi îl duplici și îl modifici. Ai nevoie de trei blocuri ''When ...'' pentru fiecare cerculeț: * ''When green flag clicked'' * ''When I receive minge-atinsa'' * ''When I receive game-over'' ===== Bonus 2: Încă un sprite și alternanță la strâns mingi ===== Hai să strângem mingi cu mai multe sprite-uri. Mai pune pe planșă un sprite fluture. Vrem să facem așa: * pisica strânge o minge, apoi lasă pe fluture să strângă * fluturele stânge o minge, apoi lasă pisica să strângă. * și așa mai departe Adică vom folosi tastele săgeți să mutăm pisica și, după ce strângem o minge, vom controla fluturele (adică vom folosi tastele săgeți ca să mutăm fluturele). Și tot așa. Programul pentru fluture este similar celui pentru pisică. Copiază programul din pisică cu drag peste sprite-ul fluture. Este dificil să folosești mesaje. Cel mai bine, în funcție de tipul scorului, decizi ce faci: * dacă scorul este par atunci te miști, spre exemplu, cu pisica * dacă scorul este impar atunci te miști, spre exemplu, cu fluturele E nevoie de actualizări și în programul sprite-urilor de tip minge. Acestea trebuie să crească scorul dacă sunt atinse de pisică **SAU** de fluture. ===== Bonus 3: Joc la alegere ===== Gândește-te la un program simplu care să folosească mesaje și scrie-l în Scratch. ===== Lucru pentru acasă ===== Implementează [[http://www.ponggame.org/|jocul Pong]] în Scratch.