====== Lecția 1: Bucle și condiții ====== În programare, putem folosi o instrucțiune specială care repetă o parte din cod. Spunem că această construcție este o buclă și că programul efectuează un ciclu repetitiv. {{:module:07-bucle-in-programare:images.jpg?300|}} Traducere: buclele (în engleză, //loops//) repetă acțiuni ca tu să nu faci asta! Până acum am folosit aceste bucle (instrucțiunea //forever//), însă în acest modul le vom aprofunda și vom învăța toate formele în care le putem scrie. Aceste forme sunt echivalente și putem folosi mai multe instrucțiuni pentru a ajunge la același rezultat al programului. Ține minte să te autentifici cu contul tău de Scratch pentru toate exercițiile de mai jos! ===== Recapitulare Scratch ===== Intră la http://scratch.mit.edu/projects/18226353/ și dă click pe **//See inside//**. Observă că acest proiect nu este complet. Clonează-l pentru a-l putea repara: dă click pe **//Remix//**. Poți vedea aici **//See inside//**: {{ :module:07-bucle-in-programare:see_inside.png?600 |}} În pagina proiectului, vezi **//Remix//**: {{ :module:07-bucle-in-programare:remix.png?600 |}} Uită-te la acțiunile pe care le face Sprite2. Aranjează instrucțiunile astfel încât steluța să cadă din locuri aleatoare și dacă nu e colectată de scafandru să se termine jocul, spunând "Missed me!". Dacă este colectată, aceasta reapare din alt loc. Nu este nevoie să adaugi instrucțiuni. \\ Creează tu o variabilă care să contorizeze câte steluțe a reușit scafandrul să colecteze. Nu ai instrucțiunile pentru această parte, va trebui să le creezi tu. {{ :module:07-bucle-in-programare:missed_me.png?500 |}} ===== Tutorial ===== În Scratch avem următoarele bucle, în secțiunea "Control": {{ :module:07-bucle-in-programare:loops_scratch.png?150 |}} Astăzi vom face împreună **//repeat until//**! ==== Exerciții ==== Intră pe http://scratch.mit.edu/projects/18179492/. Vom porni de la acest proiect pentru exercițiile din continuare. Intră înăuntru proiectului dând click pe **//See inside//**. {{:module:07-bucle-in-programare:see_inside.png?700|}} Apoi dă click pe **//Remix//**. {{:module:07-bucle-in-programare:remix.png?500|}} Acum ai clonat proiectul și poți lucra la propria versiune! Vrem ca nava spațială să pornească de pe planetă și să ajungă pe Pământ. {{ :module:07-bucle-in-programare:space_trip_simple.png?500 |}} === Mișcarea planetei și a Pământului === {{:module:07-bucle-in-programare:earth_sprite.png?100 |}}Când se apasă stegulețul verde, adică atunci când începe programul, planeta din stânga jos și Pământul trebuie să rotească pe loc mereu. Folosește o buclă necondiționată și instrucțiunea //turn 15 degrees//. Poți schimba numărul de grade pentru ca rotația să fie mai rapidă sau mai lentă. === Mișcarea navei spațiale === {{:module:07-bucle-in-programare:spaceship.png?100 |}}De asemenea, când se apasă stegulețul verde, nava spațială va pleca de pe planetă și va ateriza pe Pâmânt. Se va reseta poziția navei la anumite coordonate astfel încât la începerea programului nava se află întotdeauna pe planetă. Folosește o instrucțiune de forma //go to x: .. y: ..// din secțiunea **Motion**. Completează cu valorile potrivite pentru coordonata x și y. Cum ai aflat aceste valori? Nava va zbura prin spațiu până când ajunge la Pământ. **Într-o buclă //forever//**, primul lucru care trebuie să-l faci este să setezi direcția sa. Apoi, să o muți pe aceea direcție un număr de pași. După fiecare mutare, verifică dacă ai ajuns pe Pământ. Urmărește textul de mai jos. Îndreaptă nava câtre Pâmânt. Folosește instrucțiunea //point towards Earth// din secțiunea **Motion**. Observă că poți selecta oricare obiect/sprite ca direcție, iar sprite-ul corespunzător Pământului se numește Earth. Mută un număr de pași. Folosește //move// din secțiunea **Motion**. Pentru a verifica dacă a ajuns pe Pâmânt folosește o instrucțiune din secțiunea **Sensing**. Dacă a ajuns pe Pământ, oprește toate acțiunile. Cum ai făcut asta? Creează o variabilă "distanță" care inițial va fi 0 și care se va schimba cu numărul de pași pe care îi face nava. {{ :module:07-bucle-in-programare:space_trip.png?500 |}} **Schimbă bucla //forever// într-o buclă //repeat until//**. Singura diferență va consta în a pune condiția de oprire după "until" și nu în interiorul buclei cu ajutorul unei condiții, cum am făcut cu bucla //forever//. ===== Bonus ===== ==== Bonus 1: Evenimente ==== {{:module:07-bucle-in-programare:alien_pico.png?100 |}}Acum că nava a ajuns cu bine pe Pâmânt, vrem să ca extraterestrul nostru să viziteze Pământul. Pentru asta, adaugă un eveniment "aterizat" pentru când nava ajunge pe Pământ. În acel moment, se schimbă fundalul cu un loc de pe Pâmănt (extraterestrul poate ajunge chiar și în deșert sau într-o sală de teatru). Pe lângă schimbarea fundalului, ascunde Pământul, planeta, soarele și nava. În locul lor, va apărea un Sprite cu extraterestrul nostru explorator. ==== Bonus 2: Variabile și operatori ==== Dacă distanța pe care a parcurs-o este mai mare ca 200, extraterestrul va spune că drumul a fost lung. Altfel, va spune că a fost scurt. Folosește operatori de comparație. ==== Bonus 3: Liste ==== La meniul //Data//, aveți posibilitatea de a crea o listă. O listă este o înșiruire de cuvinte sau de numere, de exemplu. Realizați un program în Scratch în care să aveți o listă de 10 cuvinte. Un sprite va spune aleator un cuvânt din listă la infinit. Când spune cuvântul, va trebui să și apară obiectul echivalent cuvântului în scenă, așteaptă 1 sec și dispare înainte să spună următorul cuvânt. ===== Lucru pentru acasă ===== Fii creativ! Extraterestrul nostru va merge într-o aventură după ce ajunge pe Pământ. Ce aventură rămâne la alegerea ta (poți face un labirint, de exemplu). Pentru rezolvarea în Scratch folosește cel puțin o variabilă și condiții cu operatori!