atestat informatica - buruiana catalin

45
COLEGIUL NATIONAL „MIHAIL KOGĂLNICEANU” GALAȚI ATESTAT LA INFORMATICĂ TURNURILE DIN HANOI JOC JAVA -ANDROID

Upload: haxroalliance

Post on 11-Nov-2015

128 views

Category:

Documents


6 download

DESCRIPTION

Lucrare pentru atestat

TRANSCRIPT

COLEGIUL NATIONAL MIHAIL KOGLNICEANUGALAI

ATESTAT LA INFORMATIC

TURNURILE DIN HANOIJOC JAVA -ANDROID

CoordonatorRealizatorProf. Muunoiu Novetschi Monica Iuliana Buruian Ctlin

Cuprins

Introducere3Android3Java4AndEngine5Algoritm Turnurile din Hanoi7Implementare - AndEngine10Setarea mediului de programare10Pornirea engine-ului10Importarea texturilor12Crearea scenei15Crearea turnurilor17Definirea inelelor18Logica jocului20Tratare excepie ncheierea jocului25Materializarea codului28Distribuirea printr-un magazin specializat28Distribuirea prin E-mail29Distribuirea printr-un website29Optarea pentru aplicaii din surse necunoscute30Bibliografie31

Introducere

Android

Sistemul de operare al unui telefon reprezint un ansamblu de programe, creat cu scopul de a mijloci relaia hardware-utilizator. Ele se caracterizeaz i se difereniaz prin vitez de lucru/procesare, stabilitate i suita de programe implicite. Android a fost lansat n noiembrie 2007 de ctre Google ( dei iniial a fost dezvoltat de ctre Android Inc., companie ulterior cumprat de ctre Google n 2005). Aceast lansare a generat o mic revoluie n lumea tehnologiei mobile datorit anumitor caracteristici unice. n primul rnd, Android este bazat pe Linux, sistem de operare arhicunoscut open source, cu o baz mare de utilizatori i dezvoltatori. n plus, faptul c Android OS utilizeaz aplicaii ce au c limbaj de baz Java, unul din cele mai folosite limbaje de programare, au fcut ca numrul dezvoltatorilor att experimentai ct i nceptori s creasc iminent. Multitasking-ul (posibilitatea de a rula mai multe aplicaii simultan) a reprezentat de asemenea un punct forte la momentul lansrii. Platform open soruce reprezint un punct forte din prisma dezvoltatorilor datorit anumitor avantaje printre care securitate, calitate, libertate sau flexibilitate. Astfel, platforma Google Play , iniial Android Market ( o pia de aplicaii pentru telefoanele n cauza) a strns un numr impresionat de peste 1.5 milioane aplicaii i un numr la fel de impresionant de utilizatori sau dezvoltatori. O alt caracteristic important a platformei Android este c orice companie interesat s produc propria versiune a unui telefon Android este binevenit i poate folosi platforma pentru dispozitivele lor. Rezultatul este un numr mare de societi concurente productoare de telefoane Android, care produc la diferite preuri. De fapt, telefoanele Android pot varia enorm n pre de la 99 la 600 de euro. Una dintre cele mai mari diferene ntre telefoanele Android i alte mobile este faptul c Android este un sistem de operare destul de complex, iar marea majoritate a OS tradiionale sunt destul de puin dezvoltate. Cu caracteristici complete, versatil, uor de upgradat i cu aplicaii noi, Android s-a dovedit a fi un succes din toate punctele de vedere.

Java

Java este un limbaj de programare orientat-obiect, puternic tipizat, conceput de ctre James Gosling la Sun Microsystems (acum filial Oracle) la nceputul anilor 90, fiind lansat n 1995. Cele mai multe aplicaii distribuite sunt scrise n Java, iar noile evoluii tehnologice permit utilizarea sa i pe dispozitive mobile gen telefon, agenda electronic, palmtop etc. n felul acesta se creeaz o platform unic, la nivelul programatorului, deasupra unui mediu eterogen extrem de diversificat. Acesta este utilizat n prezent cu succes i pentru programarea aplicaiilor destinate intranet-urilor.Limbajul mprumut o mare parte din sintax de la C i C++, dar are un model al obiectelor mai simplu i prezint mai puine faciliti de nivel jos. Un program Java compilat, corect scris, poate fi rulat fr modificri pe orice platform care e instalat o main virtual Java (englez Java Virtual Machine, prescurtat JVM). Acest nivel de portabilitate (inexistent pentru limbaje mai vechi cum ar fi C) este posibil deoarece sursele Java sunt compilate ntr-un format standard numit cod de octei (englez byte-code) care este intermediar ntre codul main (dependent de tipul calculatorului) i codul surs.Maina virtual Java este mediul n care se execut programele Java. n prezent, exist mai muli furnizori de JVM, printre care Oracle, IBM, Bea, FSF. n 2006, Sun a anunat c face disponibil varianta sa de JVM ca open-source.Principalele caracteristici care au transformat intr-un interval scurt de timp limbajul Java intr-una din cele mai populare optiuni pentru dezvoltarea de aplicatii pe o multitudine de terminale, indiferent de domeniu sau complexitatea lor sunt:1) Simplitate elimin suprancrcarea operatorilor, motenirea multipl i toate facilitatilece pot provoc scrierea unui cod confuz. 2) Usurina n crearea de aplicaii complexe ce folosesc programarea n reea, fire de execuie, interfa grafica, baze de date, etc. 3) Robustee elimin sursele frecvente de erori ce apar n programare prin renunarea la pointeri, administrarea automat a memoriei i eliminarea pierderilor de memorie printr-o procedur de colectare a obiectelor care nu mai sunt referite, ce ruleaz n fundal (garbage collector).4) Complet orientat pe obiecte elimina complet stilul de programare procedural.5) Securitate este un limbaj de programare foarte sigur, furninzand mecanisme stricte de securitate a programelor concretizate prin : versificarea dinamic a codului pentru detectarea secvenelor periculoase, impunerea unor reguli stricte pentru rularea proceselor de la distan, etc. 6) Neutralitate arhitectural comportamentul unei aplicaii Java nu depinde de arhitectura fizic a mainii pe care ruleaz. 7) Portabilitate Java este un limbaj independent de platforma de lucru, aceeai aplicaie rulnd fr nici o modificare i fr a necesita recompilarea ei pe sisteme de operare diferite cum ar fi Windows, Linux, Mac OS, Solaris, etc., lucru care aduce economii substaniale firmelor dezvoltatoare de aplicaii. 8) Este compilat si interpretat, aceasta fiind soluia eficient pentru obinerea portabilitaii.9) Performan dei mai lent dect limbajele de programare care genereaz executabile native pentru o anumit platform de lucru, compliatorul Java asigur o performan ridicat a codului de octei, astfel nct viteza de lucru puin mai sczut un va fi un impediment n dezvoltarea de aplicaii orict de complexe, inclusiv grafica 3D, animaie, etc. 10) Este modelat dup C si C++ , trecerea de la C, C++ la Java facndu-se uor.

AndEngine

AndEngine este un proiect open-source prezentat ca un ajutor pentru dezvoltarea jocurilor 2D pe platforma Android. Ca orice alt engine ( Rage , CryEngine, Uneal i altele) el prezint avantaje i dezavantaje. Alegerea unui engine potrivit pentru jocul pe care vrei s-l dezvoli ine mult de ideea n sine i de modul n care se dorete a se face implementarea. n cazul AndEngine, el se prezint cu dou versiuni. Prima, AndEngine version 1 suport OpenGLES1( subset al faimoasei aplicaie de randare grafic OpenGl ), suportat de peste 95% din terminalele Android de pe pia. AndEngine a fost dezvoltat i este n continuare mbunti de ctre Nicolas Gramlich , un dezvoltator din San Francisco. Un avantaj iminent al acestui game engine este faptul c este simplist, reprezint un punct de plecare accesibil oricrui dezvoltator nefamiliarizat cu dezvoltarea de jocuri pentru Android. Dei documentaia este considerat de unii incomplet sau generatoare de confuzii, And Engine este nsoit cu suport tehnic extins din partea utilizatorilor, att pe forumul propriu AndEngine Forums, o comunitate activ i ce nu ezit n a ajut novicii, ct i pe platform StackOverflow cu o comunicate la fel de dedicat, dar mult mai diversificat. Un punct forte al acestui game engine este faptul c au eliminat n mare partea problema memoriei, o problem de care se mpotmolete orice dezvoltator nceptor. Ca s o rezolve, AndEngine a mrit heap size-ul aplicaiei. n schimb, acest engine poate fi considerat simplist, aducndu-se n discuie anumite limitri grafice sau lipsa suportului pentru multi-touch. Per total, consider c AndEngine este o alegere optim pentru un dezvoltator nceptor cnd vine vorba de crearea unui joc pe o platforma Android, putnd s se familiarizeze att cu mediul de dezvoltare ct i cu anumite paradigme, pregtindu-se astfel pentru paii urmtori - dezvoltarea pe engine-uri mult mai complexe .

Algoritm Turnurile din Hanoi

Se spune c ntr-un templu din Benares(India) preoii lucreaz ncontinuu, mutnd discuri de aur de pe un ac de diamante pe altul. Atunci cnd lumea a fost create, preoilor din Benares le-au fost druite 3 ace de diamante i 64 discuri de aur. Preoilor li s-a poruncit s depun pe unul din ace toate discurile, n ordine descresctoare, apoi s mute ntregul turn astfel format pe unul din celelalte dou ace, mutnd cte un disc o data i fr a pune un disc mai mare peste unul mai mic. n conformitate cu legenda Dumnezeu le-a zis oamenilor:cand vei termina de mutat turnul, atunci lumea se va sfri! Jocul Turnurile din Hanoi( uneori numit i turnurile din Brahma ) a fost inventat de matematicianul francez Edouard Lucas, n 1883. el s-a inspirit din legenda unui templu hindus care folosea un astfel de joc pentru disciplin mental a tinerilor clugri. Turnul din Hanoi sau Turnurile din Hanoi este format din trei tije i un numr variabil de discuri, de diferite mrimi, care pot fi poziionate pe oricare din cele 3 tije. Jocul ncepe avnd discurile aezate n stiv pe prima tij, n ordinea mrimii lor, astfel nct s formeze un turn. Scopul jocului este acela de a muta ntreaga stiv de pe o tij pe alta, respectnd urmtoarele reguli: Doar un singur disc poate fi mutat, la un moment dat. Fiecare mutare const n luarea celui mai de sus disc de pe o tija i glisarea lui pe o alt tij, chiar i deasupra altor discuri care sunt deja prezente pe acea tij. Un disc mai mare nu poate fi poziionat deasupra unui disc mai mic.

Algoritmul folosit pentru rezolvarea de ctre un calculator a problemei Turnurilor din Hanoi se bazeaz pe tehnica divide et impera ( dezbin i cucerete ) . Divide et impera se bazeaz pe un principiu extrem de simplu: descompunem problema n dou sau mai multe subprobleme ( mai uoare ), care se rezolv, iar soluia pentru problema iniial se obine combinnd soluiile problemelor n care a fost descompus. Se presupune c fiecare din probleme n care a fost descompus problem iniial, se poate descompune n alte subprobleme, la fel cum a fost descompus problem iniial. Procedeul se reia pn cnd (n urm descompunerilor repetate) se ajunge la probleme care admit rezolvare imediat. Evident nu toate problemele pot fi rezolvate prin utilizarea acestei tehnici. Fr team de a grei, putem afirm c numrul lor este relativ mic, tocmai datorit cerinei c problem s admit o descompunere repetat. Divide et impera este o tehnic ce admite o implementare recursiv. Principiul general prin care se elaboreaz algoritmi recursivi : ce se ntmpl la un nivel, se ntmpl la un nivel, se ntmpl la orice nivel (avnd grij s asigurm condiiile de terminare). Tot aa, se elaboreaz un algoritm prin divide et impera: la un anumit nivel avem dou posibiliti: 1. am ajuns la o problem care admite o rezolvare imediat, caz n care se rezolv i se revine din apel ( condiia de terminare );2. nu am ajuns n situaia de la punctul 1. , caz n care descompunem problema n dou sau mai multe subprobleme, pentru fiecare din ele reapetam funcia, combinm rezultatele i revnim din apel.

Astfel rezolvarea problemei Turnurilor din Hanoi se va baza pe urmtorul algoritm: Se dau 3 tije simbolizate prin a,b,c. Pe tija a se gsesc n discuri de diametre diferite, aezate n ordine descresctoare a diametrelor. Se cere s se mute de pe tija a pe b, utiliznd ca tij intermediar tija c, toate cele n discuri, respectnd urmtoarele reguli: La fiecare pas se mut un singur disc. Nu este permis s se aeze un disc cu diametrul mai mare peste un disc cu diametrul mai mic.

Rezolvare: Dac n=1 se face mutarea ab, adic se muta discul de pe tija a pe tija b. Dac n=2 se fac mutarile a-c,a-b,c-b. Pentru n=3 avem :H(3,a,b,c ) = H(2,a,c,b),ab,H(2,c,b,a) = H(1,a,b,c),ac,H(1,b,c,a),ab,H(1,c,a,b),cb,H(1,a,b,c) = a-b,a-c,b-c,a-b,c-a,c-b,a-b. Dac n>2 . Notm cu H(n,a,b,c) irul mutrilor celor n discuri de pe tija a pe tija b , utiliznd ca tij intermediar, tija c.

Conform strategiei Divide et impera ncercam s descompunem problema n alte dou subprobleme de acelai tip, urmnd apoi combinarea soluiilor. Deci mutarea celor n discuri de pe tija a pe tija b,utiliznd c tij intermediar tija c, este echivalent cu: muatrea a n-1 discuri de pe tija a pe tija c , utilizand ca tija intermediara tija b; mutarea discului rmas de pe tija a pe tija b; mutarea a n-1 discuri de pe tija c pe tija b , utiliznd ca tij intermediar tija a.

2

Algoritmul prezentat in limbajul C++ :#includechar a,b,c;int n;void h(int n,char a,char b, char c){if(n==1) cout