Invatare Atomica

Variabile in Scratch

Progres lectie:
0%
🎯

Obiectivul lectiei

Jocurile tale nu au scor... Nu poti numara nimic... Nu poti pastra informatii... Nu stii cate vieti mai ai... Nu poti masura timpul...

Dupa aceasta lectie vei putea:

  • Sa creezi variabile in Scratch si sa le afisezi pe scena
  • Sa modifici valoarea unei variabile (seteaza, schimba cu)
  • Sa folosesti variabile pentru a tine scorul intr-un joc
  • Sa creezi un cronometru simplu folosind o variabila si blocul 'asteapta'
  • Sa diferentiezi intre variabile 'pentru toate sprite-urile' si 'doar pentru acest sprite'

Incearca singur!

🎮 Incearca tu!

Provocare: Creeaza primul tau sistem de scor!

Inainte sa invatam teoria, hai sa experimentam cu variabile! Vei crea un simplu joc de click unde numeri de cate ori ai apasat pe un sprite.

  1. Deschide Scratch si alege un sprite (de ex: o stea sau moneda)
  2. Click pe sectiunea "Variables" (portocaliu inchis) din meniul de blocuri
  3. Click pe "Make a Variable" (Creeaza o variabila)
  4. Numeste-o "puncte" si lasa bifat "For all sprites" - Click OK
  5. Observi ca apare o caseta cu "puncte: 0" pe scena! Asta e variabila ta vizibila
  6. Acum trage blocul portocaliu "set [puncte] to 0" sub "when green flag clicked"
  7. Sub "when this sprite clicked" trage "change [puncte] by 1"
  8. Testeaza! Apasa green flag, apoi click pe sprite de mai multe ori. Scorul creste!
EXEMPLU COMPLET:

// Script 1 - Reset scor la start
when green flag clicked
set [puncte ▼] to (0)

// Script 2 - Adauga puncte la click
when this sprite clicked
change [puncte ▼] by (1)
play sound [pop ▼]
Observa cum variabila "puncte" se afiseaza in coltul scenei! Poti sa o muti cu mouse-ul sau sa o ascunzi cu click-dreapta pe ea.
💡 Indiciu #1: Unde e sectiunea Variables?
Scrolleaza in jos in meniul de categorii din stanga. "Variables" este penultima categorie, de culoare portocaliu inchis (nu confunda cu Control care e portocaliu deschis!). Apare doar DUPA ce creezi prima variabila.
💡 Indiciu #2: Care e diferenta dintre "set" si "change"?
"set" pune o valoare EXACTA (ex: set to 0 = resetare). "change" ADUNA la valoarea curenta (ex: change by 1 inseamna 0+1=1, apoi 1+1=2, apoi 2+1=3...). Pentru scor, folosesti "set" la start si "change" pentru a aduna puncte!
💡 Indiciu #3: Pot sa scad din scor?
Da! Foloseste "change [puncte] by (-1)" pentru a scadea cu 1. Valoarea negativa scade! Util pentru vieti, timp ramas, sau pedepse in joc.

🌟 Provocare Bonus (optional)

Adauga o ALTA variabila numita "vieti" setata la 3. La fiecare click pe sprite, scade o viata (change by -1). Cand vietile ajung la 0, sprite-ul spune "Game Over!" si se ascunde. Indiciu: Foloseste un bloc "if vieti = 0 then..."!

1

1. Continut

📦
Ce sunt Variabilele?
Definitie: O variabila este o "cutie" cu eticheta care pastreaza o valoare (numar sau text). Poti schimba continutul cutiei oricand, dar numele cutiei ramane constant. Variabilele permit programelor sa "aminteasca" informatii!
Analogie din viata ta: O variabila e ca un portofel! Portofelul are un nume ("Portofelul lui Andrei"), dar banii din el se schimba - azi ai 10 lei, maine 5 lei, poimaine 20 lei. Portofelul e acelasi, dar continutul variaza!
puncte
42
↑ Nume fix / ↑ Valoare care se schimba

De ce sunt esentiale variabilele?

  • Scoruri si puncte: Tii evidenta progresului in joc
  • Vieti/Sanatate: Monitorizezi starea jucatorului
  • Timp/Cronometru: Numeri secundele sau timpul ramas
  • Nivel curent: Retii la ce nivel e jucatorul
  • Inventar: Cate monede, chei, sau obiecte ai colectat
  • Setari: Volumul sunetului, dificultatea, limba, etc.
Fara variabile, proiectele tale ar fi statice - nu ar putea "aminti" nimic! Fiecare joc modern foloseste sute sau mii de variabile pentru a functiona.
In Scratch, variabilele pot pastra: numere intregi (1, 2, 100), numere zecimale (3.14, 9.99), text ("Andrei", "Hello!"), sau chiar expresii matematice (3+5).
2

2. Continut

Cum Creezi o Variabila
Pas cu pas: Pentru a crea o variabila in Scratch, click pe categoria "Variables" (portocaliu), apoi "Make a Variable". Alegi un nume descriptiv si decizi daca e pentru toate sprite-urile sau doar pentru unul.

Pasi pentru creare:

  1. Click pe categoria "Variables" in meniul de blocuri
  2. Click pe butonul "Make a Variable" (Creeaza o variabila)
  3. Introdu un nume descriptiv: "puncte", "vieti", "timp", "nivel", etc.
  4. Alege: "For all sprites" (pentru toate) SAU "For this sprite only" (doar pentru acest sprite)
  5. Click OK - Variabila apare automat pe scena si in meniul de blocuri!
Dupa creare, vei vedea blocurile noi in categoria Variables: set (seteaza), change (schimba), show (arata), hide (ascunde), plus blocul oval cu numele variabilei (pentru a o folosi in calcule).

Reguli pentru nume de variabile:

✓ BUN: "puncte", "vieti_jucator", "timp_ramas", "nivel_curent"

✗ EVITA: "p", "x", "var1" (prea scurt, neclar)

✗ EVITA: Spatii in nume - foloseste underscore: "vieti_jucator" NU "vieti jucator"

Alege nume clare si descriptive! Peste cateva zile cand revezi proiectul, "puncte" e mult mai clar decat "p" sau "x". Economia de caractere NU merita confuzia!
Nu poti avea doua variabile cu ACELASI nume in acelasi proiect! Daca incerci, Scratch va refuza crearea. Fiecare nume trebuie sa fie unic.
3

3. Continut

🔧
Blocurile: Set, Change, Show, Hide
Definitie: Scratch iti ofera 4 blocuri principale pentru a lucra cu variabile: SET (pune o valoare exacta), CHANGE (aduna/scade la valoarea curenta), SHOW (afiseaza pe scena), HIDE (ascunde de pe scena).

1. SET - Seteaza la o valoare exacta

set [puncte ▼] to (0)

Ce face: Pune valoarea EXACTA specificata in variabila, ignorand ce era inainte. Exemplu: daca puncte era 50, "set to 0" il face 0. Este ca si cum golesti cutia si pui ceva nou inauntru.

Cand se foloseste:

  • Reset la start: "set puncte to 0" la green flag clicked
  • Initializare: "set vieti to 3" la inceputul jocului
  • Setare directa: "set nivel to 2" cand treci la nivel 2

2. CHANGE - Schimba cu o cantitate

change [puncte ▼] by (1)
change [puncte ▼] by (-1)

Ce face: ADUNA valoarea la continutul curent. Exemplu: daca puncte = 10, "change by 5" il face 15. Daca pui numar negativ, SCADE: "change by -3" scade cu 3.

Cand se foloseste:

  • Adauga puncte: "change puncte by 10" cand colectezi moneda
  • Scade vieti: "change vieti by -1" cand esti lovit
  • Cronometru: "change timp by 1" la fiecare secunda
  • Incrementare: "change contor by 1" pentru orice numarare

🎯 Exemplu: Diferenta dintre SET si CHANGE

Situatie: puncte = 50

Daca rulezi:

set [puncte] to (100)
Rezultat: puncte = 100 (ignora ce era inainte, pune 100)

Daca rulezi:

change [puncte] by (100)
Rezultat: puncte = 150 (50 + 100 = 150)

3. SHOW - Afiseaza pe scena

show variable [puncte ▼]

Ce face: Face variabila vizibila pe scena (daca era ascunsa). Variabilele sunt vizibile by default, dar daca le-ai ascuns, SHOW le aduce inapoi.

4. HIDE - Ascunde de pe scena

hide variable [puncte ▼]

Ce face: Ascunde caseta variabilei de pe scena. Variabila EXISTA in continuare si functioneaza - doar nu o mai vezi afisata. Util pentru variabile "secrete" sau temporare.

Alternativa la show/hide: Click-dreapta pe variabila din scena si alege "hide" sau click pe checkbox-ul din categoria Variables pentru a comuta vizibilitatea!
4

4. Continut

🎯
Construirea unui Sistem de Scor
Definitie: Un sistem de scor foloseste variabile pentru a numara punctele intr-un joc. De obicei ai nevoie de: o variabila "puncte", un script de reset (set to 0), si scripturi care adauga puncte (change by) la actiuni pozitive.

🎮 Exemplu complet: Joc de colectare monede

// Pe Sprite Jucator:
when 🏴 clicked
set [puncte ▼] to (0)
show variable [puncte ▼]

---

// Pe Sprite Moneda (fiecare moneda):
when 🏴 clicked
show
forever
if <touching [Jucator ▼]?> then
change [puncte ▼] by (10)
play sound [coin ▼]
hide

Explicatie: La start, scorul e resetat la 0. Fiecare moneda verifica la nesfarsit (forever) daca atinge jucatorul. Cand se atinge: +10 puncte, sunet coin, moneda dispare. Simplu si eficient!

💫 Exemplu: Scor cu niveluri de dificultate

// Monede galbene: 5 puncte
when this sprite clicked
change [puncte ▼] by (5)

---

// Monede argintii: 10 puncte
when this sprite clicked
change [puncte ▼] by (10)

---

// Monede aurii: 50 puncte
when this sprite clicked
change [puncte ▼] by (50)

Explicatie: Obiecte diferite valoreaza puncte diferite! Monedele rare (aurii) dau mai multe puncte, motivand jucatorii sa le caute.

Pentru jocuri profesionale, adauga feedback vizual! Dupa ce adaugi puncte, fa sprite-ul sa "say" "+10!" pentru 0.5 secunde. Jucatorii vor sti EXACT cand au castigat puncte!
Nu uita sa resetezi scorul la green flag! Daca nu faci "set to 0" la inceput, scorul va continua de la valoarea anterioara si jucatorii vor fi confuzi.
5

5. Continut

⏱️
Cronometru si Sisteme de Timp
Definitie: Un cronometru in Scratch se face cu o variabila "timp" care creste sau scade la fiecare secunda. Poti folosi blocul "timer" integrat in Scratch sau sa creezi propriul tau sistem cu wait si change.

Metoda 1: Timer integrat Scratch

Scratch are un timer ascuns care porneste automat! Il gasesti in categoria "Sensing" (albastru deschis) - blocul oval "timer". Poti sa-l resetezi cu "reset timer".

when 🏴 clicked
reset timer
forever
say (join [Timp: ] (timer))
wait (0.1) seconds

Explicatie: Timer-ul integrat numara secundele automat de la reset! Perfect pentru curse contracronometru.

Metoda 2: Cronometru personalizat

⏰ Exemplu: Contor de secunde crescator

// Creeaza variabila "secunde"
when 🏴 clicked
set [secunde ▼] to (0)
forever
wait (1) seconds
change [secunde ▼] by (1)

Explicatie: La fiecare secunda (wait 1), variabila creste cu 1. Simplu si eficient! Poti vedea cate secunde ai jucat.

⏳ Exemplu: Contor descrescator (timp ramas)

// Ai 60 secunde pentru joc!
when 🏴 clicked
set [timp_ramas ▼] to (60)
repeat until <(timp_ramas) = (0)>
wait (1) seconds
change [timp_ramas ▼] by (-1)
say [Timpul a expirat!] for (2) seconds
stop [all ▼]

Explicatie: Incepi cu 60 secunde. La fiecare secunda scazi cu 1 (change by -1). Cand ajunge la 0, jocul spune "Timpul a expirat!" si se opreste tot. Perfect pentru provocari contracronometru!

Pentru afisare frumoasa a timpului, foloseste "join" pentru a formata: "Timp: " + secunde + "s". Sau mai avansat: minute:secunde (vei invata asta la matematica avansata!).
6

6. Continut

🌐
Scope: For All Sprites vs For This Sprite Only
Definitie: Cand creezi o variabila, alegi daca e "globala" (For all sprites - toate sprite-urile o pot folosi) sau "locala" (For this sprite only - doar sprite-ul curent o poate folosi). Aceasta alegere se numeste "scope" (domeniu de vizibilitate).
Analogie din viata ta: "For all sprites" e ca un panou de anunturi la scoala - toti elevii il vad si il pot actualiza. "For this sprite only" e ca un caiet personal - doar tu ai acces la el!

For All Sprites (Globala)

Ce inseamna: TOATE sprite-urile din proiect pot citi si modifica aceasta variabila.

Cand se foloseste:

  • Scor general: Toate sprite-urile trebuie sa poata adauga puncte
  • Nivel curent: Toate sprite-urile trebuie sa stie la ce nivel esti
  • Timp/Cronometru: Un singur cronometru pentru tot jocul
  • Game state: "joc_activ", "game_over", "paused"

For This Sprite Only (Locala)

Ce inseamna: DOAR sprite-ul curent poate vedea si modifica variabila. Alte sprite-uri nu stiu ca exista.

Cand se foloseste:

  • Sanatatea inamicului: Fiecare inamic are propria sa sanatate
  • Viteza sprite-ului: Fiecare personaj se misca cu propria viteza
  • Stare personala: "este_invincibil", "poate_trage"
  • Contoare temporare: "nr_sarituri", "cooldown_tir"

🎮 Exemplu: Combinare globale + locale

Variabile GLOBALE (For all sprites):

• puncte_totale (scorul general al jucatorului)

• nivel_curent (1, 2, 3, etc.)

• timp_ramas (cronometrul jocului)

---

Variabile LOCALE (For Sprite Inamic #1):

• sanatate_inamic (HP-ul acestui inamic specific: 100)

• viteza_inamic (cat de repede se misca: 3)

---

Variabile LOCALE (For Sprite Inamic #2):

• sanatate_inamic (HP-ul ALTUI inamic: 150 - independent de #1!)

• viteza_inamic (viteza ALTUI inamic: 5 - diferit de #1!)

Explicatie: Scorul, nivelul si timpul sunt PARTAJATE - toate sprite-urile le vad si le modifica. Dar fiecare inamic are PROPRIA sanatate si viteza - daca lovesti Inamic #1, doar sanatatea LUI scade, nu a altora!

Regula generala: Daca informatia e relevanta pentru TOT PROIECTUL, foloseste "For all sprites". Daca informatia e specifica unui singur sprite (si fiecare copie trebuie sa aiba propria valoare), foloseste "For this sprite only".
Multi incepatori fac scorul "For this sprite only" si apoi se mira de ce alte sprite-uri nu pot adauga puncte! Scorul trebuie INTOTDEAUNA sa fie "For all sprites" ca sa fie accesibil de la toate sprite-urile.
7

7. Continut

📋
Liste - Variabile Multiple
Definitie: O lista este ca o variabila care pastreaza MULTIPLE valori, nu doar una! Imagineaza-ti o lista de cumparaturi: "lapte, paine, oua, branza". Fiecare element are un numar (index): 1=lapte, 2=paine, etc.
Analogie din viata ta: Variabila normala = o cutie cu un singur obiect. Lista = un raft cu mai multe cutii numerotate! Poti accesa cutia 1, cutia 2, cutia 3, etc.

Cum creezi o lista?

  1. Click pe categoria "Variables"
  2. Click pe "Make a List" (sub "Make a Variable")
  3. Numeste lista descriptiv: "inventar", "scoruri_top", "inamici"
  4. Alege "For all sprites" sau "For this sprite only"
  5. Click OK - Lista apare pe scena si ai blocuri noi!

Blocuri pentru liste:

add [mar] to [inventar ▼]

← Adauga element la sfarsitul listei

delete (1) of [inventar ▼]

← Sterge elementul de pe pozitia 1

delete (all) of [inventar ▼]

← Goleste toata lista

insert [banana] at (2) of [inventar ▼]

← Insereaza element pe pozitia 2

replace item (1) of [inventar ▼] with [para]

← Inlocuieste elementul 1 cu altul

(item (1) of [inventar ▼])

← Citeste valoarea de pe pozitia 1

(length of [inventar ▼])

← Cate elemente sunt in lista?

<[inventar ▼] contains [mar]?>

← Lista contine "mar"? (DA/NU)

🎒 Exemplu: Sistem de inventar simplu

// La start - goleste inventarul
when 🏴 clicked
delete (all) of [inventar ▼]

---

// Cand colectezi un mar (sprite Mar)
when this sprite clicked
add [mar] to [inventar ▼]
say [Ai luat un mar!] for (1) seconds
hide

---

// Verificare - ai cheia?
when [space] key pressed
if <[inventar ▼] contains [cheie]?> then
say [Ai cheia! Usa se deschide!]
broadcast [deschide_usa ▼]

Explicatie: La start, inventarul e gol. Cand colectezi obiecte (click pe ele), se adauga in lista. Cand apesi Space, jocul verifica daca AI cheia in inventar - daca da, usa se deschide!

🏆 Exemplu: Top 3 scoruri

// La sfarsitul jocului
when I receive [game_over ▼]
add (puncte) to [top_scoruri ▼]
say (join [Scorurile tale: ] (top_scoruri))

---

// Arata scorurile anterioare
when [t] key pressed
say (join [Joc 1: ] (item (1) of [top_scoruri ▼]))
wait (1) seconds
say (join [Joc 2: ] (item (2) of [top_scoruri ▼]))
wait (1) seconds
say (join [Joc 3: ] (item (3) of [top_scoruri ▼]))

Explicatie: Fiecare joc adauga scorul in lista. Cand apesi "T" (Top), sprite-ul afiseaza scorurile din jocurile anterioare: primul joc (item 1), al doilea joc (item 2), etc. Istorie completa!

Listele sunt perfecte pentru: inventare, istoric scoruri, dialogue trees (conversatii cu optiuni), enemies spawn queues, level data, si multe altele! Odata ce inveti liste, proiectele tale devin mult mai complexe si interesante.
Index-ul listelor incepe de la 1, nu de la 0! Primul element e "item 1", al doilea e "item 2", etc. Asta e diferit de alte limbaje de programare unde lista incepe de la 0.

Exercitii practice

Exercitiul 1 (Nivel minim) -

Provocare 1
Joc complet cu scor si vieti

Creeaza un joc simplu unde controlezi un personaj cu sagetile. Colectezi monede (+10 puncte) si eviti inamici (-1 viata). Jocul se opreste cand vietile ajung la 0.

Cerinte:

  • 2 variabile globale: "puncte" (start: 0) si "vieti" (start: 3)
  • La green flag: reset ambele variabile
  • Sprite Jucator: control cu sagetile (lectia anterioara)
  • Sprite Moneda: cand e atinsa, +10 puncte, hide
  • Sprite Inamic: cand atinge jucatorul, -1 viata
  • Game Over: cand vieti = 0, sprite-ul spune "Game Over!" si jocul se opreste

Exercitiul 2 (Nivel standard) -

Provocare 2
Cronometru descrescator cu alarma

Creeaza un cronometru care porneste de la 30 secunde si scade pana la 0. Cand ajunge la 0, un sprite Alarma spune "TIMPUL A EXPIRAT!" si se aude un sunet.

Cerinte:

  • Variabila "timp_ramas" setata la 30
  • Script: "repeat until timp_ramas = 0" cu "wait 1 second" si "change timp_ramas by -1"
  • La 0: broadcast "timp_expirat"
  • Sprite Alarma: "when I receive timp_expirat" → say + play sound
  • Bonus: Schimba culoarea textului cand timp < 10 (ultim 10 secunde rosu!)

Exercitiul 3 (Nivel performanta) -

Provocare 3
Sistem de inventar cu 3 obiecte

Creeaza o lista "inventar" si 3 sprite-uri: Cheie, Lanterna, Harta. Cand click pe fiecare, se adauga in inventar. Un sprite Usa verifica daca ai TOATE cele 3 obiecte - daca da, se deschide!

Cerinte:

  • Lista "inventar" (For all sprites)
  • 3 sprite-uri: la click, fiecare face "add [nume_obiect] to inventar" si "hide"
  • Sprite Usa: "when green flag clicked" + "forever"
  • Verifica: "if inventar contains cheie AND contains lanterna AND contains harta then..."
  • Cand are toate: say "Usa se deschide!", broadcast "deschide_usa", stop script

Exercitiul 4 (Nivel performanta) -

Provocare 4 - Avansata
Joc cu mai multe niveluri si scor persistent

Combina tot ce ai invatat! Creeaza un joc cu 2 niveluri (2 fundaluri). Scorul si vietile se pastreaza intre niveluri. La nivel 2, inamicii sunt mai rapizi. Adauga un TOP 5 scoruri cu lista!

Cerinte:

  • Variabile: puncte, vieti, nivel_curent
  • Lista: top_scoruri (pentru istoricul jocurilor)
  • 2 fundaluri: Nivel1, Nivel2
  • La "when backdrop switches to Nivel1": nivel_curent = 1, viteza inamici = 2
  • La "when backdrop switches to Nivel2": nivel_curent = 2, viteza inamici = 5
  • Avans nivel: cand puncte > 50, switch backdrop to Nivel2
  • Game Over: add puncte to top_scoruri, say primele 3 scoruri

Ce ai invatat astazi

  • Variabile = memorie:Pastreaza informatii importante (scor, vieti, timp) in timpul jocului
  • SET vs CHANGE:SET pune valoare exacta (reset), CHANGE aduna/scade (increment)
  • Sisteme de scor:Cum sa construiesti jocuri cu puncte, bonusuri, si pedepse
  • Cronometru:Timer integrat SAU cronometru personalizat cu wait + change
  • Scope (For all vs For this):Globale (toate sprite-urile) vs Locale (doar unul)
  • Liste:Variabile multiple - perfecte pentru inventare, istoric, si colectii
  • Blocuri lista:add, delete, insert, replace, item, length, contains

Urmatoarea lectie

Continua cu lectia urmatoare pentru a aprofunda cunostintele.

Continua →