+ All Categories
Home > Documents > PCID 2016

PCID 2016

Date post: 31-Dec-2016
Category:
Upload: trinhnhu
View: 227 times
Download: 3 times
Share this document with a friend
107
Transcript
Page 1: PCID 2016
Page 2: PCID 2016

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ă

Page 3: PCID 2016

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

Page 4: PCID 2016

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

Page 5: PCID 2016

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

Page 6: PCID 2016

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

Page 7: PCID 2016

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

Page 8: PCID 2016

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

Page 9: PCID 2016

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

Page 10: PCID 2016

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

Page 11: PCID 2016

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

Page 12: PCID 2016

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

Page 13: PCID 2016

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

Page 14: PCID 2016

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

Page 15: PCID 2016

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

Page 16: PCID 2016

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

Page 17: PCID 2016

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

Page 18: PCID 2016

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

Page 19: PCID 2016

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

Page 20: PCID 2016

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

Page 21: PCID 2016

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

Page 22: PCID 2016

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

Page 23: PCID 2016

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

Page 24: PCID 2016

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

Page 25: PCID 2016

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

Page 26: PCID 2016

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

Page 27: PCID 2016

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

Page 28: PCID 2016

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

Page 29: PCID 2016

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

Page 30: PCID 2016

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

Page 31: PCID 2016

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

Page 32: PCID 2016

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

Page 33: PCID 2016

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

Page 34: PCID 2016

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

Page 35: PCID 2016

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

Page 36: PCID 2016

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

Page 37: PCID 2016

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

Page 38: PCID 2016

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

Page 39: PCID 2016

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

Page 40: PCID 2016

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

Page 41: PCID 2016

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

Page 42: PCID 2016

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

Page 43: PCID 2016

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

Page 44: PCID 2016

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

Page 45: PCID 2016

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

Page 46: PCID 2016

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

Page 47: PCID 2016

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

Page 48: PCID 2016

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

Page 49: PCID 2016

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

Page 50: PCID 2016

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

Page 51: PCID 2016

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

Page 52: PCID 2016

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

Page 53: PCID 2016

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

Page 54: PCID 2016

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

Page 55: PCID 2016

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

Page 56: PCID 2016

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

Page 57: PCID 2016

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

Page 58: PCID 2016

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

Page 59: PCID 2016

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

Page 60: PCID 2016

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

[email protected]

Milik Andrei

L. T. ”Axente Sever”

Matematică informatică

Mediaș, România

[email protected]

Moga Inocențiu

L. T. ”Axente Sever”

Matematică informatică

Mediaș, România

[email protected]

Prof. Florea Gabriela

L. T. ”Axente Sever”

Matematică informatică

Mediaș, România

[email protected]

59

Page 61: PCID 2016

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

Page 62: PCID 2016

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

Page 63: PCID 2016

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

Page 64: PCID 2016

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

Page 65: PCID 2016

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

Page 66: PCID 2016

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

Page 67: PCID 2016

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

Page 68: PCID 2016

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

Page 69: PCID 2016

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

Page 70: PCID 2016

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

Page 71: PCID 2016

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

Page 72: PCID 2016

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

Page 73: PCID 2016

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

Page 74: PCID 2016

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

Page 75: PCID 2016

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

Page 76: PCID 2016

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

Page 77: PCID 2016

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

Page 78: PCID 2016

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

Page 79: PCID 2016

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

Page 80: PCID 2016

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

Page 81: PCID 2016

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

Page 82: PCID 2016

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

Page 83: PCID 2016

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

Page 84: PCID 2016

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

Page 85: PCID 2016

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

Page 86: PCID 2016

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

Page 87: PCID 2016

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

Page 88: PCID 2016

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

Page 89: PCID 2016

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

Page 90: PCID 2016

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

Page 91: PCID 2016

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

Page 92: PCID 2016

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

Page 93: PCID 2016

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

Page 94: PCID 2016

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

Page 95: PCID 2016

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

Page 96: PCID 2016

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

Page 97: PCID 2016

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

Page 98: PCID 2016

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

Page 99: PCID 2016

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

Page 100: PCID 2016

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

Page 101: PCID 2016

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

Page 102: PCID 2016

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

Page 103: PCID 2016

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

Page 104: PCID 2016

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

Page 105: PCID 2016

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

Page 106: PCID 2016

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

Page 107: PCID 2016

Sponsori (în ordine alfabetică):

106


Recommended