1. Detectarea Coliziunilor
Tipuri de coliziuni in Scratch:
| Bloc | Ce detecteaza | Cand se foloseste |
|---|---|---|
touching [sprite]? |
Contact cu alt sprite | Jucator atinge inamic sau obiect |
touching color [ ]? |
Contact cu o culoare | Platformer - detectare pamant/pereti |
touching edge? |
Contact cu marginea scenei | Bounce sau game over la limita |
distance to [sprite] |
Distanta pana la obiect | Detectare inainte de contact |
🎮 Exemplu: Platformer - Detectare Pamant
Explicatie: Personajul cade constant (gravitatie) DOAR daca nu atinge culoarea maro (pamantul). Cand atinge, se opreste din cadere.
2. Sistemul de Punctaj
Implementarea scorului:
Pasul 1: Creeaza variabila
Variables → Make a Variable → numeste-o "Scor" → bifează "For all sprites"
Pasul 2: Initializeaza la start
La inceputul jocului: set [Scor] to [0]
Pasul 3: Modifica in timpul jocului
Pentru a adauga: change [Scor] by [10]
Pentru a scadea: change [Scor] by [-5]
🌟 Exemplu: Sistem de punctaj diferentiat
Explicatie: Diferite obiecte dau puncte diferite. Obiectele rare (aur) dau mai multe puncte decat cele comune (argint).
3. Sistemul de Vieti si Game Over
Implementare sistem complet vieti:
// LA START - Initializare
when green flag clicked
set [Vieti] to [3]
set [GameOver] to [0]
// IN JOC - Pierdere viata
when I receive [lovit-de-inamic]
change [Vieti] by (-1)
play sound [hurt]
broadcast [flash-red] // Efect vizual
// IN JOC - Verificare Game Over
when green flag clicked
forever
if <[Vieti] < [1]> then
set [GameOver] to [1]
broadcast [game-over]
stop [all]
end
end
// ECRAN GAME OVER (sprite separat)
when I receive [game-over]
show
say (join [GAME OVER! Scor: ] [Scor]) for (5) seconds
💔 Exemplu: Afisare vizuala a vietilor cu inimi
In loc de numar, poti afisa inimi care dispar:
Creeaza 3 costume pentru sprite-ul "Inimi": unul cu 3 inimi, unul cu 2, unul cu 1. Fiecare costume reflecta vietile ramase.
4. Conditii de Victorie si Infrangere
Tipuri de conditii de victorie:
| Tip | Conditie | Exemplu |
|---|---|---|
| Scor target | [Scor] > [100] |
Colecteaza 100 puncte |
| Locatie | touching [Finish]? |
Ajunge la linia de finish |
| Eliminare completa | [InamiciRamasi] = [0] |
Elimina toti inamicii |
| Timp | [Timp] > [0] and [Nivel] = [final] |
Termina inainte sa expire timpul |
| Colectie | [Obiecte] = [10] |
Colecteaza toate cele 10 piese |
🎯 Exemplu: Sistem multi-conditie (win/lose)
5. Simularea Gravitatiei (extensie avansata)
change y by si touching color — blocuri pe care le cunosti deja.
⬇️ Gravitatie simpla — fara variabile extra
Cum functioneaza: Personajul coboara cu 5 pixeli la fiecare frame. Cand atinge culoarea maro (pamantul desenat pe backdrop), conditia devine falsa si caderea se opreste. Aceasta varianta este suficienta pentru exercitiul de nivel minim.
VelocitateY si OnGround. Necesita intelegerea variabilelor de stare si a buclelor cu conditii multiple.
🏃 Extensie: Gravitatie cu acceleratie si saritura naturala
Explicatie: VelocitateY scade constant (gravitatie). Cand sprite-ul atinge pamantul verde, viteza devine 0. Spatiu da impuls in sus, dar doar daca esti pe pamant (evita double-jump).
6. AI Simplu pentru Inamici
Tipuri de AI simplu:
🔁 AI #1: Patrulare (Back-and-Forth)
Inamicul merge intr-o directie pana loveste marginea, apoi se intoarce si continua. Simplu si eficient pentru platformere!
🎯 AI #2: Urmarire Jucator (Chase)
Daca jucatorul e aproape (< 150 pixeli), inamicul se intoarce si urmareste rapid. Daca jucatorul e departe, patruleaza normal. Creeaza tensiune!
🎲 AI #3: Miscare Random (Wandering)
Inamicul merge inainte si random schimba directia. Imprevizibil si natural pentru creaturi/inamici pasnici.
Structura repetitiva: taxonomia din programa (VI-2.3, VI-3.3)
| Tip (programa) | Pseudocod | Echivalent Scratch | Cand se verifica conditia |
|---|---|---|---|
| Conditionata anterior (while) |
cat_timp <conditie> executa instructiuni sfarsit_cat_timp |
repeat until <NOT conditie> |
INAINTE de fiecare repetitie; posibil sa nu se execute deloc daca conditia e falsa de la inceput |
| Cu contor (for) |
pentru i de la 1 la N executa instructiuni sfarsit_pentru |
repeat (N) |
Se executa exact N ori; contorul creste automat |
| Conditionata posterior (do...while) |
executa instructiuni cat_timp <conditie> |
Nu exista echivalent direct in Scratch; se simuleaza cu repeat until + flag |
DUPA fiecare repetitie; se executa cel putin o data |
| Infinita (loop fara conditie) |
repeta instructiuni sfarsit_repeta |
forever |
Nu se verifica nicio conditie; ruleaza pana la oprirea programului |
Schema logica a structurii repetitive conditionata anterior (while):
repeat until <[Timp] = [0]> (din lectia de timer) este o structura conditionata anterior: verifica daca Timp = 0 inainte de fiecare iteratie. Cand conditia devine adevarata, bucla se opreste.
Pseudocod pentru timerul din jocul tau:
seteaza Timp la 60
cat_timp Timp > 0 executa
asteapta 1 secunda
scade Timp cu 1
sfarsit_cat_timp
afiseaza "Timp expirat!"
opreste tot