Î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

Conditii in Scratch - Daca... Atunci

Recapitulare si consolidare (cls. V) — Structura alternativa (daca...atunci si daca...atunci...altfel) a fost introdusa in clasa a V-a (competentele V-2.4 si V-3.2, conform OMEN 3393/2017). Aceasta lectie consolideaza si aprofundeaza aceste notiuni in contextul animatiilor Scratch din clasa a VI-a (VI-2.1, VI-3.2).
Progres lectie:
0%
🎯

Obiectivul lectiei

In clasa a V-a ai invatat cum functioneaza structura alternativa (daca...atunci). In clasa a VI-a consolidam aceste cunostinte si le aplicam in animatii Scratch mai complexe: detectare coliziuni, operatori logici si reactii interactive ale personajelor.

Dupa aceasta lectie vei putea:

  • [Consolidare cls. V — V-2.4, V-3.2] Sa recunosti si sa folosesti blocul 'daca...atunci' pentru a lua decizii in program
  • [Consolidare cls. V — V-2.4, V-3.2] Sa recunosti si sa folosesti blocul 'daca...atunci...altfel' pentru doua variante de actiune
  • Sa combini conditii cu operatori logici (si, sau, nu) in animatii Scratch
  • Sa verifici coliziuni intre sprite-uri cu blocul 'atinge [sprite]?'
  • Sa creezi o animatie interactiva cu reguli bazate pe conditii (VI-2.1, VI-3.2)

Incearca singur!

🎮 Incearca tu!

Provocare: Creeaza un Sprite care evita marginile!

Inainte sa invatam teoria, sa experimentam! Vom crea un sprite care se misca si schimba culoarea cand atinge marginea scenei.

  1. Deschide Scratch si creeaza un proiect nou
  2. Pastreaza sprite-ul pisica (sau alege alt sprite)
  3. Adauga blocul "when green flag clicked" (Evenimente - galben)
  4. Sub el, adauga "forever" (Control - portocaliu)
  5. In interiorul blocului "forever", adauga "move 10 steps"
  6. Acum cauta blocul "if...then" (Control - portocaliu) si pune-l in bucla forever
  7. In spatiul in forma de romb din "if", pune "touching edge?" (Senzori - albastru deschis)
  8. In interiorul "if...then", adauga "turn 180 degrees" si "change color effect by 25"
  9. Apasa green flag si urmareste! Pisica se misca si se intoarce cand atinge marginea, schimband culoarea!
CODUL TAU SCRATCH:
when [green flag] clicked
forever
    move (10) steps
    if <touching [edge]?> then
        turn ↻ (180) degrees
        change [color] effect by (25)
    end
end
Experimenteaza! Incearca sa schimbi 180 grade cu alte valori (90, 120, 45). Ce se intampla? Incearca si alte efecte in loc de culoare!
💡 Indiciu #1: Nu gasesti blocul "if...then"? ▶
Cauta in categoria "Control" (portocaliu). Este al treilea bloc, arata ca un bloc cu spatiu gol in forma de romb la mijloc si continut sub el.
💡 Indiciu #2: Pisica nu se intoarce? ▶
Verifica ca ai pus blocul "touching edge?" EXACT in spatiul in forma de romb din "if". Trebuie sa se potriveasca perfect, ca o piesa de puzzle!
💡 Indiciu #3: Cum schimb sensul de rotire? ▶
In blocul "turn", poti schimba directia folosind sagetile. Sageta in sens orar (↻) sau in sens invers (↺). Incearca ambele!

🌟 Provocare Bonus (optional)

Adauga un al doilea "if...then" care verifica "touching mouse-pointer?". Cand pisica atinge cursorul mouse-ului, fa-o sa spuna "Hei, m-ai prins!" si sa schimbe costumul!

1

1. Continut

🤔
Ce sunt Conditiile?
Definitie: O conditie este o DECIZIE pe care programul o ia in functie de o situatie. Este ca o intrebare cu raspuns DA sau NU. Daca raspunsul este DA, se intampla ceva. Daca este NU, nu se intampla nimic (sau se intampla altceva).
Analogie din viata ta: Conditiile sunt ca regulile pe care le urmezi in fiecare zi! "DACA plouă, ATUNCI iau umbrela." "DACA e verde la semafor, ATUNCI pot traversa strada." "DACA am facut temele, ATUNCI pot sa ma joc." Programul nostru gandeste exact la fel!

De ce sunt importante conditiile?

  • 🎮 Interactivitate: Fara conditii, jocurile nu pot reactiona la jucator
  • 🧠 Inteligenta: Personajele "gandesc" si iau decizii singure
  • 🎯 Control: Controlezi exact ce se intampla in diferite situatii
  • 🚀 Complexitate: Poti construi logica complexa imbricand conditii
Conditiile transforma un program simplu intr-un program inteligent! Fara ele, sprite-urile tale ar face doar actiuni repetitive fara sens.
2

2. Continut

➡️
Blocul "if...then" (Daca...Atunci)
Definitie: Blocul "if...then" (daca...atunci) verifica o conditie. Daca conditia este ADEVARATA (DA), executa codul din interior. Daca conditia este FALSA (NU), sare peste codul din interior si continua mai departe.
Analogie din viata ta: "DACA am 10 lei, ATUNCI cumpar inghetata." Daca ai 10 lei (conditie adevarata), cumperi inghetata. Daca nu ai, nu cumperi nimic si continui sa mergi pe strada.

Structura blocului if...then:

if <conditie> then
    // Codul care se executa DOAR daca conditia e adevarata
    // Poate fi orice: miscari, sunete, schimbari de aspect
end

📋 Exemplu: Sprite care evita marginea

when [green flag] clicked
forever
move (10) steps
if <touching [edge]?> then
turn ↻ (180) degrees

Explicatie: Sprite-ul se misca cu 10 pasi. La fiecare miscare, verifica: "Ating marginea?". DACA da, se intoarce cu 180 de grade. DACA nu, continua sa mearga inainte.

Spatiul in forma de romb din "if" accepta doar blocuri cu forma de romb (conditii). Acestea sunt blocuri din categoriile Senzori (albastru deschis) si Operatori (verde).
3

3. Continut

⚡
Blocul "if...then...else" (Daca...Atunci...Altfel)
Definitie: Blocul "if...then...else" (daca...atunci...altfel) verifica o conditie si INTOTDEAUNA executa ceva. Daca conditia este ADEVARATA, executa prima sectiune (then). Daca este FALSA, executa a doua sectiune (else).
Analogie din viata ta: "DACA plouă, ATUNCI iau umbrela, ALTFEL pun ochelari de soare." Indiferent de vreme, faci ceva! Conditia decide CE faci, nu DACA faci ceva.

Diferenta intre if-then si if-then-else:

Blocul Cand conditia e DA Cand conditia e NU
if...then Executa codul din "then" NU executa nimic
if...then...else Executa codul din "then" Executa codul din "else"

📋 Exemplu: Sprite care schimba culoarea in functie de pozitie

when [green flag] clicked
forever
if <(x position) > [0]> then
set [color] effect to (50)
else
set [color] effect to (0)

Explicatie: Verifica pozitia x a sprite-ului. DACA x > 0 (partea dreapta scenei), culoarea devine 50. ALTFEL (partea stanga), culoarea devine 0 (normal).

Foloseste "if...then...else" cand vrei sa faci ceva INTOTDEAUNA, dar diferit in functie de conditie. Foloseste "if...then" simplu cand vrei sa faci ceva DOAR daca conditia e adevarata.
4

4. Continut

👁️
Senzori - Ochii si Urechile Sprite-ului
Definitie: Senzorii sunt blocuri speciale (culoare albastru deschis) care detecteaza ce se intampla in jurul sprite-ului. Ei verifica atingeri, culori, taste apasate, pozitii si multe altele. Senzorii returneaza intotdeauna DA (true) sau NU (false).
Analogie din viata ta: Senzorii sunt ca simturile tale! Ochii vad (touching edge, touching color), urechile aud (loudness), pielea simte atingerea (touching sprite). Sprite-ul foloseste senzori pentru a "simti" lumea din jur!

Principalii senzori folositi in conditii:

touching [edge]? - Verifica daca sprite-ul atinge marginea scenei
touching [Sprite2]? - Verifica daca atinge alt sprite
touching color [rosu]? - Verifica daca atinge o anumita culoare
color [albastru] is touching [galben]? - Verifica daca culoarea sprite-ului atinge alta culoare
key [space] pressed? - Verifica daca o tasta e apasata
mouse down? - Verifica daca mouse-ul e apasat

📋 Exemplu: Detectarea atingerii cu mouse-ul

when [green flag] clicked
forever
if <touching [mouse-pointer]?> then
say [M-ai prins!] for (2) seconds
go to [random position]

Explicatie: La infinit, verifica daca sprite-ul atinge cursorul mouse-ului. Daca da, spune "M-ai prins!" si sare intr-o pozitie aleatorie. Perfect pentru un joc de prinde-ma!

Senzorul "touching color" este SENSIBIL! Trebuie sa alegi culoarea EXACT din scena folosind pipeta. Chiar si o mica diferenta de nuanta va face ca senzorul sa returneze NU.
5

5. Continut

⚖️
Operatori de Comparatie (>, <, =)
Definitie: Operatorii de comparatie (blocuri verzi, categoria Operatori) compara doua valori si returneaza DA sau NU. Sunt folositi pentru a verifica daca un numar este mai mare, mai mic sau egal cu altul.
Analogie din viata ta: "Sunt mai inalt decat fratele meu?" (comparam inaltimi). "Am mai multe puncte decat adversarul?" (comparam scoruri). "E mai cald astazi decat ieri?" (comparam temperaturi). Programul compara exact la fel!

Cei 3 operatori de comparatie:

Operator Semnificatie Exemplu
[a] > [b] Mai mare decat 10 > 5 (DA), 3 > 7 (NU)
[a] < [b] Mai mic decat 3 < 7 (DA), 10 < 5 (NU)
[a] = [b] Egal cu 5 = 5 (DA), 5 = 3 (NU)

📋 Exemplu: Sistem de scor cu reactie

when [green flag] clicked
set [scor] to (0)
forever
if <(scor) > [100]> then
say [Campion! Ai trecut de 100!]
play sound [applause]

Explicatie: Verifica continuu daca scorul este mai mare decat 100. Cand depaseste 100, sprite-ul felicita jucatorul si reda aplauze!

Poti compara nu doar numere fixe, ci si variabile, blocuri din Motion (x position, y position), sau chiar rezultate ale operatiilor matematice!
6

6. Continut

🔗
Combinarea Conditiilor: AND, OR, NOT
Definitie: Operatorii logici (AND, OR, NOT) combina mai multe conditii simple intr-o conditie complexa. AND = ambele conditii trebuie sa fie DA. OR = macar una trebuie sa fie DA. NOT = inversează conditia (DA devine NU, NU devine DA).
Analogie din viata ta: AND = "Pot iesi afara DACA am terminat temele SI e vreme frumoasa" (ambele trebuie). OR = "Iau pauza DACA sunt obosit SAU daca e pauza" (una e suficient). NOT = "Merg la scoala DACA NU e sambata/duminica" (inversare).

Cei 3 operatori logici:

<conditie1> AND <conditie2>

Returneaza DA DOAR daca AMBELE conditii sunt DA. Daca una e NU, rezultatul e NU.

Exemplu: "touching edge AND key space pressed" (DA doar daca atinge marginea SI spatiu e apasat)

<conditie1> OR <conditie2>

Returneaza DA daca MACAR UNA din conditii e DA. Returneaza NU doar daca AMBELE sunt NU.

Exemplu: "touching edge OR touching sprite2" (DA daca atinge oricare dintre ele)

NOT <conditie>

Inverseaza conditia. DA devine NU, NU devine DA.

Exemplu: "NOT touching edge" (DA daca NU atinge marginea)

📋 Exemplu: Conditie complexa cu AND

when [green flag] clicked
forever
if <<touching [Sprite2]?> AND <(scor) > [50]>> then
say [Ai castigat nivel bonus!]
go to x:(0) y:(0)

Explicatie: Nivelul bonus se deblochează DOAR daca sprite-ul atinge Sprite2 SI scorul e mai mare de 50. Daca nu ai scor suficient, nu se intampla nimic chiar daca atingi Sprite2!

Poti imbrica operatori logici! De exemplu: <<A AND B> OR C> inseamna "(A si B) sau C". Ordinea conteaza!
Nu confunda AND cu OR! AND e mai strict (ambele trebuie DA), OR e mai permisiv (una e suficient). Gandeste-te bine care se potriveste situatiei tale!
7

7. Continut

🪆
Conditii Imbricate (Nested Conditions)
Aprofundare — continut optional (peste programa cls. VI) — Conditiile imbricate nu sunt prevazute explicit in programa OMEN 3393/2017 pentru clasa a VI-a. Aceasta sectiune este destinata elevilor care doresc sa exploreze mai departe, dupa insusirea materialului obligatoriu.
Definitie: Conditiile imbricate sunt conditii puse INAUNTRUL altor conditii. Este ca si cum ai avea o cutie intr-o cutie! Programul verifica prima conditie, iar daca e DA, verifica si a doua conditie din interior.
Analogie din viata ta: "DACA e sambata (prima cutie), atunci verific DACA mi-am facut temele (a doua cutie). Daca DA, ma duc la film." E ca o verificare in 2 pasi! Primul DA te duce la al doilea test.

Cand folosesti conditii imbricate?

  • 🎯 Logica complexa: Cand decizia depinde de mai multe niveluri
  • 🔍 Verificari secventiale: "Daca A e DA, atunci verific si B"
  • ⚡ Performanta: Eviti verificari inutile (daca prima conditie e NU, a doua nici nu se verifica)

📋 Exemplu: Sistem de dificultate bazat pe scor

when [green flag] clicked
forever
if <(scor) > [50]> then
if <(scor) > [100]> then
set [viteza] to (15)
say [Nivel Expert!]
else
set [viteza] to (10)
say [Nivel Mediu]
else
set [viteza] to (5)
say [Nivel Incepator]

Explicatie: Daca scor > 50, intra in prima conditie. Apoi verifica daca scor > 100. Daca DA, e nivel expert (viteza 15). Daca NU (dar scor e totusi >50), e nivel mediu (viteza 10). Daca scorul e sub 50, e nivel incepator (viteza 5). Trei niveluri de dificultate create cu conditii imbricate!

Poti imbrica cate conditii vrei, dar de obicei 2-3 niveluri sunt suficiente. Prea multe imbricate fac codul greu de citit!
Fii atent la indentare (alinierea blocurilor)! Scratch face asta automat, dar trebuie sa te asiguri ca pui blocurile in locurile corecte pentru a obtine logica dorita.

Exercitii practice

Exercitiul 1 (Nivel minim) -

Exercitiu Creativ
Joc "Prinde Stea" cu Conditii

Creeaza un joc simplu in Scratch unde o pisica trebuie sa prinda o stea care se misca aleator:

  1. Sprite pisica: Se misca cu sagetile (up/down/left/right)
  2. Sprite stea: Se teleporteaza aleator pe scena la fiecare 2 secunde
  3. Conditie principala: DACA pisica atinge steaua, ATUNCI:
    • Mareste scorul cu 1
    • Reda un sunet de reusita
    • Steaua se teleporteaza instant in alta pozitie
  4. Conditie bonus: DACA scorul > 10, ATUNCI viteza stelei creste (se teleporteaza la fiecare 1 secunda)
Vezi rezolvarea

Foloseste 2 sprite-uri: Pisica si Steaua, plus variabila scor.

Pisica (miscare, 4 scripturi separate, ca la lectia de evenimente):

  1. when [up arrow] key pressed -> change y by (10)
  2. when [down arrow] key pressed -> change y by (-10)
  3. when [right arrow] key pressed -> change x by (10)
  4. when [left arrow] key pressed -> change x by (-10)

Steaua, doua scripturi paralele dupa when green flag clicked:

Script coliziune: set [scor] to (0), apoi forever: if <touching [Pisica]?> then change [scor] by (1), play sound [pop] until done, go to random position.

Script viteza (conditia bonus): forever: if <(scor) > [10]> then wait (1) seconds else wait (2) seconds, apoi go to random position.

Nota: go to random position nu a fost explicat detaliat in aceasta lectie (a aparut doar ca varianta gresita la un chestionar din lectia de miscare), dar exista in categoria Motion si face exact ce spune numele.

Exercitiul 2 (Nivel standard) -

Exercitiu Logic
Sistem de Traffic Light (Semafor)

Creeaza un semafor functional cu conditii imbricate:

  1. Desenati sau importati 3 costume pentru sprite-ul semafor: rosu, galben, verde
  2. Semafor-ul schimba culoarea automat: Verde 5 sec → Galben 2 sec → Rosu 5 sec → repeat
  3. Adaugati un sprite "Masina" care:
    • DACA semafor e verde → merge inainte
    • DACA semafor e galben → incetineste (merge mai rar)
    • DACA semafor e rosu → se opreste complet
  4. Provocare: Foloseste o variabila "culoare_semafor" (0=rosu, 1=galben, 2=verde) si conditii imbricate pentru masina
Vezi rezolvarea

Semafor (3 costume: verde, galben, rosu) - when green flag clicked, apoi forever:

  1. switch costume to [verde], set [culoare_semafor] to (2), wait (5) seconds
  2. switch costume to [galben], set [culoare_semafor] to (1), wait (2) seconds
  3. switch costume to [rosu], set [culoare_semafor] to (0), wait (5) seconds

Masina - when green flag clicked, forever, cu conditii imbricate dupa culoare_semafor:

if <(culoare_semafor) = [2]> then move (5) steps (verde: merge inainte), else - inauntrul lui else pui al doilea if...then...else: if <(culoare_semafor) = [1]> then move (2) steps (galben: incetineste), else nu misca nimic (rosu: oprit).

Scratch nu are bloc separat "else if" - conditia imbricata ceruta chiar inseamna un al doilea if...then...else pus in interiorul lui else al primului.

Exercitiul 3 (Nivel performanta) -

Exercitiu Avansat
Optional — aprofundare peste programa cls. VI. Combinatia de conditii imbricate si sistem de vieti depaseste cerintele OMEN 3393/2017 pentru clasa a VI-a. Recomandat doar dupa insusirea exercitiilor 1 si 2.
Platformer cu Conditii Complexe

Creeaza un mini joc de platforme cu logica complexa:

  1. Personaj (sprite jucator):
    • Se misca stanga/dreapta cu sagetile
    • Sare cu spatiu (schimba y cu 50, apoi revine)
    • DACA atinge culoarea verde (platforma), poate sa sara
    • DACA atinge culoarea rosie (lava), pierde o viata si se reseteaza
  2. Conditii combinate: DACA (atinge verde) AND (tasta spatiu apasata) → sare
  3. Sistem de vieti: DACA vieti = 0 → "Game Over", altfel → continua
  4. Bonus: Adauga monede (sprite-uri separate) care dispar la atingere SI maresc scorul
Vezi rezolvarea

Nivel performanta - schita, nu solutia gata mestecata. Foloseste doar blocuri predate: if-then, senzori de atingere/culoare, operatorul AND, variabile.

  1. Jucator: miscare stanga/dreapta cu sagetile (ca la exercitiul 1); saritura la when [space] key pressed: change y by (50), o pauza scurta, apoi change y by (-50) - lectia nu explica o fizica realista de saritura (gravitatie), o simulare simpla e suficienta.
  2. Saritura permisa doar pe platforma: if <touching [verde]?> AND <key [space] pressed?> then sari - foloseste exact operatorul AND din lectie.
  3. Lava: if <touching color [rosu]?> then change [vieti] by (-1), apoi go to x: () y: () la punctul de start (altfel ramane pe rosu si pierde vieti la fiecare cadru - capcana de la exercitiul 4).
  4. Game over: if <(vieti) = [0]> then say [Game Over].

Criterii: sare doar pe verde; pierde exact o viata pe lava; Game Over apare corect; monedele folosesc touching + hide + change scor.

Exercitiul 4 (Nivel performanta) -

Exercitiu Analitic
Debugging - Gaseste Eroarea!

Urmatorul cod Scratch are o problema. Analizeaza-l si gaseste ce nu functioneaza corect:

when [green flag] clicked
set [scor] to (0)
forever
    if <touching [Stea]?> then
        change [scor] by (1)
    end
    if <(scor) > [10]> then
        say [Ai castigat!]
    end
end

Problema: Dupa ce jucatorul atinge steaua si scorul devine 11, ce se intampla? De ce e o problema?
Sarcina ta: Identifica problema si propune o solutie folosind conditii.

Vezi rezolvarea

Nivel performanta - indicii, nu raspunsul de-a gata. Codul are doi if-then in interiorul unui forever. Intreaba-te: de cate ori pe secunda ruleaza continutul unui forever? Ce se intampla cu say [Ai castigat!] dupa ce (scor) > [10] devine adevarat o singura data?

  1. Steaua nu se muta cand e atinsa, deci touching [Stea]? ramane adevarat mai multe cadre la rand - scor poate sari peste 11 dintr-o singura atingere.
  2. Al doilea if nu are conditie de oprire: dupa ce scor > 10, mesajul say se re-executa la fiecare cadru, la nesfarsit - nu apare o singura data.

Solutie cu blocuri deja predate (fara "stop", care apare abia in lectia de bucle): adauga variabila castigat (0 la start) si schimba conditia in if <(scor) > [10]> AND <NOT <(castigat) = [1]>> then say [Ai castigat!], set [castigat] to (1) - mesajul apare o singura data.

Ce ai invatat astazi

  • Blocul if...then:Executa cod DOAR daca conditia e adevarata (DA)
  • Blocul if...then...else:Executa INTOTDEAUNA ceva - fie din "then", fie din "else"
  • Senzori:Blocuri care detecteaza atingeri, culori, taste (touching edge, touching color, key pressed)
  • Operatori de comparatie:> (mai mare), < (mai mic), = (egal) pentru a compara valori
  • Operatori logici:AND (ambele DA), OR (una DA e suficient), NOT (inversare)
  • Conditii imbricate:Conditii puse inauntrul altor conditii pentru logica complexa
  • Aplicatii practice:Jocuri interactive, sisteme de scor, detectare de coliziuni

Vrei mai mult?

Provocare: Testeaza o lege din logica (numita legile lui De Morgan): construieste <not <A and B>> si, separat, <<not A> or <not B>>, folosind 2 taste diferite ca A si B (A = "tasta apasata?", B = "cealalta tasta apasata?"). Testeaza toate cele 4 combinatii posibile (apasat/neapasat pentru fiecare) si verifica daca cele doua conditii dau mereu acelasi rezultat DA/NU.

De ce: Daca ai scrie if touching Sprite1 then... si, separat, if touching Sprite2 then... cu ACELASI cod in interior, in loc de un singur if touching Sprite1 OR touching Sprite2 then... — de ce ar putea codul tau sa execute reactia DE DOUA ORI in acelasi cadru, daca ambele conditii sunt adevarate simultan?

Deschidere: Conditiile combinate cu AND/OR apar in sisteme reale de securitate — o usa se deblocheaza DACA amprenta E corecta SAU codul PIN e corect (OR), dar un seif se deschide DOAR DACA cheia SI codul sunt corecte simultan (AND).

Urmatoarea lectie

Continua cu lectia urmatoare pentru a aprofunda cunostintele.

Continua →