PROGRAMARE, COMUNICARE,
IMAGINAŢIE, DESIGN
Lucrările
Conferinţei Naţionale de Informatică pentru Elevi
Ediţia a II-a
Sibiu, 2 Aprilie 2016
Universitatea „Lucian Blaga” din Sibiu
Facultatea de Ştiinţe
Departamentul de Matematică şi Informatică
Colectivul de Informatică
Lucrările Conferinţei Naţionale de Informatică pentru Elevi
„Programare, Comunicare, Imaginaţie, Design”
Ediţia a II-a, Sibiu, România
Editori
Dana Simian
Laura Florentina Stoica
Comitet Ştiinţific
Prof. univ. dr. Dana Simian – preşedinte (chair)
Prof. univ. dr. Valer Roşca
Lector univ. dr. Ralf Fabian
Lector univ. dr. Daniel Hunyadi
Lector univ. dr. Mircea Muşan
Lector univ. dr. Mircea Neamţu
Lector univ. dr. Alina Pitic
Lector univ. dr. Florin Stoica
Lector univ. dr. Laura Florentina Stoica
Colectiv tehnoredactare
Dana Simian
Laura Florentina Stoica
Design copertă
Ralf Fabian
ISSN 2393 - 4956
Prefaţă
Prezentul volum reuneşte lucrările prezentate la a doua ediţie a Conferinţei
Naţionale de Informatică pentru Elevi “Programare, Comunicare, Imaginaţie,
Design”, desfăşurată la Universitatea „Lucian Blaga” din Sibiu, în data de 2 aprilie
2016 și organizată de către Colectivul de Informatică din cadrul Departamentului
de Matematică şi Informatică, de la Facultatea de Ştiinţe. Scopul conferinţei este
de a reuni elevi din toate centrele pre-universitare din ţară pentru a prezenta şi a
discuta aplicații originale realizate în cadrul următoarelor arii tematice ale
domeniului informatică: structuri de date în aplicaţii software, metode de
compresie a datelor, algoritmi de sortare: metode şi aplicaţii, software educaţional,
teoria grafurilor în probleme şi aplicaţii, criptografie, securitatea sistemelor
informatice, dezvoltarea aplicaţiilor cu baze de date, procesarea imaginilor,
proiectarea şi implementarea site-urilor Web, aplicaţii multimedia în educaţie,
divertisment, aplicaţii software pentru dispozitive mobile, tehnici de programare,
managementul proiectelor informatice, etc. Mulţumim tuturor participanţilor,
colectivului de organizare şi colectivului ştiinţific, pentru contribuţia adusă la
succesul acestei manifestări ştiinţifice şi la realizarea prezentului volum.
Prof. univ. Dr. Dana Simian
Cuprins:
HangMan …………………………………………………………………………
Albu Sebastian, Topor Mihai
Profesori coordonatori: Preda Georgeta, Cojocaru Gabriel
6
Spânzurătoare …………………………………………………………….……...
Benea Alin Andrei
Profesor coordonator: Georgescu Oana
14
Universul fractalilor ……………….…………….……………………….……...
Bîrsan Iulia Maria
Profesor coordonator: Demco Andreea
18
ITAsks …………………………………………………………….………………
Crăciun Alexandru-Mihail, Roatiș Răzvan
Profesor coordonator: Modrișan Adrian
30
Mark It …...………………………………………………………………………
Dragomir Andrei, Grozea Ioan
Profesor coordonator: Delilah Florea
35
Fireball ………………………………………………………………………...…
Georgescu Bogdan, Petrean Ciprian
Profesor coordonator: Humeniuc Ramona
42
PhotoMaster ………………………...…….……….…………………….…….…
Handolescu Radu, Motoc Alexandru-Nicolae
Profesori coordonatori: Steavu Nicolae, Steavu Cristina-Elena
48
Dodgy Ninja …….………….…………….………………………………..……..
Holerga Flavius, Milik Andrei, Moga Inocențiu
Profesor coordonator: Florea Gabriela
55
Site dinamic educațional: Facultatea de Științe Economice …………………..
Mărginean Alexandra Maria, Bakó Amalia
Profesor coordonator: Humeniuc Ramona
60
Angry Driver ………..….………………………………………………….……..
Marinescu Marius Daniel, Preda Mihail Irinel
Profesor coordonator: Martin Elena Liliana
65
StarDust .…………….……………………………………………………………
Oltean Alexandru, Prăvariu Alin
Profesori coordonatori: Popescu Carmen, Preda Georgeta
73
4
Pseudocode Learning Companion ………………………………...……………
Popa Cătălin
Profesor coordonator: Ignat Cornelia
78
“Spânzurătoarea”/ “Le jeu du pendu” soft educațional pentru îmbogățirea
vocabularului limbii franceze ………………………………...…………………
Radu Antinie, Abigail Radu
Profesori coordonatori: Demco Andreea, Sibișan Mădălina
85
Le Bourreau …………….………..………....................................................……
Solyom Felix Ștefan, Gyorgy Laurențiu
Profesori coordonatori: Humeniuc Ramona, Rusu Sofica
91
Bluetooth Rover ………………………………………………………………….
Stoican Radu
Profesor coordonator: Georgescu Oana
96
Lista autorilor …………………….………….…………………………….….…
102
Lista profesorilor coordonatori ….………….…………………………….….…
105
Sponsori ………………….…………………………………………….…....……
106
5
Conferinţa naţională de informatică pentru elevi
Programare, Comunicare, Imaginaţie, Design
PCID-2016, 2 Aprilie 2016
Sibiu, Romania
HangMan
Albu Sebastian, Topor Mihai
Profesori coordonatori: Preda Georgeta, Cojocaru Gabriel
Rezumat: Echipa noastră S&M Production a pregătit un joc de tipul Spânzurătoare creat în C#
în Visual Studio 2015. Prin acest joc vrem să ajutăm la îmbogățirea vocabularului , deoarece
jocul este disponibil pe mai multe limbi. Ajutăm de asemenea la învățarea unei limbi noi. In
ziua de azi limbile de circulație sunt la mare căutare si este nevoie ca o persoana să știe să
vorbească cel puțin două limbi. Uneori acest lucru este greu pentru unii, scopul nostru este să îi
ajutăm sa învețe mai ușor și mai bine aceste limbi.
Abstract: Our team 'S&M Production' has prepared a game like Hangman created in C# in
Visual Studio 2015. Through this game we would like to help you enriching your vocabulary
and because the game is available in several languages, it also helps you learning a new
language. Today, the foreign languages are in great demand and a person really needs to know
to speak at least 2 languages. Sometimes this thing is hard for some, and we want to help them
to learn easily and faster these languages.
1 Introducere
Lucrarea noastră, Hangman are ca scop îmbogățirea vocabularului persoanelor. De asemenea
ne dorim să ajutăm persoanele să învețe noi limbi precum Engleză și Franceza. Din aceste motive
jocul a fost creat in toate cele trei limbi. Noi am creat un joc original reușind să dezvoltam un mod
Multiplayer, dând mai mult farmec jocului și impulsionând jucătorul. Mai există astfel de aplicații,
dar până în momentul de față, noi nu am reușit să găsim un alt joc de acest tip, care să conțină un
mod de joc între mai mulți jucători și nici pe mai multe limbi. În următoarele secțiuni sunt
prezentate limbajul de programare folosit, scopul jocului, modul în care a fost creat și modul în care
se joacă. De asemenea interfața jocului este prezentată mai amănunțit. La finalul lucrării sunt
prezentate concluziile lucrării și bibliografia acesteia.
2 Tehnologiile folosite
Pentru realizarea aplicației noi am folosit limbajul de programare C# în programul Visual
Studio 2015. De asemenea ne-am folosit de aplicația Photoshop pentru a crea și edita anumite poze.
Astfel am reușit să creăm jocul.
3 Structura Aplicației
Aplicația este structurată pe mai multe ferestre. Jocul se joacă cu ajutorul unui cont pe care
fiecare jucător poate să îl creeze gratis. Aceste conturi sunt stocate în baza noastră de date. Tot în
6
Conferinţa Naţională de Informatică pentru Elevi, PCID 2016
2 Aprilie 2016, Sibiu, Romania
baza de date, dar într-un alt tabel avem cuvintele jocului. Aceste cuvinte sunt scrise pe mai multe
coloane în funcție de limba lor și de domeniul fiecăruia. Jocul extrage cuvintele aleator pentru limba
aleasă, fără să repete într-un joc același cuvânt. Jucătorul are la dispoziție o tastatură cu literele
posibile ale cuvântului. Aceste litere pot fi folosite apăsând “click” pe oricare sau folosind tastatura
calculatorului. În momentul în care o literă este utilizată acel buton devine inaccesibil, neputând să
mai fie apăsat. De asemenea dacă litera există în cuvânt atunci ea va fi afișată în interiorul acestuia.
Dacă litera este greșită in zona greșelilor va apărea un “X”, iar ursulețul va avea de suferit.
4 Proiectarea Aplicației
La început ne-am gândit să creăm un joc educativ. Ne-am dorit ca jocul să poată fi utilizat la
învăţarea unei noi limbi sau aprofundarea ei. Prin acest tip de joc am găsit un mod bun de a face
acest lucru. Provocarea noastră a fost să facem un joc mai bun decât cele existente deja, pentru a
păstra interesul jucătorului. Acest lucru l-am reușit implementând modul “Multiplayer” în jocul de
tip “Spanzuratoare”. Astfel, jucătorii pot învăţa prin joc multe cuvinte noi într-o limba de circulaţie
internaţională. Proiectul nostru a fost lucrat în C# deoarece ni se pare un mod rentabil de a crea o
astfel de aplicație.
5 Detalii de implementare
În realizarea acestui joc, ne-am folosit așa cum am menționat și mai sus de limbajul de
programare C#. Am folosit baze de date pentru a asigura conturile jucătorilor și de asemenea și
rezultatele lor. În realizarea programului am avut în vedere eficiența de rulare în timp a jocului și de
asemenea ocuparea unui spațiu cât mai mic cu putință în memoria calculatorului. Codul are și
pasaje complicate și încărcate dar și mai puțin încărcate, reușind astfel să aducem performanțe
maxime acestui joc.
Prezentarea unor linii de cod:
În această parte de cod prezentăm modul în care un utilizator se înregistrează în baza noastră
de date.
7
Conferinţa Naţională de Informatică pentru Elevi, PCID 2016
2 Aprilie 2016, Sibiu, Romania
În această parte de cod prezentăm încărcarea meciurilor jucate în tabel de către un jucător.
În această parte de cod prezentăm modul în care un jucător se loghează si se pornește meniul
de joc
8
Conferinţa Naţională de Informatică pentru Elevi, PCID 2016
2 Aprilie 2016, Sibiu, Romania
6 Descrierea Interfeței
Logare - Acesta este primul form, unde un jucător își poate face cont sau se poate înregistra.
Fig. 1: Fereastra de logare
Înregistrare - Aici jucătorul își poate crea cont
Fig. 2: Fereastra de înregistrare
Modificare parola - Aici jucătorul își poate modifica parola
Fig. 3: Fereastra de modificare a parolei
9
Conferinţa Naţională de Informatică pentru Elevi, PCID 2016
2 Aprilie 2016, Sibiu, Romania
Recuperare Parolă - Aici jucătorul își poate retrimite parola pe E-mail în cazul în care a uitat-o
Fig. 4: Fereastra de retrimitere a parolei
Despre - În acest loc jucătorul poate afla lucruri despre joc și despre noi, echipa de producție
Fig. 5: Fereastra cu informații despre joc.
10
Conferinţa Naţională de Informatică pentru Elevi, PCID 2016
2 Aprilie 2016, Sibiu, Romania
Încărcare Joc - În acest loc se încarcă jocul
Fig. 6: Fereastra care încarcă jocul.
Meniu Principal - Aici jucătorul după ce a intrat pe cont își poate alege dacă vrea să joace singur
sau cu un prieten sau își poate verifica recordurile și își poate schimba avatarul.
Fig. 7: Jocul propriu-zis
11
Conferinţa Naţională de Informatică pentru Elevi, PCID 2016
2 Aprilie 2016, Sibiu, Romania
Modul Multiplayer - Aici jucătorul își poate provoca un prieten sau poate intra în istoricul
meciurilor.
Fig. 8: Fereastra în care se alege un adversar pentru jocul în doi1
Meciurile Jucate - Aici jucătorul poate verifica istoricul meciurilor sale și poate începe meciurile în
care a fost provocat.
Fig. 9: Fereastra în care se găsesc meciurile jucate si provocările.
12
Conferinţa Naţională de Informatică pentru Elevi, PCID 2016
2 Aprilie 2016, Sibiu, Romania
Meniul de joc - Aici începe jocul propriu-zis unde jucătorul trebuie să ghicească cuvântul
corect pentru a face un scor cât mai mare.
Fig. 10: Fereastra în care se desfășoară jocul.
7 Concluzii
În concluzie noi ne dorim ca prin acest joc să învățam copiii, dar și nu numai, să învețe limbile:
română, franceză și engleză, îmbogățindu-le vocabularul. Am încercat de asemenea, să creştem
dificultatea şi atractivitatea jocului prin modul multi-player. Dificultăți am întâmpinat în mai multe
rânduri. Prima data am întâmpinat dificultăți la folosirea corectă a datelor din baza de date după ce
au fost parolate. Alte dificultăți am întâmpinat la unicitatea cuvintelor pe parcursul unui joc și
utilizarea aleatorie. Aceste dificultăți au fost trecute însă cu brio de echipa noastră care a făcut totul
funcțional. Pentru a depăși toate dificultatățile ne-am documentat din [1]
8 Bibliografie
[1] MSDN library, Visual Studio 2015 - https://msdn.microsoft.com/ro-ro/library/kx37x362.aspx
Albu Ștefan Sebastian
Colegiul Național “Gheorghe Lazăr”
Sibiu, România
E-mail: [email protected]
Prof. Preda Georgeta
Colegiul Național “Gheorghe Lazăr”
Sibiu, România
E-mail: [email protected]
Topor Mihai
Colegiul Național “Gheorghe Lazăr”
Sibiu, România
E-mail: [email protected]
Prof. Cojocaru Gabriel
Colegiul Național “Gheorghe Lazăr”.
Sibiu, România
E-mail: [email protected]
13
Conferinţa naţională de informatică pentru elevi
Programare, Comunicare, Imaginaţie, Design
PCID-2016, 2 Aprilie 2016
Sibiu, Romania
Spânzurătoare
Benea Alin Andrei
Profesor coordonator: Georgescu Oana
Rezumat: Tema proiectului ales se încadrează la soft utilitar și intră la categoria jocuri. Jocul a fost
creat după modelul jocului “Spânzurătoarea”. Originalitatea constă în gradul de dificultate al cuvintelor
care se pot alege în timpul jocului.
Abstract: The theme of the project is an utilitary soft and it enters at the category of games. The game is
created after the model of Hanging Game. The elements of originality are brought by the possibility of
choosing the difficulty of the words that choose in the game.
1 Introducere
„Jocul” este o formă de activitate în viața omului şi reprezintă o parte semnificativă și
creativă, mai ales în copilărie și adolescență, care stimulează foarte mult imaginația și inteligența.
Acesta este motivul care m-a determinat să creez acest joc numit Spânzurătoare. Ținând cont că
sfera de activitate și interes a copiilor s-a mutat de la hârtie la calculator, acest joc apare într-un
moment oportun. Este un joc stimulativ, care dezvoltă imaginația şi vocabularul reprezentat prin
puzzle-ul de cuvinte, făcându-l să fie captivant pentru orice vârstă.
2 Descrierea aplicaţiei
Softul este creat în Microsoft Visual Studio 2010. Limbajul de programare folosit este C#.
Programul este conceput din 4 ferestre. S-au folosit referinţe speciale cum ar fi Newtonsoft Csharp
pentru a putea face seralizarea și WpfAnimatedGif pentru a putea introduce ca background imagini
de tip gif.
Prima pagină este pagina de intrare, numită şi HomeWindow. Ea are ca background o imagine
gif și are în componență două butoane, butonul “PLAY” și butonul “SIGN UP”. Butonul “PLAY”
redirecționează la pagina de “Log in”. Butonul “SIGN UP” trimite la pagina “Register”. Funcția
folosită pentru a introduce un gif ca background este: “xmlns:gif”, fiind o funcţie specială.
A doua pagină este pagina de Log In. Această pagină conține două câmpuri. Unul este câmpul
Username, iar al doilea este Password. În cazul în care utilizatorul nu este înregistrat, atunci există
un buton care permite revenirea la pagina principală, el fiind reprezentat de o săgeată neagră în
colțul din stânga al imaginii. În cazul în care credențialele sunt valide se va deschide jocul
propriu- zis.
A treia pagină este pagina Register. În cazul în care nu există un user, aici se poate crea unul
pentru a putea intra în joc. Pagina este formată la rândul ei din cele două câmpuri username și
password. Toate informațiile sunt salvate într-un fişier numit user folosind seralizarea. Pentru acest
lucru am folosit referința Newtonsoft.Csharp. Ca apoi prin metoda de deseralizare fereastra Log in
14
Conferinţa Naţională de Informatică pentru Elevi, PCID 2016
2 Aprilie 2016, Sibiu, Romania
să verifice datele introduse. O dată ce înregistrarea este completă se va intra automat în pagina
Log in.
Ultima fereastră constituie jocul în sine. Ea este compusă din 5 butoane. Primul este butonul
NEW GAME, care schimbă cuvântul care trebuie ghicit, fără a arăta cuvântul care trebuie ghicit și
fără a modifica numărul de jocuri câștigate sau pierdute. Al doilea buton este butonul GIVE UP. O
dată apăsat acest buton, se schimbă cuvântul, se dezvăluie cuvântul care trebuie ghicit şi creşte
numărul jocurilor pierdute. Al treilea buton este butonul STATISTICS. Apăsându-l, se poate
vizualiza balansul de jocuri câștigate și jocuri pierdute. Al patrulea buton este butonul EXIT.
Apăsându-l, este permisă revenirea la prima pagină. Al cincilea buton este butonul OK. Butonul
este în legătură cu chenarul de introducere a literelor. Butonul este deblocat doar când există o literă
corespunzătoare.
În fereastră mai există trei chenare. Unul în care se generează cuvântul care trebuie ghicit, al
doilea în care trebuie introdus cuvântul și al treilea în care se generează imaginea spânzuratului.
În ferestrele Log in și Main putem observa un slide down menu în care se alege una dintre cele
trei opţiuni pentru grade de dificultate – usor, mediu și dificil. O dată ce se selectează o dificultate
nouă, cuvintele vor fi schimbate în concordanță cu dificultatea aleasă.
La finalul fiecărui joc, indiferent dacă jucătorul câstigă sau pierde, se va afișa pe ecran
definiția cuvântului, definiție preluată din DEX.
În același timp se vor afișa pe ecran toate literele greşite, astfel încât jucătorul să ştie ce litere
au fost folosite greşit. În acest mod experienţa de joc este mai bună.
Fig.1: Generarea variabilelor
În prima figură se observă codul principal al programului. În liniile de cod de mai sus se
generează două variabile. Una salvează cuvântul care trebuie ghicit și înlocuiește toate literele, în
afară de primele litere şi cele identice cu ele, cu steluțe. A doua variabilă reține toate literele care au
fost înlocuite în cuvântul principal. În același timp se verifică dacă există litere în corpul cuvântului
15
Conferinţa Naţională de Informatică pentru Elevi, PCID 2016
2 Aprilie 2016, Sibiu, Romania
care să fie identice cu prima sau ultima literă a cuvântului. În cazul în care se găsesc litere identice
atunci se afişează și aceste cuvinte.
Fig.2: Preluarea cuvântului
În figura 2 se observă procesul de preluare a cuvântului. Cuvântul este preluat dintr-un fișier.
Programul alege dintre cele trei fişiere în concordanță cu dificultatea aleasă de jucător, ca apoi
cuvântul să fie preluat de o variabilă ca să fie generate steluțele și cuvântul care trebuie să fie ghicit.
În continuarea programului este afișat cuvântul care trebuie ghicit. Pe măsură ce jucătorul
ghicește literele, steluțele sunt înlocuite cu literele corespunzătoare. Când variabila care conținea
literele de ghicit rămâne numai cu steluțe, jocul se finalizează, afişându-se un mesaj și definiția
cuvântului.
În același timp o variabilă monitorizează numărul de greșeli făcute de jucător. În cazul în care
jucătorul trece de numărul maxim de greșeli admise, jocul se va încheia. Se vor afișa cuvântul care
trebuia ghicit și definiția lui.
3 Concluzii şi perspective
În concluzie jocul este folositor pentru dezvoltarea vocabularului, pentru îmbogăţirea
lexicului, precum şi pentru completarea conștiințelor generale personale.
În viitor doresc să implementez mai multe idei, una dintre acestea fiind crearea unei hărţi a
progresului în care jucătorul poate observa evoluția sa de la începutul experienței de joc.
Doresc să generez şi un sistem de recompense. Dacă jucătorul va avea mai multe victorii
consecutiv, atunci va putea fi capabil să schimbe aspectul spânzurătorii, să modifice fundalul sau să
aleagă altă melodie, după caz.
În același timp în viitor doresc să creez o animaţie pentru fiecare element din joc, ceea ce va
oferi dinamism jocului.
Și o ultimă idee de dezvoltare va fi abilitatea de a salva scorul pentru fiecare user în parte.
3
16
Conferinţa Naţională de Informatică pentru Elevi, PCID 2016
2 Aprilie 2016, Sibiu, Romania
4 Bibliografie [1] https://www.youtube.com/watch?v=1s-VRR4_nbA&feature=youtu.be
[2] https://www.freesound.org/people/dkustic/sounds/58338/
Benea Alin Andrei
Colegiul National de Informatica „Grigore Moisil”
Profil real / specializarea Matematică Informatică, intensiv Informatică
Brasov, Romania
E-mail: [email protected]
Prof. Georgescu Oana
Colegiul Naţional de Informatică „Gr. Moisil”
Profil real / specializarea Matematică Informatică, intensiv Informatică
Brasov, Romania
E-mail: [email protected]
17
Conferinţa naţională de informatică pentru elevi
Programare, Comunicare, Imaginaţie, Design
PCID-2016, 2 Aprilie 2016
Sibiu, Romania
Universul fractalilor
Bîrsan Iulia Maria
Profesor coordonator: Andreea Demco
Rezumat: Scopul acestei lucrări este de a prezenta câţiva fractali şi modul în care aceştia se dezvoltă.
Originalitatea proiectului constă în faptul că implementarea unora dintre fractali (spirala logaritmică,
triunghiul şi covorul lui Sierpinski) a fost realizată fără nicio sursă de inspiraţie. De asemenea, cele şase
tipuri de fractali sunt generate unitar, într-un singur program, prin selectarea acestora dintr-un meniu.
Abstract: The purpose of this paper is to present some fractals and how they develop. The originality of
this project consists in the fact that some of these fractals (logarithmic spiral, Sierpinski's triangle and
carpet) were created without any source of inspiration. Also, all these fractals were created in a unitary
program, by using selections from a menu.
1 Introducere
Universul fractalilor s-a deschis în 1975, odată cu apariţia lucrării revoluționare a
matematicianului polono-franco-american Benoît Mandelbrot: „O teorie a seriilor fractale", care,
îmbogățită, a devenit mai târziu cartea „Geometria fractală a naturii“. Primele idei despre aceste
obiecte matematice datează încă din secolul al XVII-lea și aparțin lui Leibnitz, însă abordarea lor
matematică riguroasă se datorează lui Weierstrass, Cantor şi Hausdorff, matematicieni ai secolului
trecut. Mandelbrot, considerat „părintele geometriei fractale”, este cel care a introdus numele de
„fractal”, care derivă din latinescul „frangere” – a sparge în fragmente neregulate.
Caracteristica definitorie a fractalilor este auto-similaritatea, aceștia fiind un fel de păpuși
„Matrioșka“, ce intră una în alta. Ei constituie o noțiune centrală în geometria naturii și în teoria
sistemelor foarte neregulate cunoscute drept haos și au reprezentat, la momentul apariției lor, o
întoarcere a matematicii la lumea macroscopică, la realitatea palpabilă care ne înconjoară.
Fig1. Fractali
18
Conferinţa Naţională de Informatică pentru Elevi, PCID 2016
2 Aprilie 2016, Sibiu, Romania
Un obiect este auto-similar dacă acesta poate fi descompus într-un număr arbitrar de părți mai
mici, iar fiecare dintre acestea este o replică a întregii structuri.
Un fractal este orice formă ale cărei părți componente, atunci când sunt mărite, prezintă tot
atâtea detalii ca și întregul. Fractalii sunt forme auto-similare, aceasta însemnând că structura
întregului sistem e deseori reflectată în fiecare porţiune a sa.
În sinteză, putem spune că două proprietăți definitorii ale fractalilor sunt: detalierea la infinit
și auto-similaritatea. [11]
Geometria fractală reprezintă un demers extraordinar de a surprinde formele și obiectele lumii
reale. În lumea înconjurătoare, puține sunt formele care pot fi descrise în termeni de figuri simple
ale geometriei euclidiene, precum sunt liniile, cercurile, cuburile și sferele. “O anecdotă matematică
povestește despre un fizician care credea că o metodă de a se îmbogăți din pariuri la cursele de cai
ar fi să rezolve ecuațiile exacte de mișcare pentru cai. După multă muncă, el a reușit să rezolve
ecuațiile, pentru cai sferici! Însă, din păcate, caii reali nu sunt sferici, așa cum nu sunt nici norii,
florile sau plămânii! De asemenea, fulgerele, râurile și sistemele de irigație nu merg în linie dreaptă,
ramificându-se asemenea arborilor, sau sistemului circulator uman.” [3]
Primele forme fractale au fost privite cu rezervă de către matematicieni, fiind considerate
hidoase, adevărate aberații geometrice, forme bizare care intrau în contradicție cu conceptele
matematice de atunci referitoare la spațiu, suprafață, distanță și dimensiune.
2 Aplicații ale geometriei fractale
În știință:
Aplicabilitatea geometriei fractale nu se rezumă doar la fenomene statice, ci și la studiul
fenomenelor dinamice, în evoluție, cum ar fi fenomenele de creștere în biologie sau de dezvoltare a
populațiilor urbane.
În natură:
Fractali aproximativi sunt ușor de observat în natură. Aceste obiecte prezintă o structură auto-
similară la o scară mare, dar finită. Exemplele includ norii, fulgii de zăpadă, cristalele, lanțurile
montane, fulgerele, rețelele de râuri, și, în sfera viului, unele plante - conopida, broccoli –, cochiliile
spiralate ale melcilor, precum și vasele sanguine sau bronhiile, în corpul omenesc.
În artă:
Structuri fractale au fost descoperite în picturile artistului american Jackson Pollock. Deși
picturile lui Pollock par a fi doar stropi haotici, analiza computerizată a evidenţiat modele fractale în
opera sa.
Fractalii apar, de asemenea, în arta și arhitectura africană. Casele circulare prezintă cercuri de
cercuri, casele dreptunghiulare prezintă dreptunghiuri de dreptunghiuri și așa mai departe. Astfel de
tipare se găsesc și în textilele și sculpturile africane, precum și în părul împletit în codițe.
3 Primii fractali frumoși
3.1 Triunghiul și covorul lui Sierpinski
Polonezul Waclav Sierpinski a pornit de la un triunghi pe care l-a divizat în patru părţi egale.
Apoi a divizat cele trei părţi marginale în acelaşi mod, continuând procesul la infinit. Figura
obţinută este numită „Triunghiul lui Sierpinski”.
Fig. 2. Triunghiul lui Sierpinski
19
Conferinţa Naţională de Informatică pentru Elevi, PCID 2016
2 Aprilie 2016, Sibiu, Romania
Aceeași formă se poate construi pornind de la un triunghi plin, în care „decupăm” găuri
identice, în loc de a trasa linii. Rezultatul este acelaşi, deşi este numit, datorită modului de
construcție, „Sita lui Sierpinski”
Fig 3. Sita lui Sierpinski
„Covorul lui Sierpinski” este o altă formă care a uimit matematicienii, construit la fel, în
ambele variante:
Fig. 4. Covorul lui Sierpinski 1
Fig. 5. Covorul lui Sierpinski 2
3.2 Curba lui Koch
Matematicianul suedez Helge Von Koch a construit „curba liniei de coastă”. El a pornit de la
o dreaptă pe care a desenat un triunghi exterior. Pe fiecare segment de dreaptă al aceleiaşi forme a
desenat câte un triunghi ş.a.m.d. Asemănător, se poate creacurba liniei de coasta Koch şi pornind de
la un pătrat, sau de la un triunghi echilateral pe laturile căruia se desenează triunghiuri echilaterale.
Fig. 6. – Curba lui Koch
Fig. 7. Fulgul de zăpadă Koch
20
Conferinţa Naţională de Informatică pentru Elevi, PCID 2016
2 Aprilie 2016, Sibiu, Romania
3.3 Dreptunghiul de aur și spirala logaritmică
Dreptunghiul de aur are ca raport între lungime și lățime numărul de aur (φ=1,6180339887...)
și este singurul dreptunghi cu proprietatea că decuparea din el a unui pătrat produce un dreptunghi
similar (asemenea). În plus, orice pereche de diagonale duse în dreptunghiuri succesive ale seriei de
dreptunghiuri din Fig. 7 se vor întâlni în același punct. Seria dreptunghiurilor din ce în ce mai mici
converge spre un punct niciodată atins, numit polul spiralei logaritmice asociată seriei, pe care
matematicianul Clifford Pickover l-a supranumit „ochiul lui Dumnezeu“. [11]
Fig. 8 Formarea spiralei logaritmice Fig. 9 Spirala
O formă foarte prezentă în natură și strâns legată de secțiunea de aur este spirala logarimică.
Numele ei derivă din modul în care crește raza atunci când parcurgem curba și mai este cunoscută și
sub numele de spirala echiunghiulară, evidențiind o proprietate interesantă a acesteia: toate dreptele
trasate dinspre pol spre puncte oarecare ale curbei taie spirala sub exact același unghi. Un alt nume
dat acestei forme este spira mirabilis (spirala miraculoasă). [11]
Spirala logaritmică se construiește ducând sferturi de cerc în pătratele asociate
dreptunghiurilor de aur. Sferturile de cerc au centrele în câte unul din vârfurile pătratelor și razele
egale cu lungimile laturilor pătratelor. Spirala logaritmică relevă procesele creșterilor organice, în
sensul că, pentru orice dreaptă care trece prin pol și intersectează spirala și pentru orice patru puncte
succesive de intersecție, A, B, C, D, alese ca în figura 8, are loc relația: AB + BC = CD iar CD/BC
= BC/AB = φ. [11]
Șoimii călători au o vedere ascuțită ca briciul și sunt unele dintre cele mai iuți păsări,
aruncându-se asupra țintelor lor cu viteze de până la 320 de kilometri pe oră. S-a constatat că ei nu
urmează drumul cel mai scurt spre pradă – linia dreaptă -, ci parcurg spre aceasta o traiectorie sub
formă de spirală logaritmică. Acest fapt i-a consternat pe biologi. După ani de căutări, biologul
Vance Tucker și-a dat seama că inedita traiectorie se află în strânsă legătura cu felul în care le sunt
dispuși ochii, aceștia fiind așezați fiecare pe câte o latură a capului, la un unghi de 40° față de planul
de simetrie al corpului (planul sagital). Ca să poată privi drept înainte, ei nu-și pot ține capul drept
(în prelungirea corpului), ci trebuie să și-l răsucească cu 40° (față de planul de simetrie).
Experimente realizate în tunelul aerodinamic au arătat că această răsucire a capului le micșorează
considerabil viteza. Prin urmare, ca să atingă viteza maximă și, simultan, să nu scape prada din
ochi, șoimii zboară ținându-și capul drept și corpul orientat la un unghi de 40° față de direcția pe
care se află ținta, menținând acest unghi constant. Traiectoria descrisă de o astfel de deplasare este
exact spirala echiunghiulară. (Fig 10.) [3]
21
Conferinţa Naţională de Informatică pentru Elevi, PCID 2016
2 Aprilie 2016, Sibiu, Romania
Fig 10. Traiectoria şoimilor Fig 11. Traiectoria fluturilor de noapte
Fluturii de noapte, datorită dispunerii ochilor lor compuși, se îndreaptă spre lumina degajată
de flacăra unei lumânări urmând de asemenea o traiectorie spirală. (Fig 11.)
4 Aplicația în C++, modul grafic
Scopul aplicaţiei referitoare la fractali este de a implementa şi prezenta vizual câțiva fractali
simplu de construit, în limbajul de programare C++, folosind mediul de programare Code::Blocks
şi funcțiile sale grafice. Aplicația foloseste metoda divide et impera. Elementele grafice necesare
implementării sunt:
Setarea culoriilor: setfillstyle(model,culoare), floodfill(abcisa, ordonata
,margine);
Selectarea culorii cu care se desenează: setcolor(culoare);
Având un pixel de coordonate x (abscisa) și y (ordonata), mutarea la poziția (x,y) se face
folosind funcția: moveto(x,y);
Pentru a trasa o linie de la punctul current de coordonate (x,y) la o nouă poziție de coordonate
(x1,y1), se utilizează funcția: lineto(x1,y1).
Aplicaţia in C++ permite afişarea a şase fractali:
4.1 Curba lui Koch pentru un triunghi echilateral
Pornind de la un triunghi echilateral, fiecare latură a sa se transformă conform figurii
următoare (se împarte în trei segmente, se elimină segmentul din mijloc și se construiește deasupra
un triunghi echilateral).
Fig 12. Împărţirea segmentului formând un triunghi echilateral
22
Conferinţa Naţională de Informatică pentru Elevi, PCID 2016
2 Aprilie 2016, Sibiu, Romania
Fig 13. Dezvoltarea fractalului, Curba lui Koch
Fiecare latură a acestui poligon se transformă din nou și se afişează figura obținută după ls
pași.
Introducem câteva elemente de geometrie analitică necesare.
Fie AB un segment de dreaptă, unde A este un punct de coordonate (xA,yA), iar B este un
punct de coordonate (xB,yB).
Coordonatele punctelor C și D au valorile:
xC=(2xA+xB)/3; (4.1) yC=(2yA+yB)/3; (4.2)
xD=(xA+2xB)/3; (4.3) yD=(yA+2yB)/3; (4.4)
În continuare trebuie stabilite coordonatele vârfului noului triunghi echilateral, M. Acestea se
obțin dacă se rotește punctul C în jurul punctului D cu unghiul π/3. Calculul coordonatelor este
efectuat de funcția rotplan_koch_triunghi, care are ca parametri de intrare coordonatele
punctelor C și D, respectiv unghiul sub care se face rotația și ca parametri de ieșire coordonatele
punctului M.
Trasarea liniei frânte ACMDB se face prin intermediul funcției desenez_koch_triunghi,
care primește ca parametri abscisele, respectiv ordonatele punctelor A, M, B, în această ordine.
Generarea curbei se face prin intermediul funcției recursive generator_koch_triunghi care
execută de ls ori transformarea descrisă mai sus, având ca parametri de intrare coordonatele
punctelor (x1, y1) și (x2, y2), care constituie extremitățile segmentului, numărul transformărilor
realizate la pasul curent, n, și numărul limită de transformări cerute, ls.
Algoritmul implementat prin funcția generator folosește metoda divide et impera și constă din
următorii pași:
se pornește de la segmentul AB
se determină coordonatele punctului M care constituie vârful triunghiului echilateral
în cazul în care segmentul nu a fost transformat de ls ori, se autoapelează funcția
generator_koch_triunghi pentru segmentele AC, CM, MD, DB
în caz contrar, se apelează funcția desenez_koch_triunghi care trasează linia
frântă ACMDB
23
Conferinţa Naţională de Informatică pentru Elevi, PCID 2016
2 Aprilie 2016, Sibiu, Romania
Fig 14. Afișarea curbei lui Koch în aplicația C++
În funcția principală, au fost alese coordonatele punctelor care determină triunghiul echilateral
inițial – plasat în centrul ecranului - și, pentru fiecare segment ce constituie o latură a acestuia, s-a
apelat funcția generator_koch_triunghi. După ce curba este trasată, interiorul acesteia este
colorat.
4.2 Curba lui Koch pentru un pătrat
Pornind de la un pătrat, fiecare latură a sa se transformă conform Fig 13. de mai jos:
Fig 15. Dezvoltarea laturii fractulului
Curba lui Koch pentru un pătrat
Fiecare segment al liniei frânte se transformă din nou după aceeași regulă. Programul
desenează curba după ls transformări. Transformarea și desenarea unui segment sunt realizate prin
funcția recursivă desen_koch_patrat, care are ca parametri de intrare coordonatele punctelor care
determină segmentul, numărul de transformări efectuate la pasul n și numărul de transformări cerut,
ls, și implementează următorul algoritm divide et impera:
dacă nu a fost efectuat numărul maxim de transformări primit la intrare, se calculează
coordonatele punctelor care determină linia frântă obținută pornind de la segment și,
pentru fiecare segment din această linie, se autoapelează funcția desen_koch_patrat.
în caz contrar, se desenează linia frântă obținută.
În final, figura se colorează.
Calculul coordonatelor punctelor care formează linia frântă indicată în transformarea
fractalului este efectuat de funcția rotplan_koch_patrat, care determină coordonatele (x, y) ale
unui punct obținut dacă se rotește punctul de coordonate (xc, yc) în jurul punctului de coordonate
24
Conferinţa Naţională de Informatică pentru Elevi, PCID 2016
2 Aprilie 2016, Sibiu, Romania
(x1, y1) cu unghiul unghi și are ca parametri de intrare coordonatele (xc, yc) și (x1, y1), respectiv
unghiul sub care se face rotația, unghi, și ca parametri de ieșire coordonatele (x, y).
Fig 16. Afișarea curbei lui Koch pentru un pătrat in aplicația C++
4.3 Arborele
Se pleacă de la un segment AB, de coordonate (xA,yA), respectiv (xB,yB), și se construiește un
arbore, prin transformări conform Fig 14. de mai jos:
Fig 17. Formarea copacului Fig 18. Divizarea arborelui
Lungimea fiecărei ramuri este o jumătate din lungimea inițială a segmentului, iar fiecare
ramură se transformă în mod asemănător. Programul desenează figura obținută după ls
transformări.
Pentru obținerea ramurilor, se procedează astfel:
se calculează coordonatele punctului C, până unde ar crește ramura pe verticală (aceasta,
de fapt, va crește bifurcat în punctul B):
xC=(3*xB-xA)/2; (4.5)
yC=(3*yB-yA)/2; (4.6)
se rotește punctul C în jurul punctului B cu un unghi de π/4pentru a obține vârful ramurii
mici din dreapta
se rotește punctul C în jurul punctului B cu un unghi de -π/4 din stânga.
25
Conferinţa Naţională de Informatică pentru Elevi, PCID 2016
2 Aprilie 2016, Sibiu, Romania
Fig 18. Afișarea arborelui in aplicația C++
Calculul coordonatelor celor două puncte obținute prin rotație este efectuat de funcția
rotplan_copac, care determină coordonatele (x, y) ale unui punct obținut dacă se rotește punctul
de coordonate (x1, y1) în jurul punctului de coordonate (xc, yc) cu unghiul unghi și are ca parametri
de intrare coordonatele (xc, yc) și (x1, y1), respectiv unghiul sub care se face rotația, unghi, și ca
parametri de ieșire coordonatele (x, y).
Funcția recursivă desenez_copac implementează un algoritm divide et impera și are ca
parametri de intrare coordonatele punctelor care determină segmentul (ramura care se va bifurca),
numărul de transformări efectuate la pasul n și numărul de transformări cerut, ls. În cazul în care
nu au fost efectuate toate transformările, se trasează segmentul, se calculează coordonatele
punctelor care determină ramurile și, pentru fiecare ramură, se reapelează funcția.
4.4 Spirala logaritmică
Algoritmul de desenare a spiralei constă într-un proces recursiv de desenare a dreptunghiurilor
de aur, împreună cu arcele de cerc corespunzătoare acestora.
Funcția recursivă spirala are următorii parametri de tip int:
Abscisa x și ordonata y ale punctului de pe ecran unde se află polul spiralei
Raza r a sfertului de cerc construit la iterația curentă
Raza v a sfertului de cerc construit la iterația anterioară
Unghiul unghi (cu valorile posibile 0°, 90°, 180°, 270°) care indică poziția relativă a
pătratului care va fi desenat la apelul următor față de pătratul curent.
26
Conferinţa Naţională de Informatică pentru Elevi, PCID 2016
2 Aprilie 2016, Sibiu, Romania
Fig 19. Afișarea spiralei logaritmice in aplicația C++
Programul primește ca parametru de intrare numărul de sferturi de cerc din care va fi desenată
spirala, acesta coincizând cu numărul de apeluri ale funcției recursive.
4.5 Triunghiul lui Sierpinsky
Pornind de la un triunghi, acesta se divide in patru părţi egale: triunghiul din centru nu va
suferi nicio modificare, iar pentru celelalte 3 procesul de divizare se reia recurent. Detalierea
fractalului se face în n etape, acest lucru realizându-se cu ajutorul funcţiei
desenez_sierpinsky_triunghi în care:
Mai întâi se va trasa triunghiul din centru prin unirea punctelor ce despart dreapta în doua
parţi egale; punctele se obțin cu ajutorul formulei: xA=(xB+xC)/2 (4.7). O dată ce am trasat
triunghiul din centru se poate observa în imaginea de alături că triunghiul s-a divizat in
cele patru parţi egale:
Fig 20. Triunghiul lui Sierpinsky in aplicația C++
Apoi funcţia se va autoapela, pentru cele 3 triunghiuri rămase, de n ori.
27
Conferinţa Naţională de Informatică pentru Elevi, PCID 2016
2 Aprilie 2016, Sibiu, Romania
Fig 21. Triunghiul lui Sierpinsky in C++
4.6 Covorul lui Sierpinsky
Se realizează cu ajutorul funcţiei desenez_sierpinsky_patrat, parcurgând următorii pași:
Se pleacă de la un pătrat a carui suprafaţă se divide in 9 părţi egale, prin împărţirea
fiecărei laturi în 3 segmente egale. Pentru acest lucru, ne vom folosi de următoarele
formule :
xC=(2xA+xB)/3; (4.8) yC=(2yA+yB)/3; (4.9) xD=(xA+2xB)/3; (4.10)yD=(yA+2yB)/3 (4.11)
Fig. 22. Covorul lui Sierpinsky
Apoi funcţia se autoapelează de n ori, pentru toate pătratele cu excepţia celui din centru, care
nu suferă modificări.
Fig 23. Covorul lui Sierpinsky in C++
28
Conferinţa Naţională de Informatică pentru Elevi, PCID 2016
2 Aprilie 2016, Sibiu, Romania
5 Concluzie
Rezultate parțiale și o parte din dezvoltarea proiectului poate fi vizualizată pe [11]. Proiectul
se poate dezvolta ulterior implementându-l prin intermediul altor programe, precum Visual Studio
(C#) sau Java, pentru a îmbunătăți aspectul său grafic. De asemenea, se pot extinde categoriile de
fractali.
O limită a acestui proiect este aceea că nivelele de detaliere a fractalilor sunt relativ mici,
datorită implementării recursive care, pentru un număr mare de autoapleuri, produce depăşire în
stivă.
6 Bibliografie
[1] Ghyka, M., C.: Estetica şi teoria artei, Editura Științifică și Enciclopedică, Bucureşti, 1981
[2] Ileană C., Ileană I. M : Considerații asupra fractalilor, Ginfo nr. 7, 2001
[3] Livio, M.: Secțiunea de Aur: povestea lui phi, cel mai uimitor număr, Editura Humanitas, 2005
[4] Tudor Sorin,Vlad Huţanu: Manual de informatica Profilul real-intensiv
[5] Numarul de aur - http://mathworld.wolfram.com/GoldenRatio.html
[6] Fractali - https://en.wikipedia.org/wiki/Fractal
[7] Spirala logaritmica - http://www.abovetopsecret.com/forum/thread564186/pg4
[8] Spirala logaritmica - http://catphi.wordpress.com/2010/09/16/fibonacci-sequence
[9] Imagini fractali - http://richworks.in/2011/02/patterns-in-nature-an-enigmatic-inspiration
[10] Imagini fractali - http://www.cs.berkeley.edu/
[11] Site wikispaces cu fractali – http://wikispaces.com/Fractali
[12] Sursa Fig1. Fractali - http://catphi.wordpress.com/2010/09/16/fibonacci-sequence
[13] Sursa Fig. 2. Triunghiul lui Sierpinski,Fig. 3. Sita lui Sierpinski , Fig. 4. Covorul lui Sierpinski 1, Fig. 5.
Covorul lui Sierpinski 2, Fig. 6. – Curba lui Koch, Fig. 7. – Fulgul de zăpadă Koch , Fig 12. Dezvoltarea
fractalului, Curba lui Koch - Ileană C., Ileană I. M : Considerații asupra fractalilor, Ginfo nr. 7, 2001
[14]Sursa Fig. 8 Formarea spiralei logaritmice- http://mathworld.wolfram.com/GoldenRatio.html
[15]Sursa Fig. 9 Spirala- Ghyka, M., C.: Estetica şi teoria artei, Editura Științifică și Enciclopedică,
Bucureşti, 1981
[16]Sursa Fig 10. Traiectoria şoimilor, Fig 11. Traiectoria fluturilor de noapte- Livio, M.: Secțiunea de Aur:
povestea lui phi, cel mai uimitor număr, Editura Humanitas, 2005 şi
http://www.abovetopsecret.com/forum/thread564186/pg4
Bîrsan Iulia Maria
Colegiul Naţional “Octavian Goga” Secția:
Matematica-Informatică, intensiv informatică
Sibiu, România
E-mail: [email protected]
Prof. Demco Andreea
Colegiul Naţional “Octavian Goga”
Specializarea: informatică
Sibiu, Romania
E-mail: [email protected]
29
Conferinţa naţională de informatică pentru elevi
Programare, Comunicare, Imaginaţie, Design
PCID-2016, 2 Aprilie 2016
Sibiu, Romania
ITAsks
Crăciun Alexandru-Mihail, Roatiș Răzvan
Profesor coordonator: Modrișan Adrian
Rezumat: Scopul acestei lucrări este să prezinte un web-site, numit ITAsks, proiectat de noi pentru a
permite crearea unei comunități online destinată programatorilor. Inițial, acesta va fi la nivel național,
iar apoi, după o perioadă, sperăm ca această comunitate online să crească și să ajungă la nivel
internațional. Site-ul își va ajuta membrii să învețe si să își îmbunătățească abilitățile. Pagina web are
trei funcții principale: un forum, o provocare săptămânală și o parte informativă. ITAsks este o
experiență bogată, care își dorește să ofere utilizatorului posibilitatea de a întâlni persoane pasionate de
programare și de a învăța lucruri noi.
Abstract: The purpose of this web-site is to create an online community for programmers. Initially it
will be at national level, and after a period of time we hope that our community will increase and will
reach an international level. The site will help its members to learn and to develop their skills.The web-
page has three main functions: a forum, a weekly challenge and an informative part. ITAsks is an
enriching experience where you meet people who are passionate about programming and where you can
learn at he same time.
1 Introducere
Într-o perioadă complexă, marcată de trecerea spre societatea informaţională, caracterizată de
răspândirea vastă a noilor tehnologii, privind informaţia şi comunicarea, se impune utilizarea
calculatorului în mod profesional, rolul acestuia devenind tot mai important.
Astfel, calculatorul este tot mai frecvent utilizat în diverse sfere de activități: medicină,
finanţe, mijloace mass-media, ştiinţă, inclusiv în învăţământ .
Lucrarea de faţă îşi propune realizarea cu ajutorul limbajelor diverse de programare a unui
forum pentru pasionații de informatică.
Scopul nostru este să creăm o comunitate online, menită să reunească toți pasionații de
programare din România, pentru a împărtăși idei, pentru a găsi răspunsurile la întrebările care îi
frământă și pentru a învăța într-un mod simplu și plăcut.
Într-o altă ordine de idei, ceea ce vrem noi să oferim cu adevărat este o portiță, o mână de
ajutor, tinerilor programatori devotați, care doresc să învețe și să-și clădească un viitor în domeniul
informaticii.
Limbajele de programare pe care le-am utilizat sunt: HTML, JavaScript, MYSQL, PHP și
CSS.
Unele dintre cele mai importante aspecte ale unui site sunt funcționalitatea si design-ul, iar
noi considerăm că am reușit să le atingem pe amândouă.
Inspirația noastră a fost site-ul stackoverflow.com [1], cunoscut la nivel mondial. Am
observat că România nu dispune de o astfel de platformă și am decis să oferim această oportunitate
și programatorilor români.
30
Conferinţa Naţională de Informatică pentru Elevi, PCID 2016
2 Aprilie 2016, Sibiu, Romania
Articolul de față este organizat astfel: în secțiunea 2 sunt descrise designul și implementarea
home-page-ului, secțiunea 3 prezintă designul și realizarea SideBar-ului, secțiunea 4 este destinată
Challenge-ului Săptămânal, secțiunea 5 Forumului, iar în secțiunea 6 sunt prezentate concluziile
2 Designul home-page-ului
Utilizatorul este întâmpinat de o interfață prietenoasă, home-page-ul oferind niște informații
despre utilitatea site-ului și modul său de funcționare.
Prima impresie pe care și-o face un utilizator este cea dată de home-page. Așa cum se vede în
Figura 1, am folosit un design futurist, rarefiat ( nu conține multe elemente care să încarce pagina și
să inducă în eroare utilizatorul), punând accent doar pe ceea ce este cu adevărat important.
Imaginile sunt butoane către niște pop-up-uri care conțin informații utile despre site și scopul
acestuia. Aranjamentul a fost realizat cu div-uri, iar design-ul realizat cu elemente de CSS. În partea
inferioara a paginii am inclus link-uri către 3 elemente care vor ajuta la dezvoltarea paginii noastre
web:
- Fii un Admin
- Contact
- Donează (pentru dezvoltarea și îmbunătățirea site-ului)
Fig.1: Home Page-ul
31
Conferinţa Naţională de Informatică pentru Elevi, PCID 2016
2 Aprilie 2016, Sibiu, Romania
3 Implementarea și designul SideBar-ului
Din orice pagină, navigarea se realizează utilizând meniul de tip SideBar, implementat in
HTML, cu elemente de CSS și un script Java, așa cum se poate observa in Figura 2 .
<nav class="navbar navbar-inverse navbar-fixed-top" id="sidebar-wrapper"
role="navigation">
<ul class="nav sidebar-nav">
<li class="sidebar-brand">
<a href="#”> Home
</a>
</li>
<li>
<a href="#">Forum</a>
</li>
<li>
<a href="#">Weekly Challenge</a>
</li>
<li>
<a href="#">Questions</a>
</li>
<li>
<a href="#">Contact</a>
</li>
</ul>
</nav>
Fig.2:SideBar implementat
Am ales să implementăm acest SideBar nu doar pentru că facilitează accesul între pagini, ci și
pentru că reușește să confere paginii noastre un aspect modern și plăcut utilizatorului. În momentul
în care SideBarul este activat, restul paginii are un aspect încețoșat, iar când cursorul trece peste un
item, acesta este evidențiat printr-o culoare specifică.
32
Conferinţa Naţională de Informatică pentru Elevi, PCID 2016
2 Aprilie 2016, Sibiu, Romania
4 Challenge-ul Săptămânii
,,Munca grea bate talentul, când talentul nu lucrează destul'' - Tim Notke
Omul s-a născut să învețe, dar acest lucru poate fi obținut numai prin exercițiu și muncă
asiduă . Secțiunea de ,,Challenge-ul Săptămânii" are rolul de a-i determina pe tinerii programatori
să lucreze constant și divers, de la web-design până la baze de date, algoritmică și îmbunătățiri de
cod. Acest aspect este cel mai bine sugerat de Figura 3. După cum ne sugerează și titlul, in fiecare
săptămână va fi postată și o problemă, pe care utilizatorii o vor rezolva și ne-o vor trimite. Cele mai
bune rezolvări vor fi postate. Prin această modalitate programatorii pot observa modurile de gândire
și analiză ale celorlalți, să se imbunătățească în domeniul programării, respectiv să îi ajute pe
ceilalți să se îmbunătățească. Posibile probleme și aplicații:
Heavy Path Decomposition
Crearea unui program de criptare și decriptare ( criptarea utilizând XOR, criptarea
rearanjând alfabetul, criptarea folosind adunarea unei valori)
Realizarea unui forum online ( pentru a stăpâni mai bine programarea web și crearea unei
baze de date)
Crearea unui joc de tip X și 0.
Fig.3: Pagina Challenge-ului Saptamanii
5 Forum
,,Judecă un om după întrebările pe care le pune, nu după răspunsurile pe care le dă''
Pentru a învăța trebuie sa ai răspunsuri iar pentru a primi răspunsuri trebuie să pui întrebări. Pe
această idee ne-am bazat in momentul in care ne-am decis sa creăm forumul. Acesta se bazează pe
un sistem de tip întrebare-răspuns care este construit pe
o bază de date în MySQL. Utilizatorii care doresc să
folosească forumul vor trebui să se logheze cu un user
și o parolă. Aceștia vor fi reținuți într-o altă bază de
33
Conferinţa Naţională de Informatică pentru Elevi, PCID 2016
2 Aprilie 2016, Sibiu, Romania
date implementată tot în MySQL. Pentru a fi intregistrați în baza de date este necesară completarea
unui formular Sign Up. Adminilor le va fi asigurată o interfață specială prin intermediul căreia
aceștia vor putea să răspundă la întrebările puse pe forum și in același timp să monitorizeze
activitatea utilizatorilor.
6 Concluzie
Aplicația realizată și prezentată în acest articol este un început pentru dezvoltarea ulterioară a
unei platforme de comunicare pentru elevii pasionați de informatică și nu numai. Prin site-ul
realizat dorim să promovăm inovația și avem încredere in capacitatea tinerilor de a-și schimba
percepția asupra programării, majoritatea văzând-o doar ca pe o activitate sedentară, plictisitoare și
fără un caracter atractiv.
De asemenea, in limita puterilor financiare, dorim să ne mutăm site-ul pe un server mai
puternic care să fie capabil să gestioneze un număr cât mai mare de utilizatori. Secțiunea Forum ne
dă posibilitatea să aflăm părerile utilizatorilor și să facem schimbări acolo unde este cazul.
7 Bibliografie
[1] Ideea paginii web - http://stackoverflow.com/
Crăciun Alexandru-Mihail
Colegiul Național ,,Andrei Șaguna''
Matematică Informatică
Brașov, România
E-mail: [email protected]
Roatiș Răzvan
Colegiul Național ,,Andrei Șaguna''
Matematică Informatică
Brașov, România
E-mail: [email protected]
Prof. Modrișan Adrian
Colegiul Național ,,Andrei Șaguna''
Informatică
Brașov, România
E-mail: [email protected]
34
Conferinţa naţională de informatică pentru elevi
Programare, Comunicare, Imaginaţie, Design
PCID-2016, 2 Aprilie 2016
Sibiu, Romania
Mark It
Dragomir Andrei, Grozea Ioan
Profesor coordonator: Delilah Florea
Rezumat: În zilele noastre aparatura a devenit automatizată. Cu toate acestea nu am reușit să găsim o
aplicație pentru telefon, care să aibă comenzi repetabile mai mult decât alarma sau alte aplicații mai
simple. Așadar, ne-am gândit să ajutăm oamenii în activitățile zilnice, prin implementarea unei aplicații
care să localizeze utilizatorii prin GPS, folosind funcția de localizarea a telefonului. Aceștia vor avea la
dispoziție harta de la Google Maps, putând să iși seteze anumite marcaje pe ea. Un pointer va arăta
constant locația utilizatorului, acesta având o eroare de maxim câțiva metri, dacă semnalul de la telefon
este suficient de bun. Aplicația iși va da seama când locația curentă a utilizatorului este în interiorul
unui marcaj realizând/actualizând anumite setări ale telefonului în funcție de acest marcaj. Ea va lucra
în fundal, utilizatorul nefiind nevoit să aibe ecranul telefonului aprins.
Cuvinte cheie: locație curentă, GPS, marker, setări telefon, hartă
Abstract: Nowadays most of the technology is automatized. However, we couldn’t find an application
with repeatable commands for the smartphone, other than the alarm clock or other simple apps.
Therefore, we decided to help the people in their daily activities by creating an application that can
track the users by GPS using the phone’s location feature. These will feature the maps from Google
Maps, and they could set some checkpoints on the map. A pointer will show the user’s current location,
with an error of a couple meters, if the signal of the phone is good enough. The app will notice when the
current location of the user is within a checkpoint and will change/update some phone settings based on
this checkpoint. The app will work in background, so the users mustn't have the screen on.
Keywords: current location, GPS, marker, phone settings, map
1 Introducere
Articolul de față descrie aplicația “Mark It” dezvoltată pentru sistemul de operare Android
OS. Scopul principal al acestei aplicații este de a ușura activitățile utilizatorilor, fie că sunt elevi,
studenți sau chiar angajați, pentru că fiecare poate avea un program încărcat și poate uita de mici
detalii, cum ar fii setarea telefonului pe modul silențios în timpul cursurilor sau în timpul unei
ședințe importante. Aceste probleme vor dispărea după instalarea aplicației “Mark It”. Deoarece nu
există în magazinul Google Play o astfel de aplicație, ne-am hotărât să o dezvoltăm noi. Utilizatorii
vor putea fii localizați folosind tehnologia GPS și își vor putea seta markere pe hartă în locații alese
de ei, cu o rază de acțiune de 100 de metrii, iar când aceștia vor intra în raza de acțiune, aplicația va
modifica anumite setări ale telefonului, alese de utilizatori, cum ar fii setarea telefonului pe modul
silențios sau trimiterea unui SMS către o persoana aleasă de utilizator. Aceasta technologie se
numește Geofencing și a fost dezvoltată de către compania Google, avănd ca scop trimiterea unei
notificări către o persoană, când aceasta se află în apropierea unui sediu Google. Noi am adaptat
aceasta technologie pentru aplicația noastră pentru a crea o zonă de acțiune în jurul unui banal
marker.
35
Conferinţa Naţională de Informatică pentru Elevi, PCID 2016
2 Aprilie 2016, Sibiu, Romania
Astfel, dacă un elev își setează un marker pe incinta școlii, alegând opțiunea de setare pe
modul silent și intră în raza marker-ului, telefonul nu va suna în timpul cursurilor, iar dacă acesta
iese din rază, telefon va fii setat din nou pe modul general.
În secțiunea 2 se prezintă interfața cu utilizatorul, încărcarea hărții și localizarea pe hartă.
Secțiunea 3 conține detalii legate de implementarea software a aplicației. Secțiunea 4 rezumă
concluziile articolului și descrie idei de dezvoltare ulterioară ale aplicației.
2 Interfața aplicației
La pornirea aplicației cu sistemul GPS activat, aceasta va localiza utilizatorul pe hartă și va
afișa în primă instanță harta completă, ca în imaginea de mai jos:
Fig.1: Harta
La apăsarea butonului , aplicația va mări harta până în momentul în care va afișa zona în
care se află utilizatorul. Acest lucru poate fii observat în imaginea următoare:
36
Conferinţa Naţională de Informatică pentru Elevi, PCID 2016
2 Aprilie 2016, Sibiu, Romania
Fig. 2: Zona în care se află utilizatorul
După cum puteți vedea, telefonul este setat pe modul silențios, fiind în raza de acțiune a
marker-ului. Dacă utilizatorul apasă pe marker, vor apărea două butoane noi , cu ajutorul
cărora, dacă vor fii apăsate, utilizatorul va putea vedea distanța dată de Google Maps până la marker
(butonul 1) sau va putea vizualiza coordonatele locației actuale (butonul 2).
Fig. 3: Navigare până la marker Fig. 4: Coordonatele locației curente
37
Conferinţa Naţională de Informatică pentru Elevi, PCID 2016
2 Aprilie 2016, Sibiu, Romania
3 Proiectarea software a aplicației
3.1 Mediul de programare
Aplicația a fost creata în mediul de programamre Android Studio v1.5.1 folosind limbajul de
programare orientat pe obiecte Java și ulterior testată direct pe telefon, necesitând sistemul GPS și
datele mobile activate. Dezvoltarea aplicației necesită un API Key și înregistrarea aplicației în
Googe Developers Console. Din motive de compatibilitate, a fost folosit Android SDK pentru a
putea dezvolta aplicația pentru sistemul de operare Android. Am făcut alegerea de a dezvolta
proiectul în Android întrucât în urma unui studiu de piață [1], 49.2% din dispozitivele mobile
vândute în anul 2012 au sistem de operare Android. Pe lângă aceasta platoforma Android este open
source și datorită portabilității sale atrage o mulțime de dezvoltatori software.
3.2 Secțiuni de cod
3.2.1 Layout
Una dintre cele mai importante caracteristici ale layout-ului este harta insăși [2]. Fără ea,
utilizatorul nu ar putea beneficia de markere și de Geofencing. Următoarea secvență de cod
reprezintă o parte din fișierul de layout, care conține un fragment cu o hartă atașată activității
principale:
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:name="com.google.android.gms.maps.MapFragment"/>
3.2.2 Crearea hărții
În cazul în care nu există nici-o hartă creată, următoarea funcție o va crea [3] și va adăuga
butoanele pentru localizare, zoom in/out, compasul, va permite rotirea hărții și zoom in/out folosind
degetele:
GoogleMap googleMap;
private void initilizeMap() {
if (googleMap == null) {
googleMap = ((MapFragment) getFragmentManager().findFragmentById(
R.id.map)).getMap();
googleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
googleMap.setMyLocationEnabled(true);
googleMap.getUiSettings().setZoomControlsEnabled(true);
googleMap.getUiSettings().setMyLocationButtonEnabled(true);
googleMap.getUiSettings().setCompassEnabled(true);
googleMap.getUiSettings().setRotateGesturesEnabled(true);
googleMap.getUiSettings().setZoomGesturesEnabled(true);
if (googleMap == null) {
Toast.makeText(getApplicationContext(),
"Ne pare rau, dar harta nu a putut fi afisata",
Toast.LENGTH_SHORT).show();
}
}
}
38
Conferinţa Naţională de Informatică pentru Elevi, PCID 2016
2 Aprilie 2016, Sibiu, Romania
3.2.3 Localizarea
Pentru localizare am fost nevoiți să adăugăm o clasă nouă Java, numită GPS.java. Distanța
minimă pe care trebuie să o parcurgă utilizatorul pentru efectuarea unui update al locației este de un
metru și este dată de variabila:
private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 1;
Pentru a testa dacă GPS-ul este pornit și pentru a-l folosi [4], am fost nevoiți să implementăm
variabilele isGPSEnabled, isNetworkEnabled și canGetLocation care sunt de tip boolean și sunt
inițializate ca fiind false, pentru a putea testa dacă utilizatorul a activat GPS-ul și datele mobile:
protected LocationManager locationManager;
public GPS(Context context) {
this.mContext = context;
getLocation();
}
public Location getLocation() {
try {
locationManager = (LocationManager) mContext
.getSystemService(LOCATION_SERVICE);
isGPSEnabled = locationManager
.isProviderEnabled(LocationManager.GPS_PROVIDER);
isNetworkEnabled = locationManager
.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
if (!isGPSEnabled && !isNetworkEnabled) {
} else {
this.canGetLocation = true;
if (isNetworkEnabled) {
locationManager.requestLocationUpdates(
LocationManager.NETWORK_PROVIDER,
MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
if (locationManager != null) {
location = locationManager
.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
if (location != null) {
latitude = location.getLatitude();
longitude = location.getLongitude();
}
}
}
if (isGPSEnabled) {
if (location == null) {
locationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER,
MIN_TIME_BW_UPDATES, MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
if (locationManager != null) {
location = locationManager
.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if (location != null) {
latitude = location.getLatitude();
longitude = location.getLongitude();
}
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
return location;}
39
Conferinţa Naţională de Informatică pentru Elevi, PCID 2016
2 Aprilie 2016, Sibiu, Romania
3.2.4 Geofence
Geofencing este o combinație între determinarea locației curente a utilizatorului și apropierea
acestuia de locații care pot deveni de interes. Pentru a marca o locație de interes se va specifica
latitudinea și longitudinea, iar pentru a seta apropierea de locația dorită se poate adăuga o rază. În
acest sens pentru a creea un obiect geofence a fost nevoie de setarea razei si a tranziției:
mGeofenceList.add(new Geofence.Builder()
.setRequestId(entry.getKey())
.setCircularRegion(entry.getValue().latitude,
entry.getValue().longitude,
Constants.GEOFENCE_RADIUS_IN_METERS)
.setTransitionTypes(Geofence.GEOFENCE_TRANSITION_ENTER |
Geofence.GEOFENCE_TRANSITION_EXIT).build());
În MainActivity adăugarea unui geofence [5] implică adăugarea următoarei secvențe de cod:
LocationServices.GeofencingApi.addGeofences(
mGoogleApiClient,
getGeofencingRequest(),
getGeofencePendingIntent())
.setResultCallback(this);
3.2.5 Marker
Markerii sunt cei care permit indicarea locațiilor unice pe hartă. Pentru adăugarea unui marker
este nevoie de localizarea latitudinii și longitudinii, iar forma și informațiile pe care acestia le oferă
pot fi modificate în funcție de context:
MarkerOptions marker = new MarkerOptions().position(
new LatLng(latitude, longitude))
marker.icon(defaultMarker(HUE_YELLOW));
googleMap.addMarker(marker);
3.2.6 Permisiuni
Această aplicație necesită setarea unor permisiuni utilizator pentru a putea rula pe dispozitivul
utilizatorului și anume ACCESS_FINE_LOCATION care permite unei aplicații localizarea unei locații
precise și ACCESS_COARSE_LOCATION care permite aplicației localizarea unei locații aproximative.
Următoarele permisiuni se regăsesc în fișierul AndroidManifest.xml al aplicației:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
4 Concluzii
În concluzie, aplicația noastră dezvoltată pentru sistemul de operare Android numită “Mark
It” s-ar putea dovedi a fii utilă nu doar elevilor și studenților, dar și angajaților, deoarece le ușurează
viața, realizând niște sarcini, pe care utilizatorul ar putea uita să le facă. Consumul bateriei nu este o
problemă, deoarece, după localizare, utilizatorul va putea opri datele mobile, având doar GPS-ul
pornit, iar ecranul poate fii blocat, deoarece aplicația rulează în fundal.
40
Conferinţa Naţională de Informatică pentru Elevi, PCID 2016
2 Aprilie 2016, Sibiu, Romania
5 Dezvoltări viitoare
Pe viitor ne-am dori să introducem o funcție de căutare a unei adrese pentru plasarea unui
marker și adăugarea unui buton pentru schimbarea modului hărții din normal în hybrid sau satelit.
Realizarea unor sugestii din partea aplicației privind setările pe care am dori să le realizăm, în
funcție de locațiile învecinate care au setări deja stabilite. Ne-am dori de asemenea să adăugăm
aplicația în magazinul Google Play pentru a simplifica viața mai multor oameni.
6 Bibliografie
[1] Mednieks, Z., Dornin, L., Meike, G.B., Nakamura, M., 2012, Programming Android: Java
Programming for the New Generation of Mobile Devices, Second Edition, O'Reilly Media.
[2] Google Developers (layout hartă):
https://developers.google.com/maps/documentation/android-api/map#add_a_map_to_an_android_app
[3] Stack Overflow (crearea hărții):
http://stackoverflow.com/questions/30170271/android-google-map-how-to-check-if-the-gps-location-is-
inside-the-circle
[4] Stack Overflow (folosire GPS):
http://stackoverflow.com/questions/24320989/locationmanager-locationmanager-this-
getsystemservicecontext-location-servi
[5] Google Developers (Geofencing):
http://developer.android.com/training/location/geofencing.html#BestPractices
Dragomir Andrei
Colegiul Național „Samuel von Brukenthal”
Secţia Matematică-Informatică, intensiv
Informatică
Sibiu, Romania
E-mail: [email protected]
Grozea Ioan
Colegiul Național „Samuel von Brukenthal”
Secţia Matematică-Informatică, intensive
Informatică
Sibiu, Romania
E-mail: [email protected]
Prof. coord. Florea Delilah
Colegiul Național „Samuel von Brukenthal”
Profesor de informatică
Sibiu, Romania
E-mail: [email protected]
41
Conferinţa naţională de informatică pentru elevi
Programare, Comunicare, Imaginaţie, Design
PCID-2016, 2 Aprilie 2016
Sibiu, Romania
Fireball
Bogdan Georgescu, Ciprian Petrean
Profesor coordonator: Ramona Humeniuc
Rezumat: Scopul prezentului proiect este de a realiza o scenă de animație folosind modelare 3D.
Animația concepută este pentru un viitor joc de tip ―open world‖ și în acest scop am realizat, ca prim
pas, un cinematic pe tema ―medieval fantasy‖ sau medievalul fantastic, acesta fiind un subgen al
fantasticului. Pentru a creea scenele am folosit Blender - un software gratuit pentru modelare și
animație 3D. Lucrarea este compusă din scene dinamice, în care fiecare corp este modelat dintr-un
―basic mesh‖ (corp primitiv, de exemplu un cilindru, o sferă, etc.) căruia i se adaugă o textură realizată
prin prelucrarea unor imagini abstracte, adăugarea de filtre, de efecte sau schimbare a ‖blend mode‖-
ului, cinematica inversă. Editarea video neliniară și o parte din capabilitățile de compoziție au fost
realizate cu ajutorul aplicației Sony Vegas PRO. Originalitatea proiectului constă în tratarea software a
temei abordate și în conceptul și viziunea proprie despre animații 3D.
Abstract: The aim of this project is to design an animation scene using 3D modelling. The animation is
made for a future open world game. As a first step we’ve done a medieval fantasy themed cinematic.
We used Blender in making models, compositing and animations. Blender is the free and open source
3D creation suite. It supports the entirety of the 3D pipeline—modelling, rigging, animation,
simulation, rendering, compositing and motion tracking, even video editing and game creation. The
project is compound of dynamic scenes, in which every object is modelled from a basic mesh and
textured. Video editing and a part of compositing capabilities were done in Sony Vegas Pro.
1 Introducere
În diverse domenii, cum ar fi medicina, industria cinematografică și a jocurilor video se
folosesc modele 3D pentru animații care redau mișcarea reală a corpurilor [1]. Modelarea 3D este
un proces matematic prin care un corp sau un obiect [2] este reprezentat tridimensional utilizându-
se un software specializat. Modelul 3D rezultat în urma modelării este, în fapt, o colecție de puncte,
poziționate în spațiul tridimensional, interconectate prin linii, triunghiuri, suprafețe curbe, și poate fi
folosit în simulare. Imaginea generată pe ecranul unui calculator se compune din pixeli: cu cât
numărul de pixeli este mai mare cu atât imaginea va avea o calitate superioară [1].
Am ales ca temă pentru scena de animație ―medieval fantasy‖ iar ca surse de inspirație atât
filme cum ar fi ―The Lord of the Rings‖ sau ―The Hobbit‖ cât și jocuri: ―World of Warcraft‖, ―The
Witcher‖ sau ―Dragon Age‖. Pentru a creea scenele și a modela elementele care se regăsesc în
acestea am folosit Blender. Pentru a realiza texturile am folosit ―Adobe Photoshop CS5‖, iar pentru
realizarea vectorilor am folosit Adobe Illustrator CC Tryout.
2 Compoziția proiectului
Lucrarea este compusă din trei scene, prima scenă (fig.1) cuprinzând o încăpere întunecoasă
cu o podea de lemn și o masă pe care este așezată o hartă, un inel, două cărți și o lumânare, fiecare
corp fiind modelat dintr-un ―basic mesh‖ (corp primitiv, de exemplu un cilindru, o sfera, etc.) căruia
42
Conferinţa Naţională de Informatică pentru Elevi, PCID 2016
2 Aprilie 2016, Sibiu, Romania
i se adaugă o textură (fig.2), realizată prin prelucrarea unor imagini abstracte [4], adăugarea de
filtre, de efecte sau schimbarea blend mode-ului. Pentru a dinamiza scenele, am adăugat un fireball
- o sferă incandescentă care plutește și căreia i-am adăugat un grup de particule pentru a-i oferi mai
multă culoare și dinamică.
Fig. 1: Modelare - scena I
Fig. 2: Textură carte - scena I
Blender organizează datele ca diferite tipuri de „data block-uri‖, ca Objects, Meshes, Lamps,
Scenes, Materials, Images și altele. În Blender un obiect este alcătuit din mai multe „data block-
uri‖, de exemplu un cub are cel puțin un datablock pentru Object și Mesh și, de obicei, are și un
material. Acest lucru permite, de exemplu, duplicarea obiectelor dar păstrarea unui singur datablock
43
Conferinţa Naţională de Informatică pentru Elevi, PCID 2016
2 Aprilie 2016, Sibiu, Romania
la care sunt legate toate copiile obiectului inițial, permițând și modificarea tuturor obiectelor în
același timp.
Fig. 3: Munți hartă - scena I
A doua scenă cuprinde un peisaj cu munți înzăpeziți care au fost creați dintr-un mesh de tip
landscape (fig.3), modificat astfel încât să redea aspectul real al unor munți. La texturarea acestora
am folosit două texturi diferite: una pentru piatră [6] iar alta pentru zăpadă cărora li s-au adăugat
câteva efecte pentru a realiza un produs cât mai realist cu putință [7]. Texturile sunt suprapuse și
legate printr-un ―mix shader‖ si un plus de modificator de culoare pentru a delimita mai bine zonele
cu și fără zăpadă. Pentru a reda ―realismul‖ am adăugat camerei funcția ―mist‖, care generează
ceața din peisaj, pe distanța cameră-obiect (fig.4).
Fig. 4: Modelare munți - scena II
44
Conferinţa Naţională de Informatică pentru Elevi, PCID 2016
2 Aprilie 2016, Sibiu, Romania
Soarele constă într-un basic mesh, de această dată o sferă, căreia i-am adăugat emisie de
lumină si un ―blur effect‖ pentru razele din jurul acesteia (fig.5).
Fig. 5: Scenă cu Fireball în acțiune
A treia scenă cuprinde podeaua căreia îi este aplicată o textură de piatră [5], câțiva stâlpi, un
sicriu și o sabie, fiecare dintre acestea fiind modelate din basic mesh-uri (fig.6-7).
Fig.6: Compositing rendered layers - scena III
45
Conferinţa Naţională de Informatică pentru Elevi, PCID 2016
2 Aprilie 2016, Sibiu, Romania
Fig.7: Modelare și animare- scena III
Pentru a realiza suprafaţa obiectelor, Blender permite utilizatorului să aplice texturi care pot
modifica modul de reflecţie, specularitatea, rugozitatea şi alte calităţi ale suprafeţei unui material.
Texturile se pot împărţi în trei categorii principale: imagini, texturi procedurale (generate de o
formulă matematica) și hărţi de mediu (folosite pentru a crea impresia reflacţiilor şi refracţiilor).
Texturile se comportă ca nişte straturi adiţionale care se aplică peste materialul de bază.
Crearea unei scene 3D (fig.8) necesită minim trei lucruri: Modele, Materiale și Lumini.
Obiectele pot avea mai multe forme și mărimi iar Blender pune la dispoziție instrumente cu care am
realizat modelarea în mod eficient:
Objects - permite lucrul cu obiectele ca un întreg
Meshes - permite lucrul cu rețeaua care definește forma obiectului
Curves – permite folosirea curbelor pentru a modela și controla obiectele
Surfaces – permite modelarea unei suprafete NURBS
Meta Objects - Globuri si Globule/Globs and Globules
Duplications – pertmite Duplicarea Obiectelor
Fig.8: Scenă 3D –captură de ecran
46
Conferinţa Naţională de Informatică pentru Elevi, PCID 2016
2 Aprilie 2016, Sibiu, Romania
3 Concluzie
Am ales pentru modelare Blender deoarece este un program gratuit de grafică 3D și pentru că
are o varietate de funcții similare cu alte programe de grafica 3D cum ar fi Softimage XSI, Cinema
4D, 3ds Max, Lightwave și Maya [3]. Aceste funcții includ unelte pentru simulări avansate ca rigid
body, fluid, cloth și softbody dynamics, unelte puternice pentru animarea caracterelor, materiale
bazate pe node-uri și scripturi Python.
Ca dezvoltări ulterioare ale proiectului am aminti introducerea de noi scene pentru a realiza
un scurtmetraj mai elaborat, implementarea de caractere atât în joc cât și prezentarea acestora în
cinematic.
4 Bibliografie
[1] AILENI, R.M., Teza de doctorat “Contribuții teoretice și experimentale la simularea dinamică 3D a
produselor textile”, Iași, 2011
[2] ROMAN, F., HARTMANN, S., “Model in Science”, Standford Encyclopedia of Phylosophy, Springs
2006
[3] Documentatie Blender - http://videotutorial.ro/blenderun-soft-puternic-open-source-pentru-grafica-3d-si-
animatie-tutorial-video/
[4] Pagina oficiala DeviantArt - http://www.deviantart.com/
[5] Pagina oficiala Morguefile (imagini stoc gratuite) - https://www.morguefile.com/
[6] Pagina oficiala Stockvault (texturi si imagini stoc gratuite) - http://www.stockvault.net/
[7] Texturi gratuite (fostul CGtextures) http://www.textures.com/
Bogdan Georgescu
Matematică-Informatică Intensiv Informatică
Colegiul Național ―Horea, Cloșca și Crișan‖
Alba Iulia, Alba
E-mail: [email protected]
Ciprian Petrean
Matematică-Informatică Intensiv Informatică
Colegiul Național ―Horea, Cloșca și Crișan‖
Alba Iulia, Alba
E-mail: [email protected]
Prof. Ramona Humeniuc
Informatica
Colegiul Național ―Horea, Cloșca si Crișan‖
Alba Iulia, Alba
E-mail: [email protected]
47
Conferinţa naţională de informatică pentru elevi
Programare, Comunicare, Imaginaţie, Design
PCID-2016, 2 Aprilie 2016
Sibiu, Romania
PhotoMaster
Handolescu Radu, Motoc Alexandru-Nicolae
Profesori coordonatori: Steavu Nicolae, Steavu Cristina-Elena
Rezumat: Proiectul realizat de noi, intitulat "PhotoMaster", constă într-un program specializat de editare
a fotografiilor și a altor imagini. Crearea oricărui tip de program necesită o foarte bună cunoaștere a
mediului de programare, cu atât mai mult când este vorba de o aplicație care are un rol practic foarte
bine definit. Noi am încercat prin acest editor de fotografii să studiem îndeaproape toate
funcționalitățile unui adevărat editor, de la cele mai simple până la cele mai complexe, și să le
implementăm într-un program original, ușor de utilizat. De asemenea, am vrut să punem în evidență
utilizarea unor formule matematice pentru redimensionări, Zoom și alte operații. Editoarele deja
existente pe piață tind să aglomereze utilizatorul cu un număr foarte mare de funcționalități astfel încât
acesta se simte depășit de situație. Noi, printr-o interfață foarte simplă și curată, am încercat să
înlăturăm acest impediment, făcând accesul la diversele unelte foarte facil și intuitiv. Motivul pentru
care am ales să dezvoltăm o astfel de aplicație este dorința de a ne angaja într-un proiect de proporții
mari prin care să ne testăm cunoștințele de programare în C#, precum și gândirea algoritmică și munca
în echipă. Am ales editorul de imagini datorită motivelor menționate mai sus, dar și a lipsei pe piață a
unui astfel de program gratuit și de calitate.
Abstract: The project we made, called “PhotoMaster”, consists of a specialized program for editing
photos or other images. The making of any type of program requires very strong knowledge of the
programming environment especially when it is about an application with a well-defined practical role.
While creating and designing this photo editor, we tried to closely study all the functionalities of a real
editor, from the simplest ones to the most complex, and implement the new products as an original and
easy to use program. We also wanted to highlight the usage of mathematical formulas for resizing,
Zoom and other operations. The pre-existent editors on the market bring together a great number of
fatures and functionalities which can make the user feel overwhelmed by the situation. We tried to
remove this impediment through a very simple and clean interface, making the access to the diverse
tools very easy and intuitive. The reason we chose to develop such an application is our desire to
engage in a large scale project in order to test our C# programming knowledge, as well as our
algorithmic thinking and ability to work in a team. We chose the photo editor because of the reasons we
stated above and due to the absence of a free and quality program of this kind.
1 Introducere
Prin intermediul PhotoMaster ne-am propus să dezvoltăm o aplicație pentru editarea
imaginilor care să fie ușor de utilizat de către orice persoană, în special cei care nu au avut tangențe
în trecut cu asemenea programe.
Fiind în clasa a XII-a am considerat că am putea să încununăm cunoștințele acumulate de-a
lungul liceului într-un proiect de proporții mai mari cu ajutorul căruia să ne îmbunătățim abilitățile
de programare și de muncă în echipă și care să marcheze simbolic începerea carierei noastre
profesionale.
48
Conferinţa Naţională de Informatică pentru Elevi, PCID 2016
2 Aprilie 2016, Sibiu, Romania
Alte produse similare sunt Photoscape, Pixlr, Paint, cele mai cunoscute pe piață fiind
Photoshop, dezvoltat de Adobe, și Paint, ce vine livrat ca funcționalitate inclusă în sistemele de
operare Windows. Având în minte acest model am identificat problemele cu care un începător se
confruntă la o primă utilizare a unui astfel de program. Cel mai mare inconvenient este acela că o
persoană poate fi ușor copleșită de multitudinea de ustensile care îi apar pe ecran.
Dorința de a ușura munca celor ce doresc să efectueze modificări rapide asupra unor imagini
ne-a determinat să începem acest proiect.
În această lucrare vom prezenta aplicația realizată de noi, precum și două dintre operațiile de
bază ce au fost implementate până acum, operația de Zoom și operația de selecție, punând mai mult
accent pe acestea. Ținem să menționăm că programul a fost creat în limbajul C# folosind Microsoft
Visual Studio Community 2015. Proiectul se bazează pe lucrul cu Windows Forms și pe
posibilitățile de implementare oferite de acestea ([2] – „Formulare Windows”).
2 Zoom
Prin Zoom se înțelege operația de mărire sau micșorare a unei porțiuni dintr-o imagine din
jurul unui punct, cu o valoare predefinită. Această operație este extrem de utilă, deoarece permite
utilizatorului să studieze mai îndeaproape fotografia, oferă o viziune mai detaliată a imaginii,
permițând totodată utilizatorului să efectueze lucrări în detaliu, care la mărimea originală a imaginii
pot fi imposibile sau foarte greu de realizat.
Operația de Zoom a fost pe departe cea mai complexă, nu din punct de vedere al
implementării, deoarece ideea și codul ca atare nu au ridicat probleme, ci din punct de vedere al
debugging-ului.
Suprafața de lucru este compusă din două elemente: un PictureBox în care se încarcă
imaginea pe care se lucrează (denumit în program workArea, chenarul galben din Fig.1) și un Panel
(denumit display, chenarul roșu din Fig.1) care are rol de zonă selectată a imaginii. În Fig.1 se poate
vedea cum arată imaginea după câteva operații de mărire. În interfața programului este vizibilă doar
imaginea din cadrul chenarului roșu, care cu ajutorul unor bare de scrolare se poate deplasa pe
întreaga imagine.
Fig.1 Reprezentarea imaginii în program
Zoom-ul se poate efectua în două moduri: din meniul View (ilustrat în Fig.2) sau folosind
rotița mouse-ului. În cazul utilizării rotiței se apelează evenimentul MouseWheel, și utilizăm
proprietatea Delta a argumentului de tip MouseEventArgs pentru a determina direcția în care s-a
mișcat rotița, adică tipul de Zoom care trebuie efectuat ([2] – „Tratarea evenimentelor generate de
controale”). Algoritmul care face redimensionarea zonei de lucru este extrem de simplu și constă
doar în schimbarea dimensiunii workArea.
49
Conferinţa Naţională de Informatică pentru Elevi, PCID 2016
2 Aprilie 2016, Sibiu, Romania
Fig.2 Meniul View
Ceea ce a ridicat probleme și a necesitat un timp de gândire ceva mai lung a fost algoritmul
care așează display-ul (prin intermediul barelor de scrolare) în locația în care s-a efectuat Zoom-ul,
operație pentru care a trebuit să găsim formula matematică a noii locații:
centrat pe locul unde se află poziționat deja display-ul dacă s-au folosit butoanele din
meniul View;
așezat în așa fel încât mouse-ul să rămână deasupra aceluiași pixel pe care s-a folosit
rotița pentru Zoom.
Voi prezenta aici codul metodei ce realizează această repoziționare pentru cazul în care s-a
făcut Zoom In utilizând rotița mouse-ului. Secvențe de cod au fost adăugate în această metodă pe
parcursul rezolvării bug-urilor legate de operația de Zoom.
private void zoomIn(Point mouse)
{
int scrollhorriz = display.AutoScrollPosition.X, scrollvert =
display.AutoScrollPosition.Y;
resizeImage(workArea.Image, (int)(multiplier * workArea.Width),
(int)(multiplier * workArea.Height));
centerPictureBox();
resizePictureBox(workArea, workArea.Image);
int x = mouse.X, y = mouse.Y;
if (workArea.Width > display.ClientSize.Width || workArea.Height >
display.ClientSize.Height)
{
display.AutoScrollPosition = new Point(0, 0);
}
if (workArea.Width > display.ClientSize.Width)
workArea.Left = 0;
if (workArea.Height > display.ClientSize.Height)
workArea.Top = 0;
display.AutoScrollPosition = new Point((int)(Math.Abs(x) * multiplier - x -
scrollhorriz), (int)(Math.Abs(y) * multiplier - y - scrollvert));
}
În secvența de cod anterioară se poziționează barele de scroll ale display-ului în așa fel încât
după Zoom cursorul mouse-ului să rămână poziționat pe același pixel pe care se afla înaintea
50
Conferinţa Naţională de Informatică pentru Elevi, PCID 2016
2 Aprilie 2016, Sibiu, Romania
efectuării operației. Metoda resizeImage este cea care schimbă dimensiunile workArea, după care
metoda resizePictureBox se asigură că raportul lungimilor PictureBox-ului a rămas constant în urma
redimensionării. Variabila multiplier este factorul de mărire/micșorare la Zoom și l-am setat arbitrar
la valoarea de 120%. Parametrul de tipul Point ce a fost transmis metodei reprezintă poziția actuală
a mouse-ului pe PictureBox și este determinat în urma declanșării evenimentului specific rotiței de
scrolare a mouse-ului.
Formula noilor poziții ale barelor de scrolare, așa cum se poate vedea din ultima linie a
codului este următoarea:
(2.1)
(2.2)
În cazul în care s-a dorit un Zoom Out, în ecuațiile (2.1) și (2.2) înmulțirea din partea întreagă
se schimbă în împărțire. În aceste formule x și y sunt coordonatele cursorului în raport cu marginile
workArea, iar xfinal și yfinal sunt noile poziții ale barelor de scrolare.
Zoom-ul ca funcție de bază în orice editor de imagini nu este o operație ce face modificări
sau setări în program, ci una care îmbunătățește și ușurează experiența utilizatorului, în special în
momentele în care acesta trebuie să lucreze la un nivel de detaliu relativ redus.
3 Selecție
Selecția reprezintă operația de marcare a unei zone dintr-o imagine pentru eventuale
procesări. În versiunea actuală a programului, aceasta poate avea doar o formă dreptunghiulară, însă
plănuim implementarea unei selecții neregulate, oferind utilizatorului un grad mai ridicat de
manipulare a selecției.
Atunci când vine vorba de un program de editare a fotografiilor, o unealtă esențială și
elementară, ce permite utilizatorului un control extins asupra procesării imaginii, este selecția.
Aceasta oferă posibilitatea de a marca o porțiune din imagine, prin intermediul unui dreptunghi. Cu
ajutorul acestei funcționalități ce conține aplicații multiple putem copia, lipi sau muta aria selectată
sau chiar decupa fotografia inițială.
Procesul de selecție constă în două etape:
Fig. 3: Determinarea zonei de selecție
Fig. 4: Finalizarea selecției
51
Conferinţa Naţională de Informatică pentru Elevi, PCID 2016
2 Aprilie 2016, Sibiu, Romania
Pentru a determina zona de selecție utilizatorul trebuie să apese click în punctul inițial al zonei
pe care dorește să o selecteze și, ținând mouse-ul apăsat, să mute cursorul spre punctul final. În
acest moment, finalizarea selecției este realizată prin eliberarea click-ului.
În vederea implementării unei astfel de funcționalități, ne-am folosit de evenimentele
predefinite ale unui PictureBox ([3] – PictureBox Events):
selectionBox.MouseDown += new MouseEventHandler(selectionBox_MouseDown);
selectionBox.MouseUp += new MouseEventHandler(selectionBox_MouseUp);
selectionBox.MouseMove += new MouseEventHandler(selectionBox_Move);
Prin intermediul acestor evenimente am reținut atât coordonatele inițiale cât și cele finale ale
selecției și am verificat dacă butonul mouse-ului este apăsat.
În continuarea voi prezenta metoda utilizată pentru desenarea chenarului de selecție ([4] –
Rectangle Selection):
private void drawSelectionThread()
{
selectingActive = true;
Rectangle r = createRectangle(selectStart, selectEnd);
Graphics g = selectionBox.CreateGraphics();
Pen p = new Pen(Brushes.Aquamarine);
int x = 1;
timerSelection.Interval = 500;
do
{
if (x == 1)
{
x++;
p.Brush = Brushes.Black;
}
else
{
x--;
p.Brush = Brushes.White;
}
timerSelection.Start();
p.DashStyle = DashStyle.Solid;
g.DrawRectangle(p, r);
} while (selectingActive);
selectionBox.Invalidate();
}
Am considerat că este util ca marginile chenarului să aibă o culoare alternantă alb-negru
pentru o vizibilitate mai bună în program. Singura problemă a acestui proces a fost blocarea
interfaței, ceea ce nu mai permitea efectuarea oricărei alte operații. De aceea, am evitat acest efect
nedorit prin actualizarea programului cu ajutorul unui thread, motiv pentru care am fost nevoiți să
aprofundăm noțiuni de multi-threading pentru a avea un program thread-safe ([1] – „Multithreaded
programming”). De asemenea, variabila selectingActive are un rol important deoarece specifică
starea actuală a selecției și permite efectuarea unor operații din cadrul meniului Edit în funcție de
valoarea sa. Acest lucru l-am realizat cu ajutorul proprietăților ([1] – „Properties, Arrays and
Indexers ”).
52
Conferinţa Naţională de Informatică pentru Elevi, PCID 2016
2 Aprilie 2016, Sibiu, Romania
Fig. 5: Meniul Edit
Operațiile care pot fi aplicate unei selecții se pot găsi în meniul Edit. Mai mult de atât, în
urma copierii și a lipirii unei selecții, aceasta va putea fi mutată conform nevoilor. Dacă ne aflăm cu
mouse-ul în apropierea marginii selecției, cursorul se va schimba, iar utilizatorul va putea executa o
redimensionare.
Fig. 6: Redimensionare
4 Concluzie
În ceea ce privește atingerea obiectivelor pe care ni le-am propus până la această dată, am
reușit să aducem programul într-un stadiu în care este posibilă efectuarea unor editări de bază
asupra imaginilor sub forma copierii, lipirii, decupării și redimensionării imaginii sau a unor selecții
din aceasta.
Soluționarea unor probleme apărute în urma efectuării Zoom-ului sau a combinației selecției
cu Zoom-ul a necesitat o lungă perioadă de timp. Am reușit în cele din urmă să identificăm cauza ca
fiind aproximările la numere întregi a mărimii imaginii după ce aceasta a fost redimensionată cu
factorul de Zoom. Alte dificultăți cu care ne-am întâlnit țin de multithreading și crearea unui cod
thread-safe în cadrul unui program ce utilizează formulare Windows.
În urma rezolvării acestor probleme și a depanării programului am ajuns la concluzia că din
această experiență am învățat multe aspecte de detaliu legate de diverse concepte teoretice și
metode de a depăși situații în care o abordare directă nu este posibilă. Am aprofundat cunoștințele
noastre despre C# prin utilizarea thread-urilor, evenimentelor asociate, implementarea unor metode
noi ce acționează asupra claselor existente și asupra datelor scrise de către noi, corelând aceste
cunoștințe cu noi conoștințe de matematică.
În viitorul apropiat dorim să continuăm dezvoltarea acestui proiect, adăugând noi
funcționalități utile și ușor de folosit. De exemplu, următoarea provocare va fi lucrul cu layere, care
trebuie să funcționeze asemănător cu cele din orice versiune de Photoshop.
Următoarele luni le vom dedica, de asemenea, și îmbunătățirii design-ului. Obiectivul nostru
este crearea unui mediu cât mai modern și atractiv, menținând, concomitent, simplitatea
programului. Mai mult, atunci când vom atinge un stagiu în care vom fi multumiți de munca
53
Conferinţa Naţională de Informatică pentru Elevi, PCID 2016
2 Aprilie 2016, Sibiu, Romania
noastră, vom publica aplicația pe Windows Store, în speranța că se va dovedi de folos și altor
persoane.
5 Bibliografie
[1] ARCHER, Tom, „Inside C#”, Microsoft Press, 2001
[2] ROȘCA Valer, HUNYADI Daniel, „Limbaje moderne de programare: Limbajul C#”, Editura
Universității „Lucian Blaga”, Sibiu, 2010
[3] https://msdn.microsoft.com/en-us/library/system.windows.forms.picturebox_events (16.02.2016)
[4] http://stackoverflow.com/questions/716626/how-to-make-a-resizeable-rectangle-selection-tool
(18.02.2016)
Handolescu Radu
Colegiul Național “Radu Negru”, Făgăraș
Matematică-Informatică intensiv Engleză
Făgăraș, România
E-mail: [email protected]
Motoc Alexandru-Nicolae
Colegiul Național “Radu Negru”, Făgăraș
Matematică-Informatică intensiv Engleză
Făgăraș, România
E-mail: [email protected]
Prof. Steavu Nicolae
Colegiul Național “Doamna Stanca”, Făgăraș
Informatică
Făgăraș, România
E-mail: [email protected]
Prof. Steavu Cristina-Elena
Colegiul “Aurel Vijoli”, Făgăraș
Informatică
Făgăraș, România
E-mail: [email protected]
54
Conferinţa naţională de informatică pentru elevi
Programare, Comunicare, Imaginaţie, Design
PCID-2016, 2 Aprilie 2016
Sibiu, Romania
”Dodgy Ninja”
Holerga Flavius, Milik Andrei, Moga Inocențiu
Profesor coordonator: Florea Gabriela
Rezumat: Aplicația “Dodgy Ninja” este un joc creat pentru toate categoriile de vârstă. Este destinat atât
pasionaților de jocuri cât și celor ce doresc să-și petreacă timpul liber într-un mod plăcut. Creatorii
urmăresc captivarea utilizatorului prin supunerea acestuia unui joc provocator din punctul de vedere al
dificultății. Tema jocului este supraviețuirea în “stil ninja” cât mai mult timp pe o bucată îngustă de
lemn, sub presiunea unor obstacole aruncate către personaj, a căror dificultate va fi incrementată pe
parcursul rundei. Obstacolele sunt dintr-o gamă largă de obiecte comice precum mingi, rachete etc.
Abstract: The application “Dodgy Ninja” is a game designed for all. It is created for both gamers and
people who want to spend their spare time in a pleasant way. The creators aim to catch the users interest
by provoking him to a challenging game in terms of difficulty. The theme of the game is survival in
„ninja style‟, as long as possible, on a narrow piece of wood, under the pressure of obstacles thrown
towards the character. Its difficulty will increase during the round. The obstacles come from a wide
assortment of comic objects, such as balls, rockets, etc.
1 Introducere
Acest joc este destinat persoanelor de orice vârstă și se dorește a fi atractiv, captivant, cu o
animație interesantă. Personajul trebuie controlat pentru a se feri de diverse proiectile și a câștiga
puncte. Cu aceste puncte se pot achiziționa noi caractere și debloca noi locații.
Aplicația este realizată în GIDEROS Studio, folosind limbajul de programare Lua. Grafica a
fost realizată în Inkscape și animată prin programul Spriter. Pentru fizică am folosit Box2d. Acesta
este un physics engine scris în C++.
Mișcarea jucătorului se face prin înclinarea ecranului în stânga sau dreapta. Aplicația este
optimizată pentru tablete și programată astfel încât jocul se va scala într-un mod eficient pe orice
device. Pe langă toate acestea, jocul dispune de o gamă largă de efecte sonore plăcute și o melodie
de fundal. El îmbină o ambianță relaxantă, un gameplay distractiv și un caracter amuzant.
55
Conferinţa Naţională de Informatică pentru Elevi, PCID 2016
2 Aprilie 2016, Sibiu, Romania
2 Descriere
Gideros Studio este un program destinat dezvoltării de aplicații pe diferite platforme cum ar
fi: Android, iOS, MacOSX, Windows, Windows Phone și HTML5, fiind gratis și oferind
posibilități infinite. De asemenea acest software permite importarea de plugin-uri existente ce pot fi
scrise în C++, C, Java sau Obj-C, fapt ce generează chiar și mai multe posibilități. O altă
caracteristică definitorie a acestui software este metoda de testare a aplicației în lucru. Spre
deosebire de celelalte programe de acest tip, Gideros nu folosește emulatoare și nici nu forțează
utilizatorul să își exporte proiectul pentru a îl testa, oferind posibilitatea de rulare a aplicației direct
prin Wifi.
În aplicație am construit următoarele controale:
Înclinarea device-ului în stânga care are ca și efect înclinarea caracterului în partea
stângă.
Înclinarea device-ului în dreapta care va duce la înclinarea caracterului în partea
dreaptă.
O singură apăsare pe rachetă care are ca și efect eliminarea obstacolului sub formă de
rachetă.
Pentru implementarea rotației caracterului în funcție de înclinația device-ului am construit
funcțiile:
local function compensateAccelerometer(x, y, z)
local orientation = application:getOrientation()
local deviceOrientation = application:getDeviceOrientation()
local p1 = orientation == "portrait" or orientation ==
"portraitUpsideDown"
local p2 = deviceOrientation == "portrait" or deviceOrientation ==
"portraitUpsideDown"
local rotation = (p1 == p2) and deviceOrientation or orientation
if rotation == "portrait" then
return x, y, z
elseif rotation == "landscapeLeft" then
return -y, x, z
elseif rotation == "portraitUpsideDown" then
return -x, -y, z
elseif rotation == "landscapeRight" then
return y, -x, z
end
end
local function onEnterFrame()
local x = accelerometer:getAcceleration()
x= compensateAccelerometer(x, y, z)
fx = x * 0.1 + fx * 0.9
ninja:setRotation(80 * fx)
end
stage:addEventListener(Event.ENTER_FRAME, onEnterFrame)
În funcția compensateAccelerometer(x,y,z) este identificată orientarea device-ului, astfel încât
în momentul apelării acesteia, vor fi returnate valorile corecte de înclinație date de accelerometru.
În funcția onEnterFrame() este apelat accelerometrul, iar coordonata de înclinație a device-
ului este atribuită variabilei x care, prelucrată de prima funcție, va fi setată pe baza orientării device-
ului. În continuare, se aplică un filtru pentru încetinirea tranziției de mișcare, ca în cele din urmă să
56
Conferinţa Naţională de Informatică pentru Elevi, PCID 2016
2 Aprilie 2016, Sibiu, Romania
fie setată rotația ninja-ului, aceasta fiind limitată de un singur criteriu: unghiul de rotație maxim,
care este de 80 de grade.
Caracteristicile jocului realizat de noi sunt:
Dispune de o varietate mare de locații și caractere;
Există posibilitatea distribuirii scorului pe platforme sociale (Facebook,Twitter);
Afișare de reclame;
Efecte sonore și o muzică relaxantă pe fundal;
Grafică simplă și profesională.
3 Funcționalitate și aplicabilitate
Tema jocului este supraviețuirea în “stil ninja”, cât mai mult timp pe o bucată îngustă de
lemn, sub presiunea unor obstacole a căror dificultate va fi incrementată pe parcursul rundei.
Jucătorul va fi avertizat de direcția proiectilului printr-un semn galben de atenționare, care va
apărea pentru scurt timp pe ecran. Evitarea obstacolelor se face prin înclinarea dispozitivului în
stânga (Fig.1) sau în dreapta, anticipând traiectoria obiectului.
Fig.1:Înclinarea caracterului în stânga
Dacă semnul de atenționare este roșu, proiectilul va lua forma unei rachete de care jucătorul
se poate feri doar apăsând de două ori pe ecran. În cazul în care nici o rachetă nu este detectată în
momentul apăsării, personajul își va pierde din echilibru, ceea ce poate duce la căderea lui de pe
buștean, marcând finalul rundei. Jucătorul este punctat în funcție de numărul obiectelor de care se
ferește, iar scorul său maxim va fi memorat. Din meniu (Fig.2) se poate selecta caracterul (Fig.3) și
locația dorită.
57
Conferinţa Naţională de Informatică pentru Elevi, PCID 2016
2 Aprilie 2016, Sibiu, Romania
Fig.2: Meniul jocului
Noile caractere și locații se pot obține prin acumularea unui anumit număr de rubine. Pentru
obținerea rubinelor, jucătorul, pe lângă faptul că trebuie să țină cont de echilibrul ninja-ului și de
traiectoria proiectilelor, trebuie să îl ajute pe acesta să colecteze și cristalele care se deplasează în
jos din partea superioară a ecranului la anumite intervale de timp. Pentru a obține rubine, ninja-ul
trebuie înclinat astfel încât acesta să le atingă. Rubinele pot fi folosite la deblocarea unor
background-uri și caractere noi.
Fig.3: Patru dintre caracterele întâlnite în joc
Un alt element important al jocului îl reprezintă starea de echilibru a caracterului. Dacă acesta
este înclinat în aceeași direcție prea mult timp, ninja-ul riscă să cadă, ducând la încheierea rundei.
Pentru a-l ajusta, utilizatorul trebuie să reechilibreze caracterul la un interval constant de timp
îndreptând device-ul. Acestă mișcare poate reprezenta un pericol, obstacolele continuând să apară
din ce în ce mai repede. Pe parcursul jocului, utilizatorul este forțat să nu “lase garda jos” nici o
secundă și să își calculeze bine momentele destinate ajustării echilibrului.
4 Concluzii
Aplicația nu are un timp maxim de utilizare fiind un joc repetitiv. Ea se va găsi într-o variantă
gratuită pe Google Play Store. Intenționăm ca pe baza recenzilor viitoare, să îmbunătățim stilul
artistic și să mărim gama obiectelor din shop, adăugând consumabile care pot fi folosite o singură
rundă.
58
Conferinţa Naţională de Informatică pentru Elevi, PCID 2016
2 Aprilie 2016, Sibiu, Romania
Holerga Flavius
L. T. ”Axente Sever”
Matematică informatică
Mediaș, România
Milik Andrei
L. T. ”Axente Sever”
Matematică informatică
Mediaș, România
Moga Inocențiu
L. T. ”Axente Sever”
Matematică informatică
Mediaș, România
Prof. Florea Gabriela
L. T. ”Axente Sever”
Matematică informatică
Mediaș, România
59
Conferinţa naţională de informatică pentru elevi
Programare, Comunicare, Imaginaţie, Design
PCID-2016, 2 Aprilie 2016
Sibiu, Romania
Site dinamic educațional: Facultatea de Științe Economice
Alexandra Maria Mărginean, Amalia Bakó
Profesor coordonator: Ramona Humeniuc
Rezumat: Acest proiect are ca scop realizarea unui site educațional și dinamic cu ajutorul limbajului
HTML, a stilurilor CSS și a framework-urilor Bootstrap. Site-ul a fost construit pentru informarea
studenților de la Facultatea de Științe Economice Alba Iulia. Interfața aplicației este prietenoasă,
structurată pe meniuri cu legături către paginile de interes. Imaginile au fost prelucrate cu Adobe
Photoshop, iar slideshow-urile cu ajutorul Bootstrap-ului. Site-ul conține o multitudine de imagini și
aproximativ 10 pagini cu extensia .html, urmând a fi actualizat cu noi informații.
Abstract: The aim of this project is to create an educational and dynamic website by means HTML,
CSS styles and Bootstrap framework. The website has been created in order to inform the students at
the Faculty of Economic Sciences in Alba Iulia. The interface of application is friendly, organized in
menus linked to the pages of interest. The images have been created with Adobe Photoshop and the
slideshows with the help of Bootstrap. The website contains a lot of images and approximate 10 pages
with html extension and is going to be updated with new information.
Cuvinte cheie: web, design, tehnici, Științe Economice, CSS, HTML, Java, Flash, Bootstrap
1 Introducere
În ziua de astăzi multe lucruri s-au schimbat și oricine are cunoștințe tehnice minime, își poate
crea un site. Există platforme de tip blog care au utilizare gratuită (Wordpress), dar și platforme de
serie (PrestaShop, Magento). [1]
Universul informatic actual este caracterizat de dinamicitate, astfel încât orice prezentare
dinamică este constituită din mai multe componente care funcționează paralel, secvențial sau în
mod combinat. Trebuie să avem grijă ca elementele să fie sincronizate unul față de celălalt într-un
mod complex, astfel oferind prezentării un aspect atrăgător, dar și dinamic pentru utilizator. [2]
Funcționalitatea și design-ul web asigură succesul unui website încă din primele secunde în
care utilizatorul a accesat respectiva pagină. Un alt lucru important ar fi realizarea unui meniu ușor
și eficient de accesat. Prima pagină a unui website trebuie să conțină informațiile utile, întru-cât este
“o carte de vizită pentru orice afacere”. [6]
2 Descrierea aplicației
Site-ul Facultății de Științe Economice din cadrul Universității “ 1 Decembrie 1918” Alba
Iulia a fost realizat manual, codul fiind scris cu editorul de texte “Sublime text 3”. Proiectul are în
descrieri detaliate, prin intermediul butoanelor de acțiune din cadrul meniului, șase categorii care
ușurează navigarea pe site. Site-ul are un conținut dinamic și prezintă informații utile pentru viitorii
studenți și nu numai. Fiecare buton are un nume specific și o iconiță reprezentativă, iar atunci când
plasăm mouse-ul deasupra se deschide un submeniu cu link-uri către diferite pagini, iar în partea
dreaptă a meniului am plasat două sigle specifice: prima este sigla Universității „1 Decembrie
60
Conferinţa Naţională de Informatică pentru Elevi, PCID 2016
2 Aprilie 2016, Sibiu, Romania
1918” din Alba Iulia și a doua este sigla Facultății de Științe Economice. Tot pe pagina principală
am realizat un slideshow cu poze din oraș și cu Facultatea „1 Decembrie 1918” Alba Iulia, pentru a
accentua caracterul dinamic al site-ului. Pentru realizarea acestuia am folosit framework-uri din
Bootstrap (fig.1).
Partea de body a site-ului are un impact vizual plăcut datorită imaginilor însoțite de informații
utile și titluri sugestive, care ne ușurează navigarea (fig. 2).
Footer-ul paginii este realizat într-un mod eficient care facilitează navigarea pe site prin
intermediul link-urilor din secțiunea „Quick links” și face legătura cu ajutorul Google Maps-ului
spre localizarea exactă a facultății (fig. 3).
Fig.1: Header-ul paginii principale
Fig. 2: Body-ul paginii principale
61
Conferinţa Naţională de Informatică pentru Elevi, PCID 2016
2 Aprilie 2016, Sibiu, Romania
Fig. 3: Footer-ul site-ului
3 Tehnici de Web Design utilizate
Tehnicile de web design HTML, CSS, JavaScript și Bootstrap le-am utilizat în scopul
realizării unui site cu conținut educațional.
HTML (HyperText Markup Language) “este o formă de marcare orientată către prezentarea
documentelor text pe o singură pagină, utilizând un software de redare specializat, numit agent
utilizator HTML, cel mai bun exemplu de astfel de software fiind browserul web”. [3] Cu ajutorul
HTML-ului ne sunt furnizate mijloacele prin care conținutul unui document “poate fi adnotat cu
diverse tipuri de metadata și indicații de redare”. Indicațiile de redare variază de la decorațiuni
minore ale textului până la hărți de imagini, scripturi sofisticate și formulare. Decorațiunile minore
pot fi: cuvinte care trebuie subliniate sau imaginile care ar trebui să fie introduse. [3]
Am folosit codul din fig. 4 pentru a realiza o listă neordonată cu obiectivele turistice din
orașul Alba Iulia.
<ul type="square">
<li> Roman Catholic Cathedral</li>
<li> Coronation Cathedral</li>
<li> Union Museum</li>
<li> Union Hall</li>
<li> Library Batthyaneum</li>
<li> Horea, Closca and Crisan Cell</li>
<li> Apor Palace</li>
<li> Princely Palace</li>
<li> University "1 December 1918"</li>
<li> The obelisk erected in memory of Horea, Closca and
Crisan</li>
<li> The Route of the Three Fortifications</li>
<li> Equestrian statue of Prince Michael the Brave</li>
<li> Monument dedicated of Avram Iancu</li>
<li> Monument Custozza</li>
<li> The wooden church of the first Orthodox denominations of
Transylvania</li>
<li> The busts of King Ferdinand and Queen Maria</li>
</ul>
fig. 4: Cod HTML pentru listă neordonată
CSS (Cascade Style Sheet) ”este un limbaj de stilizare al elementelor html, al tagurilor html”.
[4] CSS-ul este folosit în web design-ul modern pentru a stiliza paginile web, adică stabilirea
culorii, mărimii și fontului textului, a culorii backgroundului, crearea unui layout (un suport pentru
elementele HTML) personalizat adăugând culoare, imagine de fond și chiar la poziționarea
elementelor, etc. Există două moduri de a încorpora stilurile CSS: direct în pagina respectivă sau
prin fișiere externe, cu extensia .css. Utilizând CSS-ul se pot crea atât pagini web simple, cât și
pagini mai complexe, folosind diferite efecte pe care acesta ni le pune la dispoziție. [4]
62
Conferinţa Naţională de Informatică pentru Elevi, PCID 2016
2 Aprilie 2016, Sibiu, Romania
În codul din fig. 5 am definit trei clase de elemente diferite în scopul realizării efectelor
speciale pentru diverse pagini.
.card{
width: 100%;
height: 100%;
transform-style: preserve-3d;
transition: all 1.0s linear;
}
.text-box:hover .card {
transform: rotateY(180deg);
}
.face{
position: absolute;
width: 100%;
height: 100%;
backface-visibility: hidden;
}
Fig. 5: Stil CSS pentru dinamicitate
BOOTSTRAP “este un instrument utilizat pentru a gestiona cât mai bine faza inițială a unui proiect”.
[5] Acesta conține o serie de componente pe care putem conta și pot fi personalizate și reutilizate, astfel
oferindu-ni-se o bază solidă pentru începerea unui proiect, nefiind necesară pornirea de la zero. “Acestă
funcție este sugerată și de numele framework-ului, termenul “bootstrap” însumând procesele necesare pentru
pornirea computerelor la fel cum framework-ul Bootstrap ne pune la dispoziție instrumentele pentru pornirea
proiectului nostru web”. [5]
Bootstrap-ul ne-a ajutat foarte mult în realizarea acestui site, deoarece am folosit câteva dintre
framework-urile pe care acesta ni le pune la dispoziție, astfel munca fiind puțin mai ușurată (fig. 6).
<div class="col-sm-4">
<h4>Programme Finder</h4>
<img class="img-responsive" src="../../images/img-4089-v.jpg"/>
<p>
Use the programme finder to see our programmes.
</p>
<a href="../educational-offer/licenta.html">
See all our programmes <span class="glyphicon glyphicon-
play"></span>
</a>
</div>
Fig. 6: Framework bootstrap
4 Concluzie
Acest site, odată ce va ajunge pe platforma online devine vizibil și studenții vor putea prelua
informații de interes educațional. Crearea acestuia a constituit o provocare pentru noi, o modalitate de
valorificare a creativității, dar și o sinteză originală a unor informații rezultate dintr-o documentație
exhaustivă și calitativă.
Dezvoltările ulterioare ale proiectului s-ar putea baza pe interactivitatea site-ului cu utilizatorii, prin
crearea unor formulare, conturi de utilizatori și păstrarea legăturii cu utilizatorii, permiterea accesării
anumitor fișiere prin sistemul securizat cu parole.
63
Conferinţa Naţională de Informatică pentru Elevi, PCID 2016
2 Aprilie 2016, Sibiu, Romania
5 Bibliografie:
[1] O idee pentru lucrare am luat-o de pe site-ul: http://www.e-studio.ro/evolutie
[2] Ne-am informat despre utilizarea site-urilor de pe: http://www.verycreative.ro/evolutia-serviciilor-de-
web-design/
[3] Definiția pentru limbajul HTML: https://ro.wikipedia.org/wiki/HyperText_Markup_Language
[4] Definiția pentru stilul CSS: http://it.webdesign-galaxy.ro/ce-este-css/
[5] Definiția pentru framework-urile Bootstrap: http://dana-damoc.eu/blog/introducere-la-bootstrap-3/
[6] Condiții de realizare a unui site luate de pe: http://www.hit.ro/stiinta-generala/sfaturi-utile-pentru-
realizarea-unui-website-de-succes
Maria Alexandra Mărginean
Colegiul Național “Horea, Cloșca și Crișan”
Alba Iulia
Matematică-Informatică, Intensiv Informatică
cls. XI
Alba Iulia, România
E-mail: [email protected]
Amalia Alexandra Bakó
Colegiul Național “Horea, Cloșca și Crișan”
Alba Iulia
Matematică-Informatică, Intensiv Informatică
cls. XI
Alba Iulia, România
E-mail: [email protected]
Prof. Ramona Humeniuc
Alba Iulia, România
E-mail: [email protected]
64
Conferinţa naţională de informatică pentru elevi
Programare, Comunicare, Imaginaţie, Design
PCID-2016, 2 Aprilie 2016
Sibiu, Romania
Angry Driver
Marinescu Marius Daniel, Preda Mihail Irinel
Profesor coordonator: Martin Elena Liliana
Rezumat : Aplicația este un software de divertisment, portabil și interactiv dezvoltat cu Framework-ul
UNITY, pentru platforma ANDROID. Aceasta poate fi folosită de către oricine în scop recreativ,
antrenând atenția și timpul de reacție al utilizatorului. Principalele obiective ale jocului sunt: ocolirea
obstacolelor de către jucător, care conduce o mașină și colectarea monedelor pentru achiziționarea altor
mașini. Pe măsură ce utilizatorul înaintează în joc, viteza autovehiculelor va crește. Aplicația permite
achiziționarea unor noi mașini, a unor arme ce facilitează înaintarea și a unui scut protector ce permite
distrugerea mașinilor. Programul va memora un scor record, monedele colectate și mașinile cumpărate.
De asemenea aplicația are încorporată două moduri de joc : “Normal Mode”, unde jucătorul trebuie sa
conducă mașina pe timp de zi, și “Night Mode”, unde recompensele sunt dublate și jucătorul trebuie să
conducă autovehiculul pe timp de noapte. UNITY folosește programarea orientată pe obiect (OOP) și
permite lucrul cu ferestre, butoane și alte facilități. Aplicația devine astfel interactivă, extrem de
dinamică, cu interfață personalizată. Programul este integrat pe o pagină WEB editată online,(tip blog).
Orice utilizator poate să descarce aplicația rapid și sigur.
Cuvinte cheie : recreativ, portabil, dinamic, timpul de reacție, Unity, programarea orientată pe obiect,
Android
Abstract: The application represent an entertainment software portable and interactive, implemented
with UNITY, designed for ANDROID platform. It can be used by anybody within recreational scope,
improving attention and reaction time. The main objectives of the game are: avoiding obstacles by the
player, which drives a vehicle and collecting coins with the aim of purchasing other cars. As far as the
player goes, the cars‟ velocity increase. It allows purchasing other new cars, weapons which facilitates
going forward and protective shield which allows to destroy the other cars. It will store a high score,
collected coins and purchased vehicles. Also the application has two game modes : “Normal Mode”,
where the player has to drive the car during the day and “Night Mode”, where the rewards are doubled
and the player has to drive the vehicle during the night. Unity uses Object Oriented Programming
(OOP) and allows working with windows, buttons and other objects. The application becomes
interactive, dynamic with personalized GUI (Graphic User Interface). It is integrated on an online
edited web page (blog type). Any user can rapidly and surely download the application.
Key words: recreational, portable, dynamic, reaction time, Unity, Object Oriented Programming,
Android
1 Introducere
Aplicația este un exemplu de utilizare a facilităților oferite de platforma UNITY și de
programarea orientată obiect. Prin elaborarea acestei aplicații am identificat modalități de lucru ce
ne-au permis să utilizăm PHOTOSHOP pentru a îmbunătăți aspectul grafic al obiectelor utilizate de
aplicație (vehiculele). Totodată am utilizat C# pentru a gestiona deplasarea acestora și pentru a
monitoriza monedele consumate, rundele de joc, etc. Am folosit astfel cunoștințele de programare
65
Conferinţa Naţională de Informatică pentru Elevi, PCID 2016
2 Aprilie 2016, Sibiu, Romania
pentru implementarea unui joc simplu si interactiv. O alta provocare a realizării acestui produs a
constat în crearea unui aspect grafic îngrijit și atractiv.
2 Funcționalitate și aplicabilitate
Pentru a asigura aplicației atractivitate și ușurință in utilizare, am integrat programul într-o
pagină WEB editată online astfel încât orice utilizator să poată să descarce aplicaţia dorită rapid şi
sigur. Fereastra aplicaţiei este dimensionată astfel încât utilizatorul să o poată folosi optim.
Descărcare aplicație
Fig. 1: Pagina principală a site-ului de unde poate fi descărcată aplicația
2.1 Testarea in timp real a aplicației
Accesând icon-ul de mai jos se deschide aplicaţia. Imaginea a fost editată în PHOTOSHOP
astfel încât să fie cât mai sugestivă în ceea ce privește tipul de joc.
Fig. 2: Pictograma aplicației
Din pagina principală, prin accesarea butonului „Information”, apare o fereastră în care
utilizatorului îi sunt prezentate informațiile în limbile română și engleză despre aplicația pe care o
va accesa ulterior.
66
Conferinţa Naţională de Informatică pentru Elevi, PCID 2016
2 Aprilie 2016, Sibiu, Romania
Fig.3: Butonul Information
Pentru a lansa programul utilizatorul trebuie să efectueze click pe iconița jocului.
Fig.4: Iconița jocului instalat
Această fereastră conține o serie de butoane denumite sugestiv pentru deschiderea altor pagini
din aplicație.
67
Conferinţa Naţională de Informatică pentru Elevi, PCID 2016
2 Aprilie 2016, Sibiu, Romania
Fig.5: Meniul Principal
La acționarea butonului “Play” se va deschide un submeniu, conținând diferite butoane ce
servesc la îndeplinirea scopului jocului.
Fig.6: Submeniu
Prin apăsarea butonului “Garage” se va deschide o fereastră ce conține mașinile deținute de
utilizator și cele care pot fi cumpărate, având prețul listat sub fiecare autovehicul în parte.
68
Conferinţa Naţională de Informatică pentru Elevi, PCID 2016
2 Aprilie 2016, Sibiu, Romania
Fig.7: Garage
Fereastra deschisă prin apăsarea butonului “Shop” conține îmbunătățirile ce pot fi cumpărate,
având atașat prețul de achiziție.
Fig.8: Shop
69
Conferinţa Naţională de Informatică pentru Elevi, PCID 2016
2 Aprilie 2016, Sibiu, Romania
Exemplificare pentru butonul “Normal Mode” :
Fig.9: Gameplay “Normal Mode”
Exemplificare pentru butonul “Night Mode” :
Fig.10: Gameplay “Night Mode”
70
Conferinţa Naţională de Informatică pentru Elevi, PCID 2016
2 Aprilie 2016, Sibiu, Romania
2.2 Cerințe și specificații
Aplicația este fiabilă și portabilă, iar pentru buna funcționare a soft-ului este necesar ca telefonul să
aibă sistemul de operare Android, versiunea minimă fiind Android 2.3.1 „Gingerbread‟. Aplicația
ocupă aproximativ 50 de MB și se poate juca în modul „Portret”.
2.3 Fragmente cod sursă
Cod C# pentru funcția CarSpawner :
if (carshowed > 100) {
EnemyCarMove.speedcm -=carshowed/300;
TrackMove.speedtr +=carshowed/300;
densitatemasini = 450;
delaytimer -= 0.6f;
if(delaytimer<0.30f)
delaytimer = 0.30f;
}
if (carshowed > 101) {
EnemyCarMove.speedcm = -20.5f;
TrackMove.speedtr = 0.9f;
densitatemasini = 470;
delaytimer -= 0.6f;
if(delaytimer<0.25f)
delaytimer = 0.25f;
}
if (timer < 0) {
Vector3 car1 = new Vector3(41 , Random.Range(1500,1800),0);
Vector3 car2 = new Vector3(41 , Random.Range(1500,1800),0);
Vector3 car3 = new Vector3(220 , Random.Range(1500,1800),0);
Vector3 car4 = new Vector3(220 , Random.Range(1500,1800),0);
Vector3 car5 = new Vector3(401 , Random.Range(1500,1800),0);
Vector3 car6 = new Vector3(401 , Random.Range(1500,1800),0);
Vector3 coin1=new Vector3(41 , Random.Range(1500,1800),0);
Vector3 coin2=new Vector3(220 , Random.Range(1500,1800),0);
Vector3 coin3=new Vector3(401 , Random.Range(1500,1800),0);
if (asd == 1) {
if (ok < 2) {
if (Mathf.Abs (car1.y - car2.y) < 190) { //verificare banda 1 ciocniri
if (car1.y > car2.y) {
Instantiate (cars [carno], car1, transform.rotation);
y1 = car1.y;
//car1.x = car1.x + 210;
} else {
Instantiate (cars [carno], car2, transform.rotation);
//car2.x = car2.x + 210;
y1 = car2.y;
}
ok++;
carshowed++;
}
} else {
if(Mathf.Abs (y2 - y1) < densitatemasini ||
Mathf.Abs (y1 - y3) < densitatemasini)
car1.y = car1.y + 250;
71
Conferinţa Naţională de Informatică pentru Elevi, PCID 2016
2 Aprilie 2016, Sibiu, Romania
if(Mathf.Abs(y1 - coin1.y)<210){
coin1.y = coin1.y+230;
}
3 Concluzii
Această aplicație este un joc relativ simplu, pentru toate vârstele, fiind un mijloc viabil de
recreație. Într-un viitor apropiat softul va beneficia de actualizări privind modelele de vehicule,
gestionarea punctajelor într-o baza de date tip clasament, manual de utilizare. Programul va putea fi
descărcat de pe „Google Play”.
4 Bibliografie
[1] John P. Doran, Unity Game Developement Blueprints, Editura Packt Publishing,ISBN 978-1-78355-
365-5
[2] Venita Pereira, Learning Unity 2D Game Development by Example, Editura Packt Publishing, ISBN:
978-1-78355-904-6
[3] Documentație UNITY - https://unity3d.com/learn/tutorials
Marinescu Marius Daniel Preda Mihail Irinel
Colegiul Național B.P.Hasdeu Colegiul Național B.P.Hasdeu
Aplicații software pentru Aplicații software pentru
dispozitive mobile dispozitive mobile
Buzău, România Buzău, România
E-mail: [email protected] E-mail: [email protected]
Prof. Martin Elena Liliana
Colegiul Național B.P.Hasdeu
Aplicații software pentru dispozitive mobile
Buzău, România
E-mail: [email protected]
72
Conferinţa naţională de informatică pentru elevi
Programare, Comunicare, Imaginaţie, Design
PCID-2016, 2 Aprilie 2016
Sibiu, Romania
StarDust
Oltean Alexandru, Prăvariu Alin
Profesori coordonatori: Popescu Carmen, Preda Georgeta
Rezumat: Datorită aniversării celor 73 ani de la naşterea lui Tomohiro Nishikado ce va avea loc la
sfârșitul acestei luni, 31 Martie să fim mai precişi, proiectul nostru are ca idee principal jocul acestuia,
Space Invaders, cu un ton mai actual. Jocul nostru păstrează formatul 8bit al jocului original dar cu
culori mult mai vii, mici detalii adăugate şi efecte atrăgătoare potrivite pentru un joc consacrat ca cel
din 1978 recreat după aproape 40 de ani de la lansarea acestuia. Este recreat cu ajutorul motorului de
joc Unity şi a scripturilor in C#.
Abstract: Since this year we celebrate Tomohiro Nishikado’s 73 anniversary at the end of the month,
31st
of March to be more precise, our project will be based on one of his games, Space Invaders, but
with a tint of new. Our game will keep the original 8bit theme but with brighter colors, small added
details and attractive effects suitable for such a renowned game from 1978, remade after nearly 40 years
from its release. It’s recreated with the game engine Unity and scripts from C#.
1 Introducere
Jocul intitulat StarDust a fost creat cu ajutorul platformei Unity, un motor pentru jocuri, ce
permite folosirea scripturilor in C#. Elementele ce aparțin acestui joc au fost preluate din pachetul
standard din Unity, precum navele spațiale şi asteroizii. Efectele speciale au fost create de noi cu
ajutorul opțiunii de particule şi iluminat din interfața Unity. Fiecare element are unul sau mai multe
scripturi atașate pentru a-i permite să execute anumite mișcări sau funcții. Spre exemplu, naveta
spațială are atașat un script ce permite mișcarea acesteia, precum și tragerea de gloanțe. Tehnologia
folosită este de actualitate, aceasta fiind folosită şi de companii mai mari la crearea multor jocuri
cunoscute precum Cities: Skylines, Rust sau Firewatch. Printre elementele de originalitate se
numără interfaţa user-friendly, muzica din timpul jocului și efectele speciale create de noi. În
comparaţie cu alte aplicaţii de genul acesta, aplicația noastră menţine caracterul nostalgic al
jocurilor din anii ’80, dar aduce in acelaşi timp elemente actuale şi inovative. Vom explica, pe scurt,
o inițiere în universul jocului, etapele urmate în crearea acestuia și unele dificultăți întâlnite în
timpul programării și a configurării. Oferim o scurtă încheiere în secțiunea 6. Concuzie, unde
vorbim despre schimbările posibile, pe viitor, în ceea ce privește platforma pe care poate fi jucat
StarDust și complexitatea cerințelor jocului de la cel care îl joacă.
2 Scurtă inițiere în joc
Jocul este un arcade shooter care crează un cadru primejdios pentru jucătorul care este pus în
locul căpitanului unei nave spațiale aflat într-o misiune periculoasă prin spațiul vast și neexplorat.
Acesta este în pericol de a fi lovit de asteroizi și împușcat de alte nave spațiale inamice. Jucătorul se
deplasează cu ajutorul săgeților de pe tastatură sau tastele WASD și va controla focul armelor navei
cu ajutorul Mouse-ului. Acesta va folosi armele navei pentru a distruge asteroizii care vin spre nava
73
Conferinţa Naţională de Informatică pentru Elevi, PCID 2016
2 Aprilie 2016, Sibiu, Romania
jucătorului sau să încerce să îi evite in timp ce este într-o lupta continua cu navele inamice ce
trebuie distruse fără a le lăsa sa treacă de nava controlată de acesta.
Jocul este bazat pe un sistem de tip scor ce se actualizează după distrugerea unui asteroid sau
a unei nave inamice. Jucătorul are pe durata unui joc un număr de vieți ce scade când este lovit de o
navă inamică, de un asteroid sau dacă permite trecerea unei nave inamice. Jocul se sfârșește în
momentul în care jucătorul pierde toate viețile.
3 Etape de creare a jocului
Proiectul a început cu crearea navei controlată de jucător (vezi Fig. 5). Apoi s-a adăugat
camera care urmărește nava jucătorului și efectele luminoase. Se adaugă un background (vezi Fig.6)
și scriptul pentru mișcările jucătorului. A urmat crearea laserelor și scriptului acestora. Următoarea
etapă a constat în crearea inamicilor și a asteroizilor, a efectelor speciale avute de fiecare navă
inamică împreună cu scriptul ce controlează întregul joc. Proiectul s-a finalizat cu adăugarea părții
audio, sistemul de scor și vieți. Apoi a urmat compilarea jocului.
4 Figuri explicative
Fig. 1: Interfața din timpul jocului (variantă simplificată)
74
Conferinţa Naţională de Informatică pentru Elevi, PCID 2016
2 Aprilie 2016, Sibiu, Romania
Fig. 2: Elemente mobile ale jocului
Fig. 3: Zona protejată de către jucător de navele inamice
Fig. 4: Bară cu informații despre scor și numărul de vieți
Fig. 5: Modelul navei controlate de jucător
75
Conferinţa Naţională de Informatică pentru Elevi, PCID 2016
2 Aprilie 2016, Sibiu, Romania
Fig. 6: Imagine cu nava controlată de jucător pe unul dintre fundalele alese pentru joc
(programul folosit este Unity)
În Fig. 6 se poate observa jocul la un stadiu mai avansat, având puse în aplicare ideile
observate in Fig. 1 și modelul navei controlate de către jucător din Fig. 5.
5 Dificultăți întâlnite
Dificultăți au apărut în timpul adăugării efectelor speciale, la apariția inamicilor in valuri și în
scriptul ce controlează jocul.
6 Concluzie
În viitor, jocul nostru poate fi jucat pe alte platforme precum Android, iOS, PlayStation,
browser web sau chiar platforma pe care a fost inițial lansat jocul sau poate chiar pe Atari 2600. O
alta platforma pe care s-ar putea juca jocul in viitor poate fi chiar noul Oculus Rift, platformă care
ar schimba radical gameplay-ul jocului și chiar experiența din timpul jocului a utilizatorului.
Desigur, acest joc poate fi transformat într-o afacere adăugându-i reclame, lucru pe care nu îl dorim
la momentul actual.
Deși ideea jocului în sine nu dorește altceva decât să testeze reflexele jocului, în viitor dorim
să adăugăm și alte cerințe jocului precum testarea abilitățile de lider ale jucătorului, noi dorind să
adăugam un nou mod ce permite jucătorului să-și stabilească o strategie pe care o pune în practică
prin controlarea altor nave spațiale care îi stau la dispoziție.
7 Bibliografie
[1] Date despre Tomohiro Nishikado și activitatea sa https://en.wikipedia.org/wiki/Tomohiro_Nishikado
[2] Site-ul oficial al Unity-ului - https://unity3d.com/
[3] Date despre jocul original Space Invaders - https://en.wikipedia.org/wiki/Space_Invaders
[4] Informații ajutătoare despre C# - https://msdn.microsoft.com/en-us/library/67ef8sbd.aspx
76
Conferinţa Naţională de Informatică pentru Elevi, PCID 2016
2 Aprilie 2016, Sibiu, Romania
Oltean Alexandru
Colegiul Naţional “Gheorghe Lazăr” Sibiu
Matematică-informatică intensiv informatică
Sibiu, Sibiu, România
E-mail: [email protected]
Prăvariu Alin
Colegiul Naţional “Gheorghe Lazăr” Sibiu
Matematică-informatică intensiv informatică
Sibiu, Sibiu, România
E-mail: [email protected]
Prof. Popescu Carmen
Colegiul Naţional “Gheorghe Lazăr” Sibiu
Informatică
Sibiu, Sibiu, România
E-mail: [email protected]
Prof. Preda Georgeta
Colegiul Naţional “Gheorghe Lazăr” Sibiu
Informatică
Sibiu, Sibiu, România
E-mail: [email protected]
77
Conferinţa naţională de informatică pentru elevi
Programare, Comunicare, Imaginaţie, Design
PCID-2016, 2 Aprilie 2016
Sibiu, Romania
Pseudocode Learning Companion
Popa Cătălin
Profesor coordonator: Ignat Cornelia
Rezumat: Fie că este vorba despre introducerea în noțiuni elementare de algoritmică în clasa a IX-a,
pregătirea pentru bacalaureat în clasa a XII-a sau chiar reactualizarea cunoștințelor necesare în timpul
facultății, buna cunoaștere a limbajului pseudocod este imperativă oricărui elev care studiază
informatica. Scopul programului este acela de a fi nu numai un mijloc de învățare modern și eficient în
predarea (respectiv actualizarea) acestui limbaj, cât și un suport pentru autoînvățare. Realizat în
Microsoft Visual C#, programul oferă posibilitatea explicitării limbajului prin mai multe module: mediu
de învățare, verificator și traducător. Mediul de învățare permite elevilor să-și însușească sintaxa și
caracteristicile unei anumite instrucțiuni, folosind informațiile de pe ecran, pentru ca mai apoi să
încerce chiar ei să scrie instrucțiunea respectivă și să afle dacă au făcut-o corect. Ulterior, elevul poate
verifica dacă a scris corect un întreg algoritm în pseudocod, cuprinzând mai multe instrucțiuni, folosind
verificatorul. Iar în final, traducătorul facilitează o tranziție facilă înspre unul din limbajele de
programare C++ sau Pascal, prin traducerea pseudocodului în cod efectiv.
Abstract: Be it the introduction intro elementary algorithmic notions in the 9th grade, the preparation for
the national exams in the 12th grade, or reviewing information during university, good knowledge of the
pseudocode language is mandatory for any pupil studying Informatics. The aim of the program is not
only to provide a modern an effective means of teaching (or updating) this language, but also to support
self-learning. Using Microsoft Visual C#, the program offers the possibility to explain the language
using multiple modules: learning environment, code checker and translator. The learning environment
allows pupils to master the syntax and characteristics of an individual statement using on-screen
instructions, and then to try and write it themselves and see whether it’s correct. Later, the pupil may
check if a whole algorithm that uses multiple statements has been written correctly. Last but not least,
the translator provides an easy means of transition towards C++ or Pascal, by effectively translating
pseudocode intro real code.
Cuvinte cheie: pseudocod, autoînvățare, didactic, șir de caractere, verificare linie cu linie, traducător.
1 Introducere
Lucrarea de față se dorește a fi un mijloc prietenos de învățare a limbajului pseudocod, dar și
un bun suport pentru cei care doresc să învețe singuri. Acesta are o interfață grafică clară și ușor de
utilizat, fiind ideal pentru uzul său în învățământul preuniversitar, în cadrul disciplinei Informatică.
Proiectul a apărut din dorința de a facilita învățarea pseudocodului ca veritabilă bază a
programării orientate pe obiect, dar și din curiozitatea de a învăța programare vizuală. Prin urmare,
proiectul reprezintă o Windows Forms Application realizată în Microsoft Visual C# 2015 [1].
Originalitatea programului constă în faptul că acesta strânge într-un singur loc un mediu de
învățare în pseudocod, un verificator de cod și un traducător din Pseudocod în C++ sau Pascal,
dintre care verificatorul reprezintă un modul unic.
Asemănător programului propus există softul „Pseudocode” realizat de ValiNet Romania
(Radu Valentin și Dudescu Alexandru), care reprezintă un traducător profesional de pseudocod, [2].
78
Conferinţa Naţională de Informatică pentru Elevi, PCID 2016
2 Aprilie 2016, Sibiu, Romania
Spre deosebire de „Pseudocode”, care este un utilitar profesional proiectat pentru traducerea
pseudocodului în diferite limbaje, aplicația de față se dorește un real ajutor pentru cei care încep a
descoperi tainele programării structurate în clasa a IX-a (sau, de ce nu, chiar și mai devreme), fiind
proiectat mai ales cu scop autodidactic. Acest lucru se realizează prin intermediul modulului de
verificare a codului, care nu se regăsește în programul mai sus menționat.
Pe viitor, se pot avea în vedere o serie de aspecte, printre care ar fi adăugarea unui al patrulea
modul, un builder, care să permită construirea pe loc a unui program în pseudocod prin selectarea și
completarea instrucțiunilor dorite, dar și adăugarea evidențierii sintaxei codului.
2 Utilizarea aplicației
Fereastra de start a aplicației, prezentată în Fig. 1, permite lansarea, prin intermediul
butoanelor, a unuia din cele trei module: mediul de învățare, verificatorul de cod, sau traducătorul.
De asemenea, tot din meniul principal se poate accesa ghidul de utilizare a programului sau schimba
limba de utilizare prin ListBox-ul din colțul stânga-jos al ecranului.
Programul include suport implicit pentru limbile română și engleză, alături de posibilitatea
traducerii în oricare limbă care poate fi scrisă în alfabetul englez, prin editarea fișierului
OTHER.TXT, aflat în directorul de resurse al programului. Formatul fișierului trebuie respectat
întocmai în cursul traducerii, pentru a menține acuratețea limbajului, a meniurilor, a mesajelor, a
mediului de învățare etc. Pentru moment, fișierul include o traducere rudimentară în limba franceză.
Fig.1: Fereastra principală
79
Conferinţa Naţională de Informatică pentru Elevi, PCID 2016
2 Aprilie 2016, Sibiu, Romania
Primul dintre modulele disponibile este mediul de învățare. Fereastra principală a mediului
de învățare, prezentată în Fig. 2, permite selectarea uneia din cele 8 instrucțiuni ale pseudocodului
spre a fi învățată, prin intermediul a opt butoane (câte unul aferent fiecărei instrucțiuni).
Fig.2: Selectorul mediului de învățare
După selectarea uneia din cele 8 instrucțiuni, o altă fereastră va apărea. Aceasta conține două
RichTextBox-uri: una în care este prezentată sintaxa instrucțiunii respective, alături de o scurtă
explicație despre modul său de funcționare, iar a doua permite elevului să scrie chiar el
instrucțiunea, pentru ca, prin apăsarea butonului de verificare, să afle dacă a scris corect. Programul
va verifica sintaxa, formatul și corectitudinea codului în general (aspecte precum parantetizarea
corectă a expresiilor, folosirea corectă a virgulelor etc. [3]) și va afișa un mesajului aferent
rezultatului verificării.
Fig.3: Învățarea structurii repetitive cu număr cunoscut de pași (pentru)
80
Conferinţa Naţională de Informatică pentru Elevi, PCID 2016
2 Aprilie 2016, Sibiu, Romania
Al doilea modul disponibil este verificatorul de cod, care se prezintă cu un RichTextBox și
un buton de verificare. El reprezintă o extindere a mediului de învățare. Presupunând o parcurgere
și o înțelegere completă a mediului de învățare, el permite verificarea unui algoritm mai amplu, care
poate fi compus din mai multe instrucțiuni, spre deosebire de mediul de învățare, care permite
verificarea unei singure instrucțiuni la un anumit moment.
Elevul poate verifica dacă este gata sau nu să redacteze un întreg algoritm. Acesta trebuie
doar să tasteze algoritmul (sau să-l încarce dintr-un fișier text) și să apese butonul de verificare.
Programul urmează să verifice linie cu linie codul redactat, oprindu-se la prima linie în care este
detectată o eroare. Astfel, elevul poate afla exact în care dintre liniile algoritmului său apare ceva
scris greșit.
Fig.4: Verificatorul de cod. Acesta se oprește la prima linie care conține greșeli.
Al treilea modul disponibil este traducătorul. Acesta este menit pentru momentul în care
elevii au învățat complet pseudocodul, și se impune tranziția spre un limbaj de programare concret,
care poate fi compilat direct, precum C++ sau Pascal. El permite elevului să traducă atât instrucțiuni
individuale, cât și algoritmi întregi din pseudocod în C++ sau în Pascal, ușurând drastic tranziția de
la codul scris pe foaie, pentru a fi gândit la codul scris pe calculator, spre a fi compilat.
Elevul trebuie doar să tasteze în căsuța din stânga codul său (sau să-l încarce dintr-un fișier
text) și să apese butonul de traducere. Programul va verifica corectitudinea algoritmului și va
semnala dacă programul conține vreo eroare (și, ca atare, va refuza traducerea), iar dacă algoritmul
este scris corect, va efectua traducerea, pe care o poate, ulterior, salva tot ca fișier text.
Toate cele trei module ale programului se bazează, mai mult sau mai puțin, pe o clasă
centrală definită în program ca „class.cs”, aceasta încorporând numeroase funcții de verificare care
sunt folosite de toate trei modulele, dar mai ales de verificatorul de cod. Totuși, fiecare din cele trei
module are și părți proprii, independente de clasă: traducătorul are motorul de traducere și de
echivalare, mediul de învățare dispune de verificarea efectivă a prezenței instrucțiunii luate înspre
studiu în căsuța de testare, iar verificatorul dispune de un modul de parcurgere linie cu linie al
codului de verificat, astfel încât să evidențieze exact pe care linie se află greșeala.
81
Conferinţa Naţională de Informatică pentru Elevi, PCID 2016
2 Aprilie 2016, Sibiu, Romania
Fig.5: Traducătorul afișând algoritmul lui Euler pentru cel mai mare divizor comun
O parte din codul clasei care include diverse funcții de verificare se regăsește mai jos:
public static bool verifica_prezenta_sir(string sir, string prezent) // se
verifica prezenta unui sir de caractere, dar si prezenta operatorului de
atribuire si a virgulelor (functia este utilizata acolo unde nu este voie sa
apara atat sirul dat, cat si cei doi operatori antementionati)
{
if (sir.Contains(prezent) == false || sir.Contains("<-") == true ||
sir.Contains(",") == true)
return false;
sir = sir.Replace(prezent, "");
if (sir.Length > 0)
return false;
return true;
}
public static bool verifica_sfarsituri(string sir) // se verifica inchiderea
corecta a instructiunilor care trebuie incheiate cu sfarsit... (de ex. daca cu
sf.daca)
{
int i;
for (i = 0; i <= 2; i++)
if (sir.Contains(chestii[i]) == true &&
Verificare_Sintaxa.verifica_prezenta_sir(sir, chestii[i]) == false)
return false;
return true;
}
82
Conferinţa Naţională de Informatică pentru Elevi, PCID 2016
2 Aprilie 2016, Sibiu, Romania
public static bool verifica_pana_cand(string sir) // se verifica sintaxa de la
inceputul instructiunii repeta pana cand
{
if (sir.Contains(operatii[6]) == false || sir.Contains("<-") == true ||
sir.Contains(",") == true)
return false;
return true;
}
public static bool verifica_paranteze(string sir) // se verifica parantetizarea
corecta a textului prin numararea parantezelor inchise si deschise
{
int c1 = 0, c2 = 0;
int i;
for (i = 0; i <= sir.Length - 1; i++)
{
if (sir[i] == '(')
c1++;
if (sir[i] == ')')
c2++;
if (c2 > c1)
return false;
}
if (c1 != c2)
return false;
return true;
}
public static bool verifica_operatori(string sir) // se verifica utilizarea
corecta a operatorilor prin transformarea tuturor in operatorul + si verificarea
existentei a doua plusuri consecutive (astfel se verifica daca apar 2 operatori
consecutivi, lucru nepermis)
{
while (sir.Contains(" "))
sir = sir.Replace(" ", " ");
sir = sir.Replace("<-", "+"); // nu se poate atribuire apoi operator
sir = sir.Replace("-", "+");
sir = sir.Replace("*", "+");
sir = sir.Replace("/", "+");
sir = sir.Replace("DIV", "+");
sir = sir.Replace("MOD", "+");
sir = sir.Replace(">", "+");
sir = sir.Replace("<=", "+");
sir = sir.Replace(">=", "+");
sir = sir.Replace("=", "+");
sir = sir.Replace("<>", "+");
sir = sir.Replace("AND", "+");
sir = sir.Replace("OR", "+");
sir = sir.Replace("NOT", "+");
sir = sir.Replace("XOR", "+");
if (sir.Contains("++") == true || sir.Contains("+)") == true)
return false;
return true;
}
83
Conferinţa Naţională de Informatică pentru Elevi, PCID 2016
2 Aprilie 2016, Sibiu, Romania
3 Concluzie
Potențialul didactic, și, mai ales, autodidactic al programului crește semnificativ datorită
posibilității de a învăța instrucțiunile individuale ale pseudocodului și de a le verifica atât
individual, cât și ca parte a unui algoritm mai amplu.
Aplicația este ușor de utilizat, datorită interfeței prietenoase și a butoanelor și căsuțelor mari,
cu text clar și lizibil, astfel încât, atât codul scris de elev, cât și indicațiile oferite în sprijinul său, să
fie foarte bine prezentate.
Multiplele module oferite, permit utilizatorului posibilitatea de a avea atât o viziune de
ansamblu, cât și una în detaliu, a modului specific în care operează limbajul pseudocod.
Posibilitatea verificării și traducerii individuale de blocuri de instrucțiuni, care nu trebuie neapărat
să fie parte a unui algoritm complet, reprezintă principalul atu al programului, mai ales din punct de
vedere auto didactic.
4 Bibliografie
[1] DUMITRIU-LUPAN, Nușa, PINTEA, Rodica, NIȚĂ, Adrian, NIȚĂ, Mioara, Introducere în
programarea .Net Framework, Editat de BYBLOS SRL sub coordonarea Agora Media SA, pentru
Microsoft România, 2008
[2] ***, Pagina oficială ValiNet, http://www.valinet.ro/ro-ro/about-pseudocode.html
[3] KELLY, Michael, Pseudocode: An Introduction, http://faculty.ccri.edu/mkelly/
[4] ***, Portofoliu personal de informatică, clasa a IX-a, elev Cătălin Popa, profesor Cornelia Ignat
Popa Cătălin
Liceul Tehnologic „Școala Națională de Gaz” Mediaș
Matematică-Informatică
Mediaș, România
E-mail: [email protected]
Prof. Ignat Cornelia
Liceul Tehnologic „Școala Națională de Gaz” Mediaș
Informatică
Mediaș, România
E-mail: [email protected]
84
Conferinţa naţională de informatică pentru elevi
Programare, Comunicare, Imaginaţie, Design
PCID-2016, 2 Aprilie 2016
Sibiu, Romania
“Spânzurătoarea”/ “Le jeu du pendu”
soft educațional pentru îmbogățirea vocabularului limbii franceze
Radu Antinie, Abigail Radu
Profesori coordonatori: Andreea Demco, Mădălina Sibișan
Rezumat: Aplicația creată de noi este un soft educațional adresat celor care doresc să învețe limba
franceză, mai precis sa-și dezvolte vocabularul, și constă într-un joc: “Spânzurătoarea” ("Hangman" /
„Le jeu du pendu”). Cu excepția ideii jocului – familiară tuturor copiilor -, proiectul este complet
original. Mai mult, jocul clasic a fost extins, prin introducerea unei părți interactive de cucerire de
teritorii pe harta Franței.
Abstract: Our application is an educational software aimed at those who want to learn French,
specifically for developing their vocabulary and consists of a game: "Hangman" / "Le jeu du pendu".
Excepting the idea of the game – familiar to all children, - the project is completely original. Even
more, the classical game was extended by the introduction of an interactive part for conquering new
territories of France’s map.
1 Introducere
Jocul a fost conceput ca o modalitate de dezvoltare a vocabularului limbii franceze, prin
divertisment. Jocul clasic “spânzurătoarea” - corespunzător, în implementarea realizată, modului
„Survie” – a fost completat cu o parte de cucerire de teritorii pe harta Franței – corespunzătoare
modului „Campagne”. Jucătorul trebuie să opteze pentru unul din cele două moduri, (Fig.1).
Fig.1: Captură de ecran cu cele două moduri de joc și nivelele de dificultate
În modul "Survie", jucătorul are de ales între 3 nivele de dificultate: Facile (până la 4 litere),
Moyen (maxim 6 litere) și Difficile (mai mult de 6 litere), (Fig.1).
Jucătorul trebuie să ghicească un cuvânt generat aleator de program (în funcție de nivelul de
85
Conferinţa Naţională de Informatică pentru Elevi, PCID 2016
2 Aprilie 2016, Sibiu, Romania
dificultate pe care și l-a ales), având posibilitatea de a folosi magazinul ca să cumpere prima literă,
ultima literă, o literă oarecare sau să schimbe cuvântul, (Fig.2). Dacă recurge la „serviciile”
magazinului, el trebuie să se încadreze într-un credit inițial în valoare de 50 de monede și să tină
cont de costurile literelor, în funcție de poziționarea lor în cuvânt (5 monede pentru o literă
aleatoare, 7 monede pentru prima literă, 10 monede pentru ultima literă și 15 monede pentru a
schimba cuvântul), (Fig.2).
Fig.2: Captură de ecran cu magazinul si prețurile literelor.
De fiecare dată când jucătorul alege o literă care nu face parte din cuvânt, corpul omulețului
spânzurat se mai completează cu o porțiune. Dacă jucătorul greșește de 6 ori, pierde jocul. Când
jocul se încheie, apare o fereastră în care jucătorul trebuie să își scrie numele pentru a putea fi plasat
în clasament ("Hall de la renommée"), în funcție de nivelul la care a acesta a ajuns, în raport cu
ceilalți jucători, (Fig.3).
Fig.3: Captură de ecran cu topul jucătorilor din modul “Survie”.
În modul "Campagne", după ce jucătorul a ales nivelul de dificultate, el este redirecționat
către o nouă fereastră, unde trebuie să cucerească progresiv toate regiunile Franței, (Fig.4). În acest
scop, el trebuie să avanseze nivel cu nivel, în fiecare din acestea jucătorul având de ghicit un cuvânt
dintr-o categorie aleasă de el.
După ce jucătorul alege o anumită categorie, aceasta nu va mai fi disponibilă pentru nivelele
următoare, el având, în continuare, ca opțiuni, doar categoriile de cuvinte rămase. Jucătorul câștigă
atunci când cucerește toate regiunile Franței.
86
Conferinţa Naţională de Informatică pentru Elevi, PCID 2016
2 Aprilie 2016, Sibiu, Romania
Fig.4: Captură de ecran cu harta cuceririi Franței, de la modul “Campagne”.
2 Funcționalitatea aplicației
Am ales să lucrăm în Microsoft Visual Studio 2015, în C#, deoarece este un IDE ideal pentru
dezvoltarea de aplicații de desktop, având un toolbox de GUI perfect pentru aceasta. La deschiderea
aplicației, apare fereastra cu meniul principal, (Fig.5).
Fig.5: Captură de ecran cu meniul principal.
87
Conferinţa Naţională de Informatică pentru Elevi, PCID 2016
2 Aprilie 2016, Sibiu, Romania
Din acest punct, jucătorul poate alege din meniu (Fig.1):
- Nouveau (modul de joc):
o Survie
Facile
Moyen
Difficile
o Campagne
Facile
Moyen
Difficile
- Comment jouer – instrucțiunile pentru a juca;
- Hall de la renommée – clasamentul jucătorilor din modul „Survie”, în funcție de nivelul la care
au ajuns, (Fig.3);
- Sortie – închiderea aplicației;
Dacă modul de joc ales este “Survie”, jucătorul este redirecționat la fereastra specifică acestui
mod, (Fig.6).
Fig.6: Captură de ecran cu fereastra de joc de la modul “Survie”.
Funcția care generează cuvintele pentru modul „Survie” este următoarea:
Se creează o variabilă de tipul Random;
Se declară variabila filereader care este folosită pentru a citi din fișier;
În funcție de nivelul de dificultate ales, se atribuie variabilei filereader un fișier;
Variabila lineNumber memorează numărul de linii conținut de fișier;
Declarăm variabila line și o inițializăm cu un număr generat random, din intervalul [1,lineNumber];
Declarăm variabla text în care o să memorăm, cu ajutorul instrucțiunii for, cuvântul
memorat în fișier pe linia line;
filereader.Close()– se închide fișierul.
88
Conferinţa Naţională de Informatică pentru Elevi, PCID 2016
2 Aprilie 2016, Sibiu, Romania
În cazul în care modul de joc ales este “Campagne”, cuvintele sunt generate prin intermediul
constructorului supraîncărcat al primei ferestre. După ce o categorie este aleasă din listă de mai sus
și jucătorul apasă pe buttonul "Battre", (Fig.4) se execută urmatoarea secvență de instrucțiuni:
this.Hide(); // fereastra curentă devine invizibilă
Form1 window; // declarăm o variabilă de timp Form1
window = new Form1(list_categories.SelectedItem.ToString()); /* window
este instanțiat și se execută constructorul funcției care, în acest caz,
este cel supraîncărcat; argumentul reprezintă itemul selectat din lista
converită la tipul string; acesta este folosit în generarea cuvintelor din
categoria respecitivă de cuvinte. */
Fig.7: Captură de ecran cu tastatura jocului.
Dacă un buton este apăsat (Fig.7), acesta este „action listenerul” care se execută (pentru butonul 'a'):
În prima linie de cod din corpul funcției este declarată o variabilă de tip char numită
keyPressed și este inițializată cu 'a'.
Funcția check returnează valoarea true dacă caracterul keyPressed se regasește în
cuvântul generat, altfel returnează false.
Dacă expresia check(keyPressed) returnează true atunci se execută funcția
setCharinLabel(keyPressed) care pune în label-ul cuvântului toate literele 'a', în acest
caz.
În caz că check(keyPressed) returneză false, în funcția se va incrementa variabila
mistakes (de tip int) și se va schimba imaginea omulețului spânzurat.
În caz că mistakes == 6: else if(mistakes == 6) {
/* se schimbă imaginea omulețului */
pictureHangman.Image = Properties.Resources.h6;
/* se actulizează label-ul cu viețile */
l_lifes.Text = "La vie:" + (6 - mistakes).ToString();
MessageBox.Show("Jeu termine!"); // notifică jucătorul că a pierdut
if(playSurvival){ // dacă este în modul “Survie”
this.Hide(); // dispare fereastra curentă
Form3 window; /*declarăm un obiect de tipul Form3 (este formul
în care ucătorului i se cere să își
introducă numele și apoi să dea submit */
window =new Form3(survival_wave.ToString()); /* se folosește un
constructor supraîncărcat ca să transmită
variabila survival_wave */
window.ShowDialog(); // apare fereastra window
}
else{
this.Hide();
playCampaign = false;
playSurvival = false;
Form1 window;
window = new Form1();// redirecționează jucatorul la main menu
window.ShowDialog();
Form1.campaign_wave = 1;
89
Conferinţa Naţională de Informatică pentru Elevi, PCID 2016
2 Aprilie 2016, Sibiu, Romania
}
playCampaign = false;
playSurvival = false;
return false;
}
}
3 Concluzie
În cocnluzie, proiectul a constituit o provocare interesantă, care ne-a determinat să ne
dezvoltăm abilitățile de programare și de lucru în echipă, pe de o parte, și să ne extindem bagajul de
cuvinte în limba franceză, pe de alta. Am întâmpinat dificultăți în codarea diacriticelor limbii
franceze, pe care le-am rezolvat supraîncărcând constructorul obiectului folosit pentru citirea din
fișier. Interfața grafică poate fi îmbunățățită. De asemenea, imaginea omulețului spânzurat, creată în
Photoshop, poate fi cizelată. Categoriile de cuvinte pot fi și mai mult diversificate, iar conținutul
fișierului de cuvinte corespunzător fiecăreia poate fi îmbogățit.
4 Bibliografie
[1] http://stackoverflow.com
[2] Documentație Microsoft – https://msdn.microsoft.com/en-us/library/67ef8sbd.asp
Radu Abigail Simona
Colegiul Național Octavian Goga, Sibiu
Profilul: matematică-informatică, intensiv
informatică
Sibiu, România
E-mail: [email protected]
Antinie Radu
Colegiul Național Octavian Goga, Sibiu
Profilul: matematică-informatică, intensiv
informatică
Sibiu, România
E-mail: [email protected]
Prof. Demco Andreea
Colegiul Național „Octavian Goga”, Sibiu
Specializarea: informatică
Sibiu, România
E-mail: [email protected]
Prof. Sibișan Mădălina
Colegiul Național „Octavian Goga”, Sibiu
Specializarea: informatică
Sibiu, România
E-mail: [email protected]
90
Conferinţa naţională de informatică pentru elevi
Programare, Comunicare, Imaginaţie, Design
PCID-2016, 2 Aprilie 2016
Sibiu, Romania
Le Bourreau
Felix Ștefan Solyom, Laurențiu Gyorgy
Profesori coordonatori: Ramona Humeniuc, Sofica Rusu
Rezumat: “Le Bourreau” sau “Călăul” este un joc educațional de tip spânzurătoare care pune la
încercare atât cunoștințele de cultură generală ale jucătorului în trei limbi distincte (română, engleză și
franceză) cât și abilitățile de “cuceritor” ale acestuia beneficiind de un ajutor suplimentar pus la
dispoziție prin indicii. Programul este scris în C#, iar partea grafică a fost concepută în Adobe
Photoshop CS3, oferind o interfaţă accesibilă şi originală. Datele de logare, progresul cât şi cele 8
categorii de cuvinte (suplimentate periodic) sunt salvate într-o bază de date MySql.
Abstract: “Le Bourreau” or “The Executioner” is a educational hangman-type game that challenges
both the knowledge of the player in 3 different languages (romanian, english, french) and its
conqueror skills benefiting from additional support provided by hints. The program is written in C#
and the graphical part was created with Adobe Photoshop CS3, offering an accessible and original
interface. The login information, the progress and the 8 categories which contain the
words(supplemented periodically) are saved in a database MySql.
1 Introducere
„Le Bourreau” este un joc interactiv de tip spânzurătoarea, oferit în trei limbi diferite
(română, engleză, franceză), care atrage prin multitudinea de opțiuni și categorii puse la dispoziția
utilizatorului (a jucătorului) detașându-se de modelul clasic al jocurilor de acest tip.
Jocul este structurat pe mai multe meniuri:
a. Meniul principal, care oferă posibilitatea de a-ți alege limba din care se vor selecta
cuvintele, de a porni sau opri sunetul și de asemenea de a accesa celelalte meniuri.
b. Meniul de login, care permite înregistrarea sau logarea cu o adresă de email și o parolă
validă, cu scopul de a urmări și salva progresul din joc (fig.1).
c. Meniul de ajutor, unde se găsesc atât informații utile în legătură cu jocul cât și o scurtă
istorie a acestuia.
d. Meniul “Game Hub”, acest meniu pune la dispoziție detalii legate de progresul jucătorului
și cele 8 categorii de cuvinte (fig.2):
- Alimente (Food/Nourriture)
- Animale (Animals/Animaux)
- Anatomie (Anatomy/Anatomie)
- Haine și obiecte personale (Clothing /Vêtements)
- Muzică sau instrumente muzicale (Music/Musique)
- Plante (Plants/Plantes)
- Profesii (Professions/Les Professions)
- Sporturi (Sports/Les Sports)
e. Meniul “Play”, Jocul efectiv.
91
Conferinţa Naţională de Informatică pentru Elevi, PCID 2016
2 Aprilie 2016, Sibiu, Romania
Fig.1: Logarea în aplicație (limba franceză)
Fig.2: Interfața cu meniuri în limba franceză (old)
2 In-game
Asemănător jocurilor de acest gen, utilizatorul trebuie să introducă litere, care se găsesc pe
tastatura vizuală din aplicaţie, cu scopul de a ghici cuvântul generat random în funcţie de categoria
aleasă de utilizator . În cazul în care acesta introduce caractere greșite, care nu se găsesc în cuvânt,
se va genera un segment din hangman (caracterul spânzurat). Jocul se încheie dacă sunt introduse 6
caractere greşite (fig. 4) sau cuvântul a fost ghicit (fig. 3). Pentru fiecare cuvânt corect utilizatorul
primeşte un nivel în plus, iar pentru fiecare cuvânt greşit va pierde un nivel. Când se trece la nivelul
4, după dorinţa jucătorului, se pot transforma 4 nivele într-un ajutor (hint).
Dacă utilizatorul dispune de hinturi, acestea pot fi folosite în joc pentru a adăuga, după caz,
una sau mai multe litere din cuvânt.
92
Conferinţa Naţională de Informatică pentru Elevi, PCID 2016
2 Aprilie 2016, Sibiu, Romania
Din cele 8 categorii, 7 sunt blocate iniţial urmând ca utilizatorul să le deblocheze completând
corect 5 cuvinte din cea precedentă. Spre exemplu, pentru a activa categoria “Animale” utilizatorul
trebuie să completeze corect 5 cuvinte din categoria “Alimente”.
Atât cuvintele ce au fost ghicite cât și cele pe care utilizatorul nu a reușit să le ghicească vor fi
automat căutate pe un motor de cautare (Google mai exact) pentru a-i oferi jucătorului informații
despre cuvântul pe care l-a primit. Răspunsurile (explicațiile) sunt alese de pe mai multe site-uri ca
de exemplu Wikipedia, Dexonline, Dictionary, etc., evident dacă există o conexiune la internet.
Fig. 3: Lost
Fig.4: Win
3 Detalii și specificaţii tehnice
Jocul a fost conceput în Microsoft Visual Studio Community 2015, folosind limbajul de
programare C# [1]. Partea grafică a programului a fost realizată în Adobe Photoshop CS3, oferind
jocului un aspect total original, iar pasajele sonore au fost concepute special pentru acest joc de
către Sto Adrian [2].
93
Conferinţa Naţională de Informatică pentru Elevi, PCID 2016
2 Aprilie 2016, Sibiu, Romania
Aplicația se folosește de o bază de date MySql atât pentru stocarea cuvintelor destinate
ghicirii, cât și pentru stocarea datelor de logare și a progresul in-game a utilizatorului. Parola
utilizatorului este salvată in baza de date ca SHA1, cu precizarea că in viitor se va schimba cu o
encripție Rijndael de 256 biți, asemănător encripților folosite de bănci, pentru a spori securitatea.
// Generate Random Word
private int RandomGen()
{
try
{
Random rnd = new Random();
MySqlConnection con = new MySqlConnection(sqlCon);
MySqlCommand cmd = con.CreateCommand();
cmd.CommandText = "SELECT MAX(id) FROM " + cat;
int RndNr = rnd.Next(1, Convert.ToInt32(cmd.ExecuteScalar()));
cmd.CommandText = "SELECT word FORM levels "
+ "WHERE user = @uid AND cat = @cat";
cmd.Parameters.AddWithValue("@uid", Program.MainForm.uid);
cmd.Parameters.AddWithValue("@cat", cat);
bool ok = true;
using(MySqlDataReader Reader = cmd.ExecuteReader())
{
While(Reader.Read() == true)
ok = false;
Reader.Close();
}
if(!ok) { RandomGen(); return 0; }
else return RndNr;
}
catch return 0;
}
Cuvintele sunt alese din baza de date folosind un algoritm de randomize, dar care verifică, de
asemenea, dacă cuvântul a fost deja folosit. Totodată, progresul utilizatorului este salvat și în cazul
în care acesta părăsește forțat jocul (ALT + F4) sau apasă abandon, deoarece cuvântul respectiv va
rămâne pană este ori completat corect ori greșit.
Pentru o mai bună funcționare a jocului fiecare meniu al jocului a fost conceput ca un user-
control și nu prin metoda clasică de creare și anume prin crearea de panel-uri. În teorie, această
metodă de creare, unește mai multe „programe” într-unul singur. Odată ce un meniu este închis,
acestuia i se va da dispose, ștergându-l din memorie si ușurând practic memoria programului, iar
când este reaccesat acesta va fi recreat.
Personajul spânzurat este creat de către noi dar inspirat din serialul de comedie “SouthPark”,
creat de Commedy Central [3].
4 Concluzie
În concluzie, Le Bourreau este un joc controversat folosindu-se atât de caracteristicile tipice
unui joc de acest gen dar folosind tehnologii noi pentru a îmbunătății calitatea jocului. Acesta poate
fi folosit fără cea mai mică problemă ca și material didactic, fiind oferit în limba maternă și cele
două limbi de circulație internațională (franceza și engleza) care se studiază în școli, folosind o
subtilă nuanță de umor și având o diversitate de categorii și cuvinte care provoacă jucătorul atât
lingvistic cât și cultural.
94
Conferinţa Naţională de Informatică pentru Elevi, PCID 2016
2 Aprilie 2016, Sibiu, Romania
5 Bibliografie
[1] Documentație Microsoft Visual Studio Community 2015 - https://www.visualstudio.com/
[2] Pagina oficială Adrian Sto - https://soundcloud.com/stoofficial/
[3] Pagina oficială SouthPark - http://southpark.cc.com/
Felix Ștefan Solyom
Colegiul Național ”Horea,
Cloșca și Crișan”
Matematică Informatică
Intensiv Informatică cls. XI
Alba Iulia, Alba
E-mail: [email protected]
Laurențiu Gyorgy
Colegiul Național ”Horea,
Cloșca și Crișan”
Matematică Informatică
Intensiv Informatică cls. XI
Alba Iulia, Alba
E-mail: [email protected]
Prof. Ramona Humeniuc
Colegiul Național ”Horea,
Cloșca și Crișan”
Informatică
E-mail: [email protected]
Prof. Sofica Rusu
Colegiul Național ”Horea,
Cloșca și Crișan”
Franceză
E-mail: [email protected]
95
Conferinţa naţională de informatică pentru elevi
Programare, Comunicare, Imaginaţie, Design
PCID-2016, 2 Aprilie 2016
Sibiu, Romania
Bluetooth Rover
Stoican Radu
Profesor coordonator: Georgescu Oana
Rezumat: Proiectul constă într-un rover controlat prin intermediul Bluetooth-ului. Pentru a comunica cu
robotul poate fi folosit orice dispozitiv care suportă Bluetooth, spre exemplu calculatoare, smartphone-
uri sau tablete care funcţionează pe baza sistemului de operare Android. Piesa de bază a proiectului este
microcontroller-ul Arduino Uno, iar robotul este programat în software-ul Arduino, limbajul de
programare fiind C++. De asemenea, robotul are în dotare motoare, senzori, LED-uri şi poate utiliza
carduri SD şi microSD.
Abstract: The project consists in a Bluetooth controlled rover. Any Bluetooth device can be used to
communicate with the robot, for example computers, smartphones or tablets that have Android as an
operating system. The main part of the project is the Arduino Uno microcontroller and the robot is
programmed in the Arduino software with C++ language. The robot also has other parts as motors,
sensors, LEDs and the ability to use SD and microSD cards.
1 Introducere
Proiectul este un robot construit sub forma unui rover, vehicul robotic ce poate traversa
diferite obstacole şi plane neregulate prin intermediul şenilelor.
2 Descrierea aplicaţiei
Roverul funcţionează pe baza microcontrolerului Arduino Uno conectat la cele două motoare
alimentate de 4 baterii AA. Robotul are în dotare un modul Bluetooth care asigură comunicarea şi
controlarea microprocesorului de la distanţă. De asemenea, acesta dispune şi de un sensor ultrasonic
care poate fi folosit pentru determinarea poziţiei şi distanţei unui obiect faţă de rover. Astfel,
robotul poate fi folosit pentru a executa măsurători rapide şi exacte în spaţii de diferite mărimi sau
în zone inaccesibile omului. Roverul poate, de asemenea, să stocheze valorile măsurătorilor pe un
card SD sau microSD care poate fi ataşat robotului. Proiectul poate fi vizualizat în Fig. 1 şi Fig. 2.
Fig. 1: Bluetooth Rover Fig. 2: Bluetooth Rover
96
Conferinţa Naţională de Informatică pentru Elevi, PCID 2016
2 Aprilie 2016, Sibiu, Romania
Rolul proiectului este de a executa măsurători exacte şi de a salva rezultatele pe cardul SD sau
microSD care este ataşat robotului. Deplasarea robotului poate fi controlată uşor de la distanţă de
către utilizator.
De asemenea, proiectul poate primi diferite comenzi prin intermediul caracterelor trimise prin
Bluetooth, robotul având diferite funcţii.
O primă funcţie ce poate fi folosită este măsurarea distanţei până la obiectul din faţa robotului
prin simpla apăsare a tastei „i‟. Roverul confirmă măsurarea prin aprinderea unui LED pentru o
scurtă durată de timp, salvând valoarea măsurată în centimetri pe cardul de memorie al robotului.
O altă funcţie de care beneficiază roverul este măsurarea continuă şi automată a distanţei o
dată la jumătate de secundă. Această funcţie poate fi activată prin apăsarea tastei „k‟, funcţia fiind
activată indiferent de starea în care se află robotul – de mişcare sau staţionară. Funcţia va rămâne
activată indiferent de schimbarea stării de mişcare în care se află roverul şi schimbarea acesteia,
funcţionarea funcţiei fiind semnalată prin aprinderea unui LED la fiecare măsurătoare. Pentru a
dezactiva funcţia, tasta „k‟ trebuie apăsată pentru a doua oară. Măsurătorile efectuate sunt realizate
prin intermediul unui senzor ultrasonic.
De asemenea, când robotul este conectat la un computer prin intermediul cablului USB poate
fi utilizată tasta „r‟ pentru afişarea datelor salvate de pe cardul de memorie al robotului, cu condiţia
ca şi calculatorul să aibă instalată o aplicaţie prin care se poate realiza comunicarea cu robotul, cum
ar fi software-ul Arduino.
Proiectul constă într-un robot format din mai multe piese şi un program care determină
comportamentul robotului, acesta fiind scris în software-ul Arduino, limbaj C++. Proiectul este
alcătuit din următoarele piese:
- Microcontrolerul Arduino Uno (Fig. 3) – este cel mai popular microcontroler al firmei
Arduino. Acesta este cea mai importantă piesă a proiectului, constituind “creierul”
robotului. Prin intermediul încărcării programului cu ajutorul unui cablu USB
microprocesorul foloşeste instrucţiunile din program pentru a comunica cu utilizatorul,
comunicarea fiind posibilă în ambele sensuri. Arduino Uno este folosit şi pentru
“gândirea” robotului, acesta fiind capabil să ia decizii de unul singur în funcţie de
condiţiile în care se află, dar şi pentru controlarea celorlalte componente electronice ale
proiectului.
Fig. 3: Arduino Uno
- Motor controller – reprezintă elementul care poate acţiona motoarele care sunt folosite
pentru deplasarea robotului, acestea necesitând o tensiune mai mare de 5V, tensiunea
maximă ce poate fi oferită de microprocesorul Arduino Uno. Motor controller-ul nu
analizează instrucţiuni, ci le primeşte de la microprocesor, acţionând în funcţie de
comanda transmisă. Cele două elemente sunt, de obicei, componente separate, însă,
pentru o mai uşoară utilizare şi construire a proiectului, acestea sunt îmbinate sub forma
unei singure componente.
97
Conferinţa Naţională de Informatică pentru Elevi, PCID 2016
2 Aprilie 2016, Sibiu, Romania
- Motoare – robotul foloşeste motoare care produc mişcare circulară, funcţionând pe bază
de curent direct. Acestea acţionează angrenajele care pun şenilele în mişcare şi astfel
întregul robot se deplasează. Roverul se poate deplasa în orice direcţie, schimbând
direcţia prin încetinirea sau oprirea şenilei din partea opusă a direcţiei dorite.
- Modul Bluetooth (Fig. 4) – asigură abilitatea robotului de a comunica şi a primi
instrucţiuni din partea utilizatorului. Acesta poate să fie pus în legătură cu orice
dispozitiv care poate efectua o comunicare Bluetooth. Astfel, orice funcţie a robotului
poate fi accesată prin intermediul controlului de la distanţă si prin folosirea
dispozitivelor portabile, spre exemplu smartphone-urile care au ca sistem de operare
Android, cu condiţia ca acestea să aibă o aplicaţie ce asigură comunicarea cu
microprocesorul Arduino Uno.
Fig. 4: Modul Bluetooth
- Senzor ultrasonic (Fig. 5) – este utilizat de către robot pentru a determina dacă există
sau nu un obiect în apropierea sa şi pentru a calcula distanţa până la acesta. Senzorul
reprezintă sistemul de “vedere” al robotului şi funcţionează pe baza unor ultrasunete cu
frecvenţă de 40kHz. Astfel, senzorul trimite un semnal sonor şi măsoară timpul de la
momentul transmiterii până la recepţionarea ecoului care apare la întâlnirea unui
obstacol. După această operaţiune, senzorul returnează valoarea obţinută, în
microsecunde, care poate fi transformată în distanţă folosind formula matematică 1.1.
distanta = (durata / 2) / 29,1 (1.1)
Formula foloseşte viteza sunetului care este de 340 m/s sau de 29,1 microsecunde pe
centimetru. Rezutatul astfel obţinut este împărţit la 2 deoarece semnalul sonor este trimis până la
obiect, iar ecoul său înapoi către senzor, rezultând 2 drumuri. Senzorul poate calcula distanţe de
minim 2cm şi maxim 4m.
Fig. 5: Senzor ultrasonic
98
Conferinţa Naţională de Informatică pentru Elevi, PCID 2016
2 Aprilie 2016, Sibiu, Romania
- Shield-uri – acestea reprezintă extensii ce pot fi adăugate unui microprocesor pentru a
beneficia de noi funcţii. Există numeroase tipuri de astfel de shiled-uri, precum:
Ethernet (care asigură posibilitatea de conectare a proiectului la Internet), ecran LCD
(care poate fi folosit pentru afişarea diferitor valori), camera (care face posibilă
adăugarea şi folosirea unei camere) etc. Cel mai mare avantaj al shield-urilor este
posibilitatea acestora de a fi suprapuse, putând fi utilizate mai multe shield-uri pentru
un microprocesor, cu condiţia de a nu exista pini care trebuie utilizaţi de ambele
shield-uri. Proiectul prezentat foloseşte două shield-uri: unul dintre acestea oferă
posibilitatea conectării mai multor senzori în diferite modalităţi, care nu ar fi posibile
doar prin utilizarea microprocesorului (Fig. 6). Al doilea shield folosit, suprapus peste
primul, oferă posibilitatea adăugării unui card SD sau microSD pe care pot fi stocate
date.
Fig. 6: Shield pentru senzori Fig. 7: Shield pentru card SD
Programarea robotului este realizată în software-ul Arduino, limbajul C++. Programul actual
foloseşte următorii pini ai microprocesorului: 2,3 sunt folosiţi pentru senzorul ultrasonic, 9 pentru
LED, 4,10,11,12 şi 13 sunt folosiţi pentru shield-ul SD, iar de la 5 la 8 pentru cele două motoare.
În continuare va fi descris programul utilizat şi cele mai importante secvenţe din acesta.
În secţiunea void setup(void) se atribuie fiecărui pin valoarea de INPUT sau de OUTPUT,
în funcţie de rolul lor. Astfel OUTPUT înseamnă că prin pin-ul ales vor fi trimise instrucţiuni de la
microprocesor la componenta conectată, un exemplu fiind motoarele care funcţionează în funcţie de
informaţiile primite, iar prin INPUT se transmit date către microprocesor, care urmează să le
folosească în funcţie de instrucţiuni, un exemplu fiind citirea distanţei prin pinul atribuit senzorului
ultrasonic.
Partea principală a programului se numeşte void loop(void) şi reprezintă instrucţiunile ce
se vor repeta atât timp cât robotul este în funcţiune. Variabila “val2” are rolul de a permite primirea
comenzilor de măsurare în timpul mişcării, când variabila “val” este deja folosită.
În secvenţa următoare i se atribuie variabilei “val” tasta apăsată de către utilizator dacă “val2”
a primit deja o valoare dintre „i‟ şi „k‟.
if (val2 == 'i' || val2 == 'k' || val2 == '\0')
{
while (Serial.available() < 1) {}
val = Serial.read();
}
else
val = val2;
Prin utilizarea instrucţiunii switch (val) se apelează un subprogram în funcţie de valoarea
primită. Aceste subprograme pot fi unul dintre cele 5 specifice deplasării robotului, inclusiv funcţia
99
Conferinţa Naţională de Informatică pentru Elevi, PCID 2016
2 Aprilie 2016, Sibiu, Romania
void stop(), care are rolul de a opri rover-ul din mişcare, sau una dintre cele două funcţii de
măsurare.
În secvenţa următoare este prezentată apelarea subprogramului de deplasare înainte: case 'w':
forward (leftspeed, rightspeed);
if (!Serial.available())
{
if (k > 0)
pingtime();
}
else
{
val2 = Serial.read();
if (val2 == 'i')
SDwrite();
if (val2 == 'k')
k = (-1) * k;
}
break;
După apelarea subprogramului “forward” se verifică dacă sunt necesare efectuarea
măsurătorilor, instrucţiunile pentru executarea acestora putând fi primite şi în timpul deplasării fără
a influenţa mişcarea robotului datorită utilizării variabilei “val2”. Secvenţa de program următoare
este accesată în cazul primirii valorii „k‟ şi efectuează măsurători la fiecare jumătate de secundă.
case 'k':
k = (-1) * k;
if (k > 0)
pingtime();
break;
Variabila „k‟ este folosită pentru a identifica starea în care se află robotul, adică dacă trebuie
sau nu să înceapă sau să se termine ciclul de măsurători, astfel valoarea acesteia este la început -1,
iar la apăsarea tastei „k‟ aceasta devine 1, începând măsurătorile.
Subprogramul “forward”, care primeşte parametrii a şi b, care au rolul de a transmite viteza
folosită, este creat pentru a transmite motoarelor viteza şi direcţia necesare pentru deplasarea
înainte. La fel funcţionează şi subprogramele “reverse”, “left” şi “right”, în funcţie de direcţia
aleasă. Functia “stop” fixează ambele motoare pe viteza nulă (0).
În următoarea secvenţă este prezentat subprogramul “ping” care are rolul de a măsura şi
returna distanţa.
int ping ()
{
long duration, distance;
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = (duration / 2) / 29.1;
digitalWrite(LED, HIGH);
delay(pingdistance);
digitalWrite(LED, LOW);
return distance;
}
100
Conferinţa Naţională de Informatică pentru Elevi, PCID 2016
2 Aprilie 2016, Sibiu, Romania
Variabila “duration” are rolul de a măsura timpul necesar semnalului pentru a se întoarce la
senzor, acesta fiind transformat în distanţă în variabila “distance”, care urmează a fi returnată. Prin
secvenţele digitalWrite(trigPin, LOW); şi digitalWrite(trigPin, HIGH); se trimit nişte
semnale iniţiale care au rolul de a asigura funcţionarea normală a senzorului ultrasonic. Măsurarea
se face prin instrucţiunea duration = pulseIn(echoPin, HIGH); constanta “echoPin” are rolul
de a primi ecoul ultrasunetului.
Funcţia “pingtime” are rolul de a apela funcţia “ping” la fiecare jumătate de secundă. Cât timp
microprocesorul nu primeşte nici o valoare de la utilizator, sau primeşte valori diferite de „k‟,
funcţia va continua să se reapeleze la fiecare jumătate de secundă.
int pingtime ()
{
SDwrite();
if (!Serial.available())
{
delay(pingdistance);
pingtime();
}
Scrierea şi citirea în cardul SD sunt efectuate în funcţiile “SDwrite” şi “SDread”.
3 Concluzii şi perspective
În concluzie, proiectul are diferite aplicaţii practice care au fost prezentate de-a lungul
lucrării.
Există numeroase dezvoltări viitoare posibile precum utilizarea unei camere care transmite
imagini live sau renunţarea la şenile pentru roţi, astfel câştigând viteză în schimbul abilităţii de a
traversa zone accidentate şi obstacole.
Există şi alte proiecte similare care sunt folosite în scopuri asemănătoare. Un exemplu ar fi cel
prezentat la adresa [5]. Acesta nu prezintă posibilitatea de a se deplasa, însă afişează rezultatele
măsurătorilor în timp real prin intermediul ecranului LSD.
Un proiect de viitor mai complex, care poate evolua din acesta pentru a avea aplicaţii practice,
este un robot care poate filma şi transmite imagini în timp real prin intermediul unei camere
wireless, putând fi folosit pentru supraveghere, răspunderea la diferite dezastre şi situaţii de urgenţă,
spre exemplu scanarea ruinelor în urma unui dezastru natural etc.
4 Bibliografie [1] https://www.arduino.cc/
[2] https://en.wikipedia.org/wiki/Main_Page
[3] http://www.robotshop.com/blog/en/robots/gorobotics/tutorials/how-to-make-a-robot
[4] http://www.instructables.com/id/Arduino-LCD-Project-for-Measuring-Distance/
[5] http://www.instructables.com/id/Arduino-LCD-Project-for-Measuring-Distance/.
[6] KARVINEN, Kimmo, KARVINEN, Tero, “Make: Arduino Bots and Gadgets”, Ed. O‟Reilly Media,
2011
[7] BANZI, Massimo, “Getting Started with Arduino”, Make:Books, 2011
Stoican Radu
Colegiul National de Informatica “Grigore Moisil”
Specializarea Matematică Informatică, intensiv
Informatică
Brasov, Romania
E-mail: [email protected]
prof. Georgescu Oana
Colegiul Naţional de Informatică „Gr. Moisil”
Specializarea Matematică Informatică, intensiv
Informatică
Brasov, Romania
E-mail: [email protected]
101
Lista autorilor:
Albu Ștefan Sebastian Colegiul Național „Gheorghe Lazăr”
Sibiu, România
E-mail: [email protected]
Antinie Radu Colegiul Național „Octavian Goga”
Matematică-Informatică, Intensiv Informatică
Sibiu, România
E-mail: [email protected]
Bakó Amalia Alexandra
Colegiul Național „Horea, Cloșca și Crișan”
Matematică-Informatică, Intensiv Informatică
Alba Iulia, România
E-mail: [email protected]
Alin Andrei Colegiul Național de Informatică „Grigore Moisil”
Matematică-Informatică, Intensiv Informatică
Brasov, Romania
E-mail: [email protected]
Bîrsan Iulia Maria Colegiul Naţional „Octavian Goga”
Matematică-Informatică, Intensiv Informatică
Sibiu, România
E-mail: [email protected]
Crăciun Alexandru-Mihail Colegiul Național ,,Andrei Șaguna''
Matematică Informatică
Brașov, România
E-mail: [email protected]
Dragomir Andrei Colegiul Național „Samuel von Brukenthal”
Matematică-Informatică, Intensiv Informatică
Sibiu, Romania
E-mail: [email protected]
Georgescu Bogdan Colegiul Național „Horea, Cloșca și Crișan”
Matematică-Informatică, Intensiv Informatică
Alba Iulia, Alba, România
E-mail: [email protected]
Grozea Ioan Colegiul Național „Samuel von Brukenthal”
Matematică-Informatică, Intensiv Informatică
Sibiu, Romania
E-mail: [email protected]
Gyorgy Laurențiu Colegiul Național „Horea, Cloșca și Crișan”
Matematică-Informatică, Intensiv Informatică
Alba Iulia, Alba
E-mail: [email protected]
102
Handolescu Radu
Colegiul Național „Radu Negru”
Matematică-Informatică, Intensiv Engleză
Făgăraș, România
E-mail: [email protected]
Holerga Flavius Liceul Teoretic „Axente Sever”
Matematică-Informatică
Mediaș, România
E-mail: [email protected]
Marinescu Marius Daniel Colegiul Național B. P. Hașdeu
Aplicații software pentru dispozitive mobile
Buzău, România
E-mail: [email protected]
Mărginean Maria Alexandra Colegiul Național „Horea, Cloșca și Crișan”
Matematică-Informatică, Intensiv Informatică
Alba Iulia, România
E-mail: [email protected]
Milik Andrei Liceul Teoretic „Axente Sever”
Matematică-Informatică
Mediaș, România
E-mail: [email protected]
Moga Inocențiu Liceul Teoretic „Axente Sever”
Matematică-Informatică
Mediaș, România
E-mail: [email protected]
Motoc Alexandru-Nicolae Colegiul Național „Radu Negru”
Matematică-Informatică, Intensiv Engleză
Făgăraș, România
E-mail: [email protected]
Oltean Alexandru Colegiul Naţional „Gheorghe Lazăr”
Matematică-Informatică, Intensiv Informatică
Sibiu, România
E-mail: [email protected]
Petrean Ciprian Colegiul Național „Horea, Cloșca și Crișan”
Matematică-Informatică, Intensiv Informatică
Alba Iulia, Alba, România
E-mail: [email protected]
Popa Cătălin Liceul Tehnologic „Școala Națională de Gaz”
Matematică-Informatică
Mediaș, România
E-mail: [email protected]
103
Prăvariu Alin Colegiul Naţional „Gheorghe Lazăr”
Matematică-Informatică, Intensiv Informatică
Sibiu, România
E-mail: [email protected]
Preda Mihail Irinel Colegiul Național B. P. Hașdeu
Aplicații software pentru dispozitive mobile
Buzău, România
E-mail: [email protected]
Radu Abigail Simona Colegiul Național „Octavian Goga”
Matematică-Informatică, Intensiv Informatică
Sibiu, România
E-mail: [email protected]
Roatiș Răzvan Colegiul Național ,,Andrei Șaguna''
Matematică-Informatică
Brașov, România
E-mail: [email protected]
Solyom Felix Ștefan Colegiul Național „Horea, Cloșca și Crișan”
Matematică-Informatică , Intensiv Informatică
Alba Iulia, Alba
E-mail: [email protected]
Stoican Radu Colegiul National de Informatica „Grigore Moisil”
Matematică-Informatică, Intensiv Informatică
Brasov, Romania
E-mail: [email protected]
Topor Mihai Colegiul Național „Gheorghe Lazăr”
Sibiu, România
E-mail: [email protected]
104
Lista profesorilor coordonatori:
Cojocaru Gabriel Colegiul Național „Gheorghe Lazăr”, Sibiu
E-mail: [email protected]
Demco Andreea Colegiul Naţional „Octavian Goga”, Sibiu
E-mail: [email protected]
Florea Delilah Colegiul Național „Samuel von Brukenthal”, Sibiu
E-mail: [email protected]
Florea Gabriela Liceul Teoretic „Axente Sever”, Mediaș
E-mail: [email protected]
Georgescu Oana Colegiul Naţional de Informatică „Gr. Moisil”, Brașov
E-mail: [email protected]
Humeniuc Ramona Colegiul Național „Horea, Cloșca și Crișan”, Alba Iulia
E-mail: [email protected]
Ignat Cornelia Liceul Tehnologic „Școala Națională de Gaz”, Mediaș
E-mail: [email protected]
Martin Elena Liliana Colegiul Național B. P. Hașdeu, Buzău
E-mail: [email protected]
Modrișan Adrian Colegiul Național ,,Andrei Șaguna'', Brașov
E-mail: [email protected]
Popescu Carmen Colegiul Naţional „Gheorghe Lazăr”, Sibiu
E-mail: [email protected]
Preda Georgeta Colegiul Național „Gheorghe Lazăr”, Sibiu
E-mail: [email protected]
Rusu Sofica Colegiul Național „Horea, Cloșca și Crișan”, Alba Iulia
E-mail: [email protected]
Sibișan Mădălina Colegiul Național „Octavian Goga”, Sibiu
E-mail: [email protected]
Steavu Nicolae Colegiul Național „Doamna Stanca”, Făgăraș
E-mail: [email protected]
Steavu Cristina-Elena Colegiul „Aurel Vijoli”, Făgăraș
E-mail: [email protected]
105