Paralelismul în Scratch
Scratch este un mediu de programare bazat pe evenimente (event-driven) care suportă execuția paralelă prin multiple scripturi care rulează simultan. Această caracteristică permite crearea de programe complexe și interactive.
Caracteristicile paralelismului în Scratch:
• Multiple obiecte active: Fiecare sprite poate avea propriile scripturi care rulează independent
• Fire de execuție independente: Scripturile se execută în paralel, nu secvențial
• Sincronizare prin evenimente: Coordonarea acțiunilor prin mesaje și evenimente
Declanșarea execuției paralele
Evenimentul "la apăsarea Steagului Verde" poate declanșa simultan multiple scripturi:
// Script 1 - Mișcarea jucătorului
când se apasă ⚑
pentru totdeauna
dacă <tasta [săgeată stânga v] apăsată?> atunci
modifică x cu (-5)
// Script 2 - Animația fundalului
când se apasă ⚑
pentru totdeauna
schimbă costumul cu [fundal1 v]
așteaptă (1) secunde
schimbă costumul cu [fundal2 v]
așteaptă (1) secunde
// Script 3 - Muzica de fundal
când se apasă ⚑
pentru totdeauna
redă sunetul [melodie v] până la sfârșit
Sincronizarea și comunicarea prin mesaje
Sistemul de mesaje în Scratch permite coordonarea acțiunilor între sprite-uri și sincronizarea evenimentelor complexe.
Mecanismul de broadcast (difuzare)
Emițătorul - Blocul "EXPEDIERE LA TOȚI"
expediere [începe nivelul v]
Caracteristici:
• Trimite un mesaj către toate sprite-urile din proiect
• Execuția continuă imediat (non-blocking)
• Poate fi folosit pentru declanșarea simultană a mai multor acțiuni
Receptorul - Blocul "LA PRIMIRE"
când primesc [începe nivelul v]
mergi la x: (-200) y: (0)
afișează
spune [Nivelul a început!]
Exemple practice de sincronizare
1. Coordonarea unei animații complexe
// Sprite principal (regizor)
când se apasă ⚑
expediere [scenă 1 v]
așteaptă (5) secunde
expediere [scenă 2 v]
așteaptă (3) secunde
expediere [final v]
// Sprite actor 1
când primesc [scenă 1 v]
glisează (2) secunde la x: (100) y: (0)
spune [Prima replică] pentru (3) secunde
când primesc [scenă 2 v]
rotește ↻ (360) grade
spune [A doua replică] pentru (2) secunde
// Sprite actor 2
când primesc [scenă 1 v]
așteaptă (2) secunde
glisează (1) secunde la x: (-100) y: (0)
spune [Răspunsul meu] pentru (2) secunde
2. Sistemul de punctaj în jocuri
// Sprite jucător
când primesc [punct marcat v]
modifică [scor v] cu (10)
dacă <(scor) = (100)> atunci
expediere [nivel completat v]
// Sprite interfață
când primesc [punct marcat v]
spune (îmbină [Scor: ] (scor)) pentru (1) secunde
// Sprite inamic
când primesc [nivel completat v]
oprește [alte scripturi în sprite v]
spune [Felicitări!] pentru (3) secunde
Avantajele comunicării prin mesaje
• Decuplarea: Sprite-urile nu trebuie să știe detalii despre altele
• Flexibilitatea: Ușor de adăugat noi comportamente
• Scalabilitatea: Funcționează cu orice număr de sprite-uri
• Sincronizarea: Coordonarea precisă a evenimentelor
Diferența între "expediere" și "expediere și așteaptă"
// Expediere simplă (non-blocking)
expediere [mesaj v]
spune [Continui imediat]
// Expediere cu așteptare (blocking)
expediere [mesaj v] și așteaptă
spune [Aștept ca toți să termine]