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.
Legatura cu programa (VI-2.3): Cronometrul cu contor este un exemplu direct de structura repetitiva cu contor din programa cls. VI: variabila "secunde" creste cu 1 la fiecare iteratie a buclei repeat/forever. Aceasta este competenta VI-2.3 — construirea de algoritmi cu structura repetitiva — in actiune in Scratch!

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

🏗️
Bune Practici cu Variabile in Scratch
Definitie: Bune practici sunt reguli simple care te ajuta sa scrii programe clare, usor de inteles si de modificat. Respectandu-le, proiectele tale vor fi mai profesionale si mai usor de reparat cand ceva nu merge.

1. Initializeaza INTOTDEAUNA variabilele la start

when 🏴 clicked
set [puncte ▼] to (0)
set [vieti ▼] to (3)
set [nivel ▼] to (1)

De ce: Fara initializare, variabilele pastreaza valoarea din jocul anterior! Jucatorul porneste cu 50 puncte din sesiunea anterioara — confuzie garantata.

2. Alege nume clare si descriptive

✓ BUN: "puncte_totale", "vieti_ramase", "viteza_jucator", "nivel_curent"

✗ EVITA: "p", "x", "v", "n" (ce inseamna fiecare? Nu stii dupa 2 zile!)

3. Foloseste tipul potrivit: globala vs locala

🎮 Exemplu: Proiect bine organizat

Variabile GLOBALE (For all sprites) — informatii partajate:

• puncte → toate sprite-urile colecteaza puncte

• vieti → starea generala a jucatorului

• nivel_curent → la ce nivel e jocul

---

Variabile LOCALE (For this sprite only) — informatii individuale:

• viteza → fiecare inamic are propria viteza

• energie → fiecare inamic are propria energie

4. Arata variabilele relevante; ascunde pe cele interne

show variable [puncte ▼]

← Arata scorul — jucatorul vrea sa il vada!

hide variable [viteza_inamic ▼]

← Ascunde variabilele interne — jucatorul nu are nevoie sa le vada

Regula simpla: daca e informatia PENTRU JUCATOR (scor, vieti, timp) → SHOW. Daca e informatia PENTRU PROGRAM (viteza, stare interna) → HIDE. Pastreaza scena clara si curata!

✅ Checklist: Variabilele proiectului tau sunt bine organizate?

  • Toate variabilele sunt initializate la green flag? (set to valoare_initiala)
  • Numele sunt descriptive? (nu p, x, v1)
  • Scorurile si vietile sunt GLOBALE? (for all sprites)
  • Variabilele individuale ale sprite-urilor sunt LOCALE? (for this sprite only)
  • Variabilele afisate sunt relevante pentru jucator? (show/hide corespunzator)
Bune practici = cod profesional! Un proiect Scratch cu variabile bine organizate este mult mai usor de testat, de reparat si de impartasit cu altii. Incepatorii scriu cod care functioneaza; programatorii experimentati scriu cod care se intelege.

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
Joc cu vieti, scor si niveluri

Creeaza un joc complet cu 3 variabile globale: puncte, vieti, nivel. La 50 de puncte nivelul creste la 2 si inamicii devin mai rapizi. Jocul afiseaza toate cele 3 variabile pe scena.

Cerinte:

  • 3 variabile globale: "puncte" (start: 0), "vieti" (start: 3), "nivel" (start: 1)
  • Monede: +10 puncte la atingere; inamici: -1 viata la atingere
  • Cand puncte >= 50: set nivel to 2, viteza inamicilor creste la 5
  • Game Over: cand vieti = 0, sprite-ul spune "Game Over! Scor: (puncte)" si stop all
  • Bonus: afiseaza "NIVEL 2!" pe scena cand nivelul se schimba

Exercitiul 4 (Nivel performanta) -

Provocare 4 - Avansata
Joc complet cu 2 niveluri si scor persistent intre niveluri

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. La Game Over scorul final este afisat.

Cerinte:

  • Variabile: puncte, vieti, nivel_curent (toate globale, initializate la green flag)
  • 2 fundaluri: Nivel1, Nivel2
  • La "when backdrop switches to Nivel1": nivel_curent = 1, viteza_inamic = 2
  • La "when backdrop switches to Nivel2": nivel_curent = 2, viteza_inamic = 5
  • Avans nivel: cand puncte >= 50, switch backdrop to Nivel2
  • Game Over: cand vieti = 0, sprite-ul spune "Game Over! Scor final: (puncte)" si stop all
  • Bonus: afiseaza variabila "nivel_curent" pe scena; ascunde "viteza_inamic"

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)
  • Bune practici:Initializeaza variabilele, alege nume descriptive, show/hide pentru claritate

Urmatoarea lectie

In lectia urmatoare vei invata despre conditii (daca...atunci) — cum sa faci jocul sa ia decizii automate!

Continua →