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!

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"

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!

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

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!

Urmatoarea lectie

Continua cu lectia urmatoare pentru a aprofunda cunostintele.

Continua →