Invatare Atomica

Proiect: Labirint - Joc Complet in Scratch

Progres lectie:
0%
🎯

Obiectivul lectiei

Stii conditii, bucle, variabile... dar separat. Nu stii cum sa le combini intr-un program real. Fiecare concept pare izolat si fara legatura cu celelalte. Te intrebi: "La ce folosesc toate astea impreuna?"

Dupa aceasta lectie vei putea:

  • Sa combini DACA...ATUNCI, DACA...ALTFEL, operatori logici, bucle si variabile intr-un proiect real
  • Sa identifici ce concept din modulul M3 rezolva fiecare comportament dintr-un joc
  • Sa construiesti in Scratch un joc de labirint functional cu miscare, detectie pereti si conditie de victorie
  • Sa depanezi un pseudocod de joc si sa gasesti bug-ul logic
  • Sa explici care lectie (1-5) este sursa fiecarui concept folosit in proiect

Incearca singur!

🎮 Analizeaza un joc de labirint!

Provocare: Descopera conceptele ascunse!

Inainte sa construim propriul labirint, sa analizam cum functioneaza un joc de labirint. Gandeste-te la un joc in care un personaj se misca prin labirint, evita peretii si ajunge la iesire.

  1. Deschide Scratch si imagineaza-ti un joc de labirint simplu
  2. Jucatorul se misca cu sagetile si nu poate trece prin pereti
  3. Cand atinge iesirea (zona rosie), castiga
  4. Are 3 vieti - daca atinge un inamic, pierde o viata
  5. Un cronometru numara timpul de la start
  6. Identifica: unde sunt conditiile? unde sunt buclele? unde sunt variabilele?

📋 Analiza conceptelor dintr-un joc de labirint:

Comportament in joc Concept folosit Lectia de origine
Daca atinge peretele, se opreste daca...atunci (conditie simpla) Lectia 1
Daca atinge iesirea, castiga; altfel, continua daca...altfel (decizie dubla) Lectia 2
Atinge peretele SI are 0 vieti = game over operatori logici (SI, SAU) Lectia 3
La start, creeaza 3 inamici cu bucla repeta de N ori Lectia 4
Jocul ruleaza pana cand ajungi la iesire repeta pana cand Lectia 5
Scor, vieti, cronometru variabile Toate lectiile
💡 Indiciu #1: Unde este bucla principala a jocului?
Intregul joc este o bucla mare: "repeta pana cand (atingi iesirea SAU vieti = 0)". In interior, la fiecare cadru, se verifica: tastele apasate, coliziunile cu peretii, coliziunile cu inamicii. Aceasta bucla ruleaza de ~30 ori pe secunda!
💡 Indiciu #2: Unde sunt conditiile?
Conditiile sunt peste tot! "Daca tasta sageata-sus apasata ATUNCI misca-te sus" (Lectia 1). "Daca atingi peretele ATUNCI mergi inapoi la start, ALTFEL continua" (Lectia 2). "Daca atingi inamic SI vieti > 0 ATUNCI pierde viata" (Lectia 3).
💡 Indiciu #3: Unde sunt variabilele?
Variabilele stocheaza starea jocului: "scor" (creste cand colectezi un obiect), "vieti" (scade cand atingi un inamic), "cronometru" (creste in fiecare secunda), "pozitie_start_x" si "pozitie_start_y" (unde se teleporteaza jucatorul cand atinge peretele).

🌟 Provocare Bonus (optional)

Deschide Scratch si cauta proiecte de labirint existente (click pe "Explore" si cauta "maze"). Alege unul si incearca sa identifici toate blocurile din categoriile: Control (portocaliu), Sensing (albastru deschis) si Variables (portocaliu inchis). Cate gasesti din fiecare?

1

1. Conceptele M3 regasite intr-un joc real

🎮
Fiecare comportament din joc = un concept din M3
Idee cheie: Un joc de labirint combina TOATE structurile invatate in modulul M3. Fiecare comportament al jocului corespunde unui concept specific — nu sunt concepte abstracte, ci solutii concrete la probleme concrete din programare.
Comportament in joc Concept M3 Pseudocod formal
Jucatorul se misca cu tastele DACA...ATUNCI (Lectia 1) DACA tasta_sus ATUNCI y = y + 5 SFARSIT_DACA
Atinge peretele: reset; altfel: continua DACA...ALTFEL (Lectia 2) DACA atingi_negru ATUNCI reset ALTFEL continua SFARSIT_DACA
Game over: atinge inamic SI vieti = 0 Operatori logici (Lectia 3) DACA atingi_inamic SI vieti = 0 ATUNCI game_over SFARSIT_DACA
Creaza 3 inamici la start PENTRU i DE LA 1 LA 3 (Lectia 4) PENTRU i DE LA 1 LA 3 EXECUTA creeaza_inamic SFARSIT_PENTRU
Jocul ruleaza pana la victorie/infrangere REPETA...PANA CAND (Lectia 5) REPETA logica_joc PANA CAND castiga SAU vieti = 0
Scor, vieti, cronometru Variabile (toate lectiile) scor = 0; vieti = 3; timp = 0
Aceasta este puterea algoritmilor: conceptele de baza (conditii, bucle, variabile) se combina pentru a crea orice program complex. Labirintul este simplu, dar aceeasi arhitectura sta la baza oricarui joc profesional!
2

2. Pseudocodul complet al jocului

📄
Arhitectura unui joc de labirint in pseudocod formal
Structura generala: Orice joc are aceeasi arhitectura: initializare → bucla principala (game loop) → in interiorul buclei: input + logica + verificare stare → iesire cand conditia de terminare e indeplinita.
START
  { Initializare - executata o singura data }
  vieti = 3
  scor = 0
  timp = 0
  x = pozitie_start_x
  y = pozitie_start_y

  { Bucla principala - conditionata posterior }
  REPETA
    { Input: miscare jucator - DACA...ATUNCI (Lectia 1) }
    DACA tasta_sus ATUNCI y = y + 5 SFARSIT_DACA
    DACA tasta_jos ATUNCI y = y - 5 SFARSIT_DACA
    DACA tasta_dreapta ATUNCI x = x + 5 SFARSIT_DACA
    DACA tasta_stanga ATUNCI x = x - 5 SFARSIT_DACA

    { Detectie pereti - DACA...ALTFEL (Lectia 2) }
    DACA atingi_perete ATUNCI
      x = pozitie_start_x
      y = pozitie_start_y
    SFARSIT_DACA

    { Detectie inamici - Operatori logici (Lectia 3) }
    DACA atingi_inamic SI vieti > 0 ATUNCI
      vieti = vieti - 1
      x = pozitie_start_x
      y = pozitie_start_y
    SFARSIT_DACA

    timp = timp + 0.1

  PANA CAND (atingi_iesire SAU vieti = 0)

  { Rezultat final - DACA...ALTFEL (Lectia 2) }
  DACA atingi_iesire ATUNCI
    scor = 1000 - timp * 10
    afiseaza "Ai castigat! Scor: " + scor
  ALTFEL
    afiseaza "Game Over!"
  SFARSIT_DACA
STOP
Observa separarea: initializarea este IN AFARA buclei (se executa o data), logica de joc este IN INTERIORUL buclei (se executa la fiecare cadru, aproximativ de 30 ori pe secunda in Scratch).
3

3. Fazele constructiei in Scratch

🛠
De la pseudocod la Scratch: metodologie pas cu pas
Regula de aur: Scrie pseudocodul INAINTE de a deschide Scratch. Odata ce ai pseudocodul, traducerea in blocuri Scratch este mecanica. Fara pseudocod, codul devine haotic si greu de depanat.
  1. Faza 1 — Design backdrop: Deseneaza labirintul in editorul Scratch. Pereti = negru, drum = alb, start = verde, iesire = rosu. Codificarea prin culori permite detectia coliziunilor cu blocul touching color.
  2. Faza 2 — Sprite jucator: Adauga un sprite mic, seteaza pozitia initiala pe zona verde (start).
  3. Faza 3 — Variabile: Creeaza variabilele vieti, scor, timp (Variables → Make a Variable). Initializeaza-le in blocul when green flag clicked.
  4. Faza 4 — Miscare cu taste: Adauga 4 blocuri if key pressed then (Control + Sensing) pentru sus, jos, stanga, dreapta in interiorul unui forever sau repeat until.
  5. Faza 5 — Detectie pereti: Dupa fiecare miscare, adauga if touching color [negru] then go to x: pozitie_start_x y: pozitie_start_y. Repeta pentru TOATE cele 4 directii!
  6. Faza 6 — Bucla principala: Inconjoara logica cu repeat until (touching color [rosu] or vieti = 0).
  7. Faza 7 — Conditie victorie/infrangere: Dupa bucla, adauga if touching color [rosu] then say "Ai castigat!" else say "Game Over!".
Eroare frecventa: Sa adaugi detectia peretilor DOAR pentru una sau doua directii. Daca jucatorul se misca in sus si atinge un perete, dar detectia exista doar pentru dreapta, va trece prin perete! Verifica TOATE cele 4 directii.
Testeaza dupa fiecare faza, nu doar la final! Dupa Faza 4 testeaza miscarea; dupa Faza 5 testeaza peretii. Depanarea este mult mai usoara cand stii EXACT care faza a introdus bug-ul.

Exercitii practice

Exercitiul 1 (Nivel minim)

Exercitiu Analitic
Gaseste bug-ul in pseudocod

Analizeaza urmatorul pseudocod pentru un joc de labirint si gaseste eroarea care face jocul sa nu functioneze corect:

cand se apasa steagul verde:
    mergi la x: -200  y: 150
    seteaza [vieti] la 3

    repeta pana cand (atingi culoarea [rosu]):
        cand tasta [sageata sus] apasata:
            schimba y cu 5
        cand tasta [sageata jos] apasata:
            schimba y cu -5
        cand tasta [sageata dreapta] apasata:
            schimba x cu 5
            DACA atingi culoarea [negru] ATUNCI
                mergi la x: -200  y: 150
        cand tasta [sageata stanga] apasata:
            schimba x cu -5

    spune "Ai castigat!"

Intrebari:

  1. Cate directii au verificare de perete (touching color negru)?
  2. Ce se intampla cand jucatorul merge in sus si atinge un perete?
  3. Cum ai repara bug-ul?

Exercitiul 2 (Nivel standard)

Exercitiu Aplicativ
Construieste labirintul de baza (Fazele 1-3)

Deschide Scratch si construieste un labirint functional cu primele 3 faze:

  1. Faza 1: Deseneaza un backdrop cu pereti negri, drum alb, start verde, iesire rosie
  2. Faza 2: Programeaza miscarea cu cele 4 taste sageata (change x/y by 5)
  3. Faza 3: Adauga detectia peretilor la TOATE cele 4 directii

Criteriu de succes: Jucatorul se misca prin labirint, nu poate trece prin pereti si este trimis la start cand atinge negru.

Exercitiul 3 (Nivel performanta)

Exercitiu Creativ
Labirint cu 3 camere si sistem de chei

Extinde proiectul de baza cu un labirint care are 3 camere separate, conectate prin usi colorate. Jucatorul trebuie sa gaseasca cheia potrivita pentru a deschide fiecare usa!

Cerinte:

  • Camera 1: Start + cheia albastra
  • Usa albastra: se deschide doar daca ai cheia albastra (variabila cheie_albastra = 1)
  • Camera 2: Contine cheia galbena
  • Usa galbena: se deschide doar daca ai cheia galbena
  • Camera 3: Contine iesirea (zona rosie)
  • Adauga un contor de chei colectate pe ecran

Exercitiul 4 (Nivel performanta)

Exercitiu Matematic
Calculeaza drumul optim prin labirint

Analizeaza urmatoarea grila de labirint 5x5. Fiecare celula libera costa 1 pas. Gaseste drumul cel mai scurt de la S (start) la E (exit).

Grila labirint (# = perete, . = drum, S = start, E = iesire):

  1 2 3 4 5
1 S . # . .
2 # . # . #
3 . . . . .
4 . # # . #
5 . . # . E

Cerinte:

  1. Deseneaza pe hartie toate drumurile posibile de la S la E
  2. Numara pasii pentru fiecare drum
  3. Care este numarul MINIM de pasi? (miscare: sus, jos, stanga, dreapta)
  4. Cate drumuri diferite exista cu lungimea minima?

Ce ai invatat astazi

  • Design:Ai proiectat un labirint cu codificare de culori (negru, alb, verde, rosu)
  • Miscare:Ai programat controlul jucatorului cu 4 taste sageata
  • Coliziuni:Ai implementat detectia peretilor cu "touching color" (Lectia 1)
  • Castig:Ai adaugat conditia de victorie cu daca...altfel (Lectia 2)
  • Logica:Ai combinat conditii cu operatori SI, SAU (Lectia 3)
  • Game Loop:Ai folosit "repeta pana cand" pentru bucla jocului (Lectia 5)
  • Variabile:Ai creat sisteme de scor, vieti si cronometru