În lucru: lecțiile se refac de la capăt. Lecțiile noi ale clasei: lecțiile noi ale clasei a VI-a →
Invatare Atomica

Evenimente in Scratch

Progres lectie:
0%
🎯

Obiectivul lectiei

Proiectele tale Scratch nu reactioneaza la nimic... Nu stii cum sa pornesti codul... Totul se intampla simultan si haotic... Sprite-urile nu pot comunica intre ele...

Dupa aceasta lectie vei putea:

  • Sa folosesti blocurile de evenimente pentru a porni un script (steag verde, tasta, click pe sprite)
  • Sa programezi actiuni declansate de apasarea diferitelor taste
  • Sa trimiti si sa primesti mesaje intre sprite-uri (broadcast/receive)
  • Sa sincronizezi actiunile mai multor sprite-uri folosind mesaje
  • Sa creezi interactiuni intre utilizator si program prin intermediul evenimentelor

Incearca singur!

🎮 Incearca tu!

Provocare: Creeaza un personaj controlabil!

Inainte sa invatam teoria, hai sa experimentam cu evenimente! Vei crea un personaj pe care il poti controla cu sagetile si care reactioneaza la click.

  1. Deschide Scratch si alege un sprite (de exemplu, pisica implicita sau un personaj la alegere)
  2. Trage blocul galben "when green flag clicked" in zona de cod
  3. Sub el, adauga un bloc albastru "move 10 steps"
  4. Apasa pe steagul verde. Ce se intampla? Personajul se misca doar o data!
  5. Acum inlocuieste tot codul cu: "when space key pressed" urmat de "move 10 steps"
  6. Testeaza apasand Space. Personajul se misca la fiecare apasare!
  7. Adauga: "when this sprite clicked" urmat de "say Hello! for 2 seconds"
  8. Click pe sprite. Observa cum reactioneaza!
EXEMPLU COMPLET (3 scripturi separate):

// Script 1 - Miscare cu Space
when [space] key pressed
move (10) steps

// Script 2 - Salut la click
when this sprite clicked
say [Hello!] for (2) seconds

// Script 3 - Reset la start
when green flag clicked
go to x: (0) y: (0)
Observa: Fiecare bloc galben de eveniment porneste un script separat! Poti avea mai multe scripturi care ruleaza simultan.
💡 Indiciu #1: Unde gasesc blocurile galbene? ▶
Blocurile de evenimente sunt in categoria "Events" (galbena) din meniul din stanga. Au forma speciala cu "cocoasa" in partea de sus - arata ca o cheie care porneste ceva.
💡 Indiciu #2: De ce nu merge cand apesvSpace? ▶
Asigura-te ca ai dat click pe fereastra Scratch (zona de previzualizare)! Daca ai cursorul in alta parte, tastele nu vor fi detectate.
💡 Indiciu #3: Cum fac sa se miste continuu? ▶
Pentru miscare continua, pune blocul "move" intr-un bloc "forever" (din categoria Control - portocaliu). Asa se va misca la nesfarsit!

🌟 Provocare Bonus (optional)

Incearca sa adaugi 4 scripturi pentru sagetile sus, jos, stanga, dreapta! Fiecare sageata ar trebui sa miste personajul in directia corespunzatoare. Indiciu: Foloseste "change y by 10" pentru sus/jos si "change x by 10" pentru stanga/dreapta!

1

1. Continut

⚡
Ce sunt Evenimentele?
Definitie: Un eveniment este ceva ce se intampla si porneste executia unui cod. Este punctul de start pentru o secventa de actiuni. Fara evenimente, codul nu stie CAND sa ruleze!
Analogie din viata ta: Evenimentele sunt ca alarma de dimineata! Cand suna alarma (eveniment), tu incepi rutina de dimineata (cod): te scoli, te speli, faci micul dejun. Fara alarma, nu ai sti exact cand sa incepi!

In Scratch, blocurile de evenimente sunt de culoare GALBENA (sau aurie) si au o forma speciala - par a avea o "cocoasa" in partea de sus. Asta le diferentiaza de celelalte blocuri si arata ca sunt "capul" unui script.

Regula de aur: FIECARE script trebuie sa inceapa cu un bloc de eveniment! Nu poti pune blocuri albastre (miscare) sau mov (aspect) singure - ele trebuie atasate la un eveniment galben.
Poti avea multe scripturi diferite pentru acelasi sprite! Fiecare script incepe cu propriul eveniment si poate rula independent de celelalte.
2

2. Continut

🚩
Evenimentul "When Green Flag Clicked"
Definitie: Acesta este cel mai important eveniment in Scratch! Blocul "when green flag clicked" porneste codul IMEDIAT ce apesi pe steagul verde din coltul de sus al scenei.
when 🏴 clicked
← Apare asa in Scratch

Cand se foloseste?

  • Initializare: Pentru a seta pozitia initiala a sprite-urilor
  • Reset: Pentru a reseta scorul sau variabilele la 0
  • Start animatii: Pentru a porni o animatie automata
  • Muzica de fundal: Pentru a porni sunetul de inceput

📋 Exemplu: Pregatirea unui joc

when 🏴 clicked
go to x: (0) y: (0)
show
point in direction (90)

Explicatie: La inceputul jocului, personajul se muta in centrul scenei (0, 0), devine vizibil, si se intoarce spre dreapta (90 grade). Gata de start!

Daca pui "forever" direct sub "when green flag clicked", codul se va repeta la nesfarsit! Foloseste asta pentru animatii continue, dar atentie - poate incetini programul daca pui prea multe comenzi grele intr-un forever.
3

3. Continut

⌨️
Evenimentul "When Key Pressed"
Definitie: Blocul "when [space] key pressed" porneste codul atunci cand utilizatorul apasa o anumita tasta pe tastatura. Este esential pentru jocuri interactive!
when [space ▼] key pressed
← Poti schimba tasta din meniul dropdown

Taste disponibile:

Sagetile: up arrow, down arrow, left arrow, right arrow
Litere: a-z (toate literele alfabetului)
Numere: 0-9
Speciale: space, enter

🎮 Exemplu: Control cu sagetile (4 directii)

when [up arrow ▼] key pressed
change y by (10)

---

when [down arrow ▼] key pressed
change y by (-10)

---

when [right arrow ▼] key pressed
change x by (10)

---

when [left arrow ▼] key pressed
change x by (-10)

Explicatie: 4 scripturi separate! UP creste Y (urca), DOWN scade Y (coboara), RIGHT creste X (dreapta), LEFT scade X (stanga). Astfel ai control complet!

Pentru sarit, foloseste "when [space] key pressed" urmat de "change y by 50" apoi "wait 0.1 seconds" apoi "change y by -50". Asta creeaza un efect de salt!
Nu pune toate comenzile de miscare intr-un singur script cu "if key pressed"! Este mai simplu sa faci 4 scripturi separate cu "when key pressed" - asa poti apasa mai multe taste simultan pentru miscare diagonala!
4

4. Continut

🖱️
Evenimentul "When This Sprite Clicked"
Definitie: Blocul "when this sprite clicked" porneste codul atunci cand utilizatorul da click cu mouse-ul pe sprite-ul respectiv. Perfect pentru butoane si obiecte interactive!
when this sprite clicked
← Se activeaza la click pe sprite

Utilizari practice:

  • Butoane de start/stop: Creeaza un buton "Start Joc" care porneste jocul
  • Obiecte colectabile: Monede care dispar si adauga puncte cand sunt click-uite
  • Dialog interactiv: Personaje care vorbesc cand dai click pe ele
  • Animatii declansate: Obiecte care se animeaza la click

💰 Exemplu: Moneda colectabila

when this sprite clicked
play sound [coin ▼]
hide
broadcast [moneda_luata ▼]

Explicatie: La click, moneda face sunet, dispare (hide), si trimite un mesaj "moneda_luata" care poate fi receptionat de alt sprite (de ex. scorul) pentru a adauga puncte!

🗣️ Exemplu: Personaj vorbitor

when this sprite clicked
say [Salut! Vrei sa jucam?] for (2) seconds
wait (0.5) seconds
say [Apasa pe steagul verde!] for (2) seconds

Explicatie: Personajul are un dialog simplu cand dai click pe el. Perfect pentru NPC-uri (non-player characters) in jocuri!

Poti combina "when this sprite clicked" cu "if...then" pentru a crea conditii! De exemplu: "if points > 10 then show secret message".
5

5. Continut

🎭
Evenimentul "When Backdrop Switches"
Definitie: Blocul "when backdrop switches to [backdrop1]" porneste codul atunci cand fundalul (backdrop) scenei se schimba la un anumit fundal. Util pentru niveluri si scene diferite!
when backdrop switches to [backdrop1 ▼]
← Alegi fundalul din meniu

Cum functioneaza sistemul de fundaluri:

  1. Creezi mai multe fundaluri in editorul de Stage (zona din dreapta jos)
  2. Numesti fiecare fundal relevant: "Nivel1", "Nivel2", "GameOver", etc.
  3. Folosesti "switch backdrop to [Nivel2]" pentru a schimba fundalul
  4. Sprite-urile detecteaza schimbarea cu "when backdrop switches to [Nivel2]"

🎮 Exemplu: Sistem de niveluri

// Pe Stage (fundal):
when 🏴 clicked
switch backdrop to [Nivel1 ▼]

---

// Pe sprite (jucator):
when backdrop switches to [Nivel1 ▼]
go to x: (-200) y: (-100)
say [Nivel 1 - Colecteaza 5 monede!] for (3) seconds

---

when backdrop switches to [Nivel2 ▼]
go to x: (-200) y: (100)
say [Nivel 2 - Mai greu!] for (3) seconds

Explicatie: La fiecare nivel nou (fundal nou), jucatorul este mutat intr-o pozitie de start si primeste instructiuni. Asa creezi jocuri cu mai multe niveluri!

Pentru a avansa la urmatorul nivel automat, foloseste: "when score = 50 then switch backdrop to [NextLevel]". Combina varibilele cu fundalurile pentru progresie automata!
6

6. Continut

📡
Mesaje: Broadcast si Receive
Definitie: Mesajele permit sprite-urilor sa comunice intre ele! Un sprite trimite un mesaj cu "broadcast [mesaj]", iar alte sprite-uri il receptioneaza cu "when I receive [mesaj]" si reactioneaza.
broadcast [start_joc ▼]
← Trimite mesajul (ca un strigat)
when I receive [start_joc ▼]
← Asteapta mesajul (ca o ureche)
Analogie din viata ta: Broadcast este ca atunci cand strigicatre prietenii tai "PAUZA!" si toti se opresc simultan. Nu trebuie sa mergi la fiecare in parte - strigatul ajunge la toti odata!

Cum creezi mesaje noi:

  1. Click pe blocul "broadcast" sau "when I receive"
  2. Din dropdown, alege "new message"
  3. Scrie un nume descriptiv: "start_joc", "game_over", "nivel_terminat", "inamici_spawn"
  4. Mesajul va aparea acum in dropdown-ul tuturor sprite-urilor!

🎯 Exemplu: Game Over coordonat

// Sprite Jucator (detecteaza game over):
when 🏴 clicked
forever
if <touching [Inamic ▼]?> then
broadcast [game_over ▼]

---

// Sprite Scor (reactie la game over):
when I receive [game_over ▼]
say [GAME OVER!] for (3) seconds
stop [all ▼]

---

// Sprite Muzica (reactie la game over):
when I receive [game_over ▼]
stop all sounds
play sound [gameover_sound ▼] until done

Explicatie: Cand jucatorul atinge inamicul, trimite "game_over". Instant, 3 sprite-uri diferite reactioneaza: scorul arata mesajul, muzica se schimba, totul se opreste. Coordonare perfecta!

💬 Exemplu: Dialog intre 2 personaje

// Sprite Pisica:
when 🏴 clicked
say [Salut! Cum te cheama?] for (2) seconds
broadcast [raspuns_caine ▼]

---

// Sprite Caine:
when I receive [raspuns_caine ▼]
wait (0.5) seconds
say [Ma cheama Rex!] for (2) seconds
broadcast [continua_pisica ▼]

---

// Sprite Pisica (continua):
when I receive [continua_pisica ▼]
wait (0.5) seconds
say [Incântat de cunostinta, Rex!] for (2) seconds

Explicatie: Dialog alternativ perfect sincronizat! Pisica vorbeste, trimite mesaj, cainele raspunde si trimite mesaj, pisica continua. Ca o conversatie reala!

Diferenta intre "broadcast" si "broadcast and wait": Primul trimite mesajul si continua imediat. Al doilea trimite mesajul si ASTEAPTA ca toate script-urile care primesc mesajul sa termine, apoi continua. Foloseste "and wait" pentru sincronizare perfecta!
Atentie la bucle infinite! Daca Sprite A trimite "mesajA" care face Sprite B sa trimita "mesajB" care face Sprite A sa trimita "mesajA" din nou... ai creat o bucla infinita si Scratch se va bloca! Planifica bine fluxul mesajelor.

Exercitii practice

Exercitiul 1 (Nivel minim) -

Provocare 1
Joc cu 4 directii

Creeaza un joc simplu unde controlezi o pisica (sau alt sprite) cu cele 4 sagetile. Sprite-ul trebuie sa se miste in toate 4 directiile: sus, jos, stanga, dreapta.

Cerinte:

  • 4 scripturi separate pentru fiecare sageata
  • Fiecare sageata misca sprite-ul cu 10 pixeli in directia corespunzatoare
  • La green flag, sprite-ul se muta in centru (0, 0)
  • Bonus: Adauga un sunet la fiecare miscare!
Vezi rezolvarea

Rezolvare pas cu pas, exact ca in exemplul din lectie (evenimentul When Key Pressed):

  1. Pe sprite-ul ales (ex. pisica): when green flag clicked urmat de go to x: (0) y: (0) - asa se muta in centru la pornire, cum cere enuntul.
  2. Script separat 1: when [up arrow] key pressed -> change y by (10) (urca).
  3. Script separat 2: when [down arrow] key pressed -> change y by (-10) (coboara).
  4. Script separat 3: when [right arrow] key pressed -> change x by (10) (dreapta).
  5. Script separat 4: when [left arrow] key pressed -> change x by (-10) (stanga).

Total: 5 scripturi (1 pentru green flag + 4 pentru sageti), fiecare incepe cu un bloc galben de eveniment. Bonus sunet: adauga play sound dupa fiecare change x/y, cu un sunet ales din biblioteca (ex. pop).

Exercitiul 2 (Nivel standard) -

Provocare 2
Sistem de colectare cu click

Creeaza 5 sprite-uri (de ex: mere, stele, monede) pe ecran. Cand dai click pe fiecare, el dispare si trimite un mesaj "obiect_luat". Un sprite Scor receptioneaza mesajul si spune "Ai luat X obiecte!".

Cerinte:

  • 5 sprite-uri identice (poti duplica primul)
  • Fiecare are "when this sprite clicked" care il face sa "hide" si sa "broadcast [obiect_luat]"
  • Un sprite Text/Scor care primeste mesajul si incrementeaza un counter
  • Afiseaza scorul actual cu "say"
Vezi rezolvarea

Foloseste doar ce s-a predat (click pe sprite + broadcast/receive). Atentie: un numarator REAL de puncte cere variabile cu change by (1), subiect care apare abia in lectia urmatoare (lectia4-variabile) - deci aici facem o varianta cu mesaje separate, fara variabila.

  1. Creezi 5 sprite-uri (duplica primul), numite Obiect1...Obiect5.
  2. Pe fiecare: when this sprite clicked -> hide -> broadcast [obiect1_luat] (mesaj nou, diferit la fiecare: obiect1_luat, obiect2_luat, ..., obiect5_luat).
  3. Pe sprite-ul Scor: 5 scripturi separate, cate unul pentru fiecare mesaj: when I receive [obiect1_luat] -> say [Ai luat 1 obiecte!] for (2) seconds, la fel pana la obiectul 5.

Limitare de recunoscut: functioneaza corect doar daca obiectele sunt luate in ordine (1,2,3,4,5); un numarator care merge in orice ordine are nevoie de variabile, din lectia urmatoare.

Exercitiul 3 (Nivel performanta) -

Provocare 3
Dialog intre 3 personaje

Creeaza o conversatie intre 3 sprite-uri folosind mesaje! De exemplu: Pisica intreba ceva, Cainele raspunde, Pasarea adauga un comentariu, si conversatia continua.

Cerinte:

  • 3 sprite-uri diferite
  • Minim 6 replici in total (2 per personaj)
  • Foloseste "broadcast" si "when I receive" pentru a sincroniza dialogul
  • Adauga "wait" intre replici pentru timing natural
  • Bonus: Schimba costumele sprite-urilor cand vorbesc!
Vezi rezolvarea

Schita de rezolvare (nu produsul gata facut) - foloseste exact ce s-a predat: broadcast/when I receive si wait pentru sincronizare intre sprite-uri.

  1. Alege 3 sprite-uri (ex. Pisica, Cainele, Pasarea) si creeaza 6 mesaje noi, in ordine: replica2...replica6 (prima replica porneste direct din green flag).
  2. Pisica: when green flag clicked -> say [...] for (2) seconds -> broadcast [replica2].
  3. Cainele: when I receive [replica2] -> say [...] for (2) seconds -> broadcast [replica3]. Continua lantul la fel pana la replica6.
  4. Fiecare sprite ajunge sa aiba exact 2 replici (2 scripturi cu when I receive), cum cere enuntul.

Capcane: fara durata la say ... for () seconds replicile se suprapun; un mesaj refolosit gresit rupe lantul. Criterii de evaluare: 6 replici reale, lant complet, timing care se citeste natural. Bonusul cu schimbarea costumelor nu a fost predat in aceasta lectie (costumele apar in lectia1) - de incercat ca extra.

Exercitiul 4 (Nivel performanta) -

Provocare 4 - Avansata
Joc cu 2 niveluri

Creeaza un joc simplu cu 2 niveluri (2 fundaluri diferite). La nivel 1, sprite-ul incepe intr-o pozitie. Cand atinge un anumit loc (sau obiect), fundalul se schimba la Nivel 2, si sprite-ul incepe de la o noua pozitie.

Cerinte:

  • 2 fundaluri diferite numite "Nivel1" si "Nivel2"
  • "when backdrop switches to [Nivel1]" seteaza pozitia de start pentru nivel 1
  • "when backdrop switches to [Nivel2]" seteaza pozitia de start pentru nivel 2
  • Un sprite "Poarta" care cand e atins face "switch backdrop to [Nivel2]"
  • Controlezi personajul cu sagetile pe ambele niveluri
Vezi rezolvarea

Schita de rezolvare - urmeaza exact tiparul din exemplul Sistem de niveluri al lectiei (evenimentul When Backdrop Switches).

  1. In Stage, incarca 2 fundaluri si redenumeste-le exact Nivel1 si Nivel2.
  2. Pe Stage: when green flag clicked -> switch backdrop to [Nivel1].
  3. Pe sprite-ul jucator: when backdrop switches to [Nivel1] -> pozitia de start nivel 1 (go to x: ... y: ...); alt script when backdrop switches to [Nivel2] -> alta pozitie de start.
  4. Sprite-ul Poarta: verifica atingerea si schimba fundalul la Nivel2. Atentie: blocurile touching si if nu au fost predate in aceasta lectie despre evenimente (apar in lectia5-decizii) - aici sunt doar folosite, cauta-le in categoria Sensing/Control.
  5. Controlul cu sagetile ramane cel din Exercitiul 1, functioneaza neschimbat pe ambele fundaluri.

Criterii: schimbarea de fundal chiar se declanseaza la atingere, pozitiile de start difera vizibil intre niveluri.

Ce ai invatat astazi

  • Evenimentele sunt essentiale:Fara evenimente, codul nu stie cand sa ruleze!
  • Green Flag:"when green flag clicked" porneste programul - perfect pentru initializare
  • Taste:"when [key] key pressed" permite control cu tastatura - esential pentru jocuri
  • Click pe sprite:"when this sprite clicked" face obiecte interactive
  • Schimbarea scenei:"when backdrop switches to" organizeaza jocuri cu niveluri
  • Mesaje:"broadcast" si "when I receive" permit comunicare perfecta intre sprite-uri
  • Scripturi multiple:Un sprite poate avea oricâte scripturi cu evenimente diferite!

Vrei mai mult?

Provocare: Exista un bloc special: broadcast [mesaj] and wait, diferit de broadcast [mesaj] simplu. Creeaza 2 sprite-uri: primul trimite broadcast X and wait, al doilea, la when I receive X, face wait 2 seconds apoi say [Gata]. Observa: primul sprite ramane "blocat" si nu continua scriptul lui pana cand al doilea termina complet.

De ce: Sprite-urile pot deja citi variabile globale unele altora. De ce mai e nevoie de mesaje (broadcast/receive) atunci? Ce poate face un mesaj — sa PORNEASCA un script intreg intr-un moment exact — pe care o simpla variabila, citita pasiv, nu il poate face singura?

Deschidere: Programarea bazata pe evenimente nu e doar in Scratch — un buton apasat intr-o aplicatie de telefon, o notificare primita pe WhatsApp, un click pe un site web functioneaza dupa exact acelasi principiu: ceva se intampla (eveniment), si un cod anume porneste ca raspuns.

Urmatoarea lectie

Continua cu lectia urmatoare pentru a aprofunda cunostintele.

Continua →