Sistema DE Comanda Si Control Bazate PE Unity Pentru Jocuri Video DE Tip Rpg

Sistema de comandă și control bazate pe unity pentru jocuri video de tip rpg

C uprins

Introducere

CAPITOLUL I. CONSIDERAȚII TEORETICE

1.1 Despre jocurile video

1.2 Istoria jocurilor video

1.3 Evoluția jocurilor video

1.4 Importanța jocurilor video

1.5 Violența în jocurile video

1.6 Câteva curiozități despre jocurile video

CAPITOLUL 2

2.1 Motorul de joc Unity 3D

2.2 Diferența dintre Unity și alte game engine-uri

2.3 Descrierea motorului de joc Unity

2.4 Programul MonoDevelop

2.5 Despre Microsoft Visual Studio

2.5.1 Istoricul programei Microsoft Visual Studio

2.5.2 Caracteristicile generale a programului MVS

2.6 Internet Protocol(IP)

2.6.1 IPv4

2.6.2 Subrețele

2.6.3 VLSM (Variable Length Subnet Mask)

2.6.4 IPv6

2.6.5 Rețelele WAN (Wide Area Network)

CAPITOLUL 3

3.1 Partea introductivă în jocul video

3.2 Descrierea părților jocului

3.3 Componentul Animator

3.4 Inteligența artificială

3.5 Viitorul Inteligenței artificiale

Bibliografie

Introducere

Lucrarea de față are ca scop prezentarea aspectelor teoretice și practice a unui joc video ce urmează să fie creat de noi, precum și analiza industriei jocurilor video și importanța divertismentului în sistemul de învățământ, sistemul educațional și în rutina zilei fiecărui om.

La momentul actual jocurile video reprezintă un fenomen cultural nou în care tinerii își petrec timpul liber tot mai des. Companiile ce produc jocuri video devin tot mai multe iar pentru a se menține în cursa competitivă acestea lansează tot mai multe remake-uri de o calitate tot mai proastă, principalul obiectiv fiind dobânda cât mai mare. Din cercetările realizate am tras cocluzia că partea grafică și violența ce se manifestă în diferite forme predomină în jocurile moderne, fapt ce-i atrage pe jucători și-i fac mai obsedați de lumea virtuală decât cea reală. Deși există nu puține jocuri Flash în care autorii au avut ca scop combaterea violenței și a efectelor nocive ce poate afecta psihica jucătorului, totuși realizarea lor necalitativă și mulțimea de erori ce apar pe parcurs resping atenția oamenilor.

Conținutul lucrării prezintă problematica violenței în jocurile video ce sporesc agresivitatea în rândul copiilor și adolescenților. În astfel de jocuri, accentul fiind pus mai mult pe acțiune și numărul impunător de echipament decât pe povestea jocului și străduința de a înzestra jucătorul cu noi capacități, cum ar fi gândirea strategică. O soluție propusă de noi pentru combaterea violenței în jocurile virtuale este de a implementa elemente de logică, inteligența artificială și posibilitatea de a juca online iar între jucători să persiste cooperativitatea. De asemenea va fi prezentat un exemplu care constă dintr-o aplicație practică.

Aplicația practică reprezintă un joc video în care vor fi implicați doi jucători. Fiecare jucător având sub controlul său un caracter cu diferite abilități. Locul inamicilor ce persistă de obicei în jocurile video va fi înlocuit cu diferite obstacole ce vor fi posibile de trecut doar prin colaborarea celor doi jucători și cu ajutorul uneltelor ce vor fi furnizate în timpul jocului. Fiecare situație de dificultate ce va apărea pe parcurs va fi posibilă de trecut prin mai multe metode, iar metoda de parcurgere rămănând la discreția jucătorilor. Deoarece așa tip de joc nu este ceva absolut nou în sfera jocurilor video, aportul personal constând în ideea așa numitei colaborări concurențiale. Adică jucătorii pe parcurs sunt concurenți în ceea ce privește monezi și coechipieri în privința trecerii obstacolelor. O dată cu implementarea tehnologiei WAN v-a fi posibilă atualizarea contentului ce ne va permite să adăugăm noi etape, personaje, unelte și altele pentru diversitatea procesului de joc.

În acest sens capitolul întâi abordează aspectele teoretice cu privire la jocurile video, importanța acestora precum și un mic istoric despre apariția lor. Aici vor fi descrise formele de reprezentare a jocurilor, modelarea situațiilor decizionale interactive și multitudinea de varietăți a jocurilor video.

Capitolul doi descrie “instrumentele” ce vor fi folosite pentru crearea părții practice și unele dintre aspectele acestora. Vor fi prezentate argumente de ce s-au folosit anume aceste softuri și care au fost contribuția lor în cadrul proiectului. În acest capitol vor fi descrise deasemenea unele tehnologii precum protocolul IP și rețeaua WAN ce urmează pe viitor să fie implementată în joc.

Capitolul trei reprezintă partea principală a lucrării. În acest capitol va fi prezentat modul de elaborare a jocului nostru video. Vor fi descrise modulele, scripturile, componentele fizice create, la fel va fi descrisă o parte din Inteligența Artificială(AI) care urmează să fie realizată în viitor. Aici vor fi analizate unele aspecte a jocului precum comportamentul caracterelor și interacțiunea lor cu mediul înconjurător.

CAPITOLUL I. CONSIDERAȚII TEORETICE

Despre jocurile video

Jocurile video sunt un fenomen cultural relativ nou. Prin urmare, studiile legate de ele prezintă efecte diferite si uneori contradictorii. Mass media caută senzaționalul și de obicei arată cercetările în care efectele asupra copiilor sau adulților sunt nocive. De fapt, lucruile nu sunt așa de simple. Avem cercetări care prezintă jocurile într-o lumină pozitivă, chiar și când e vorba de copii. În ceea ce privește adulții, în unele studii jocurile ne fac mai buni și mai fericiți în timp ce în altele devenim agresivi sau rupți de realitate.

Fie că ne jucam pe calculator, televizor, Wii, tabletă sau telefon, trebuie să avem în vedere că există anumite efecte fizice și psihologie ale jocurilor. Dar acestea pot depinde de timpul pe care îl alocăm și de tipul de joc ales. Mai jos sunt stipulate câteva exemple de cercetări legate de efectele jocurilor.

Anumite tipuri de jocuri video te pot ajuta să-ți antrenezi creierul să devină mai agil și îți pot  îmbunătăți gândirea strategică, potrivit oamenilor de știintă de la Universitatea Queen Mary și de la University College din Londra (UCL).

Nu numai că jocurile video sunt bune pentru creier, acestea pot îmbunătăți și capacitatea dumneavoastră de a lua decizia corectă într-o situație și de a face acest lucru mai repede, potrivit unui nou studiu de la Universitatea din Rochester. Ceea ce te poate face și un șofer mai bun.

În timp ce jocurile video violente pot duce la mai multă agresivitate și furie în jucatori, un nou studiu arată că opusul este adevărat: jocurile video relaxante îi pot face pe oameni mai fericiți și mai buni.

Jocurile video violente pot crește agresivitatea și atunci când un jucator continuă să se gândească la joc, potențialul de agresivitate poate dura pâna la 24 ore, potrivit unui studiu Social Psychological and Personality Science (publicat de SAGE).

Jocurile video violente sau antisociale, cum ar fi Call of Duty sau Grand Theft Auto nu reduc comportamentul de ajutorare la jucători la scurt timp după ce au jucat, potrivit unui studiu publicat în PLoS ONE, realizat la Universitatea din Queensland, Australia.

Există multe beneficii, pentru copii, dacă joacă jocuri video. Copiii nu suferă astazi de prea mult timp petrecut in fața ecranului și din cauza jocurilor video. Suferă pentru că există un control al adulților prea mare asupra vieții lor și nu au suficientă libertate.

1.2 Istoria jocurilor video

Primele jocuri video au fost realizate între anii 1950 și 1960 de Jon Snell și rulau pe așa platforme cum ar fi osciloscopul, sau computere EDSAC. Cel mai vechi joc pentru calculator, o simulare de rachete, a fost creat în 1947 de către Thomas T. Goldsmith Jr. și de Estle Ray Mann. O cerere pentru acordarea de drepturi de autor a fost făcută pe 26 ianuarie 1947 și patentată ca U.S. Patent din data de 15 decembrie 1948. Mai târziu în 1952, o versiune a jocului X și O numită Noughts and Crosses a fost creată de A. S. Douglas ca parte a disertației de doctorat la Universitatea din Cambridge. Jocul rula pe un computer al universității numit Electronic Delay Storage Automatic Calculator (EDSAC). În 1959 William Higinbotham – care a ajutat să se construiască prima bombă atomică – a creat Tennis For Two în laboratoarele naționale din Brookhaven, situate în Upton, New York, pentru a distra vizitatorii laboratorului. În 1963 Steve Russel a creat jocul Spacewar, un joc de simulare spațială. Programul rula pe un DEC PDP-1 și este considerat de mulți specialiști atât primul joc pentru calculator cât și printre cele mai importante realizate vreodată. Jocul s-a răspândit rapid la universități și laboratoare de cercetare din țară. În 1968 Ralph Baer, care va fi cunoscut mai târziu și ca părintele jocurilor video, a patentat o versiune a unei console de jocuri numită Television Gaming and Training Apparatus. În 1967, Baer a creat un joc de genul ping-pong pentru consolă care semăna cu Tennis pentru doi (și cu viitorul joc arcade Pong). A lucrat cu Magnavox și a creat în 1972 prima consolă, numită Magnavox Odyssey.

1.3 Evoluția jocurilor video

Totul a început cu un osciloscop și o bilă care țopăia pe post de divertisment pentru cei care considerau că fizica atomică e oribil de plictisitoare. De la numitul Tennis pentru doi apărut în 1958 și până acum abia dacă au trecut 50 de ani și în mod cert cei mai mulți dintre voi nu prea știu nici cum arăta Windows 3.11, ca să nu mai spun de Magnavox, HC sau alte aparate made in China care foloseau casete. Să analizăm cum au evoluat jocurile video în jumătate de secol. La o industrie care depășea ca venituri multe industrii mari, la companii uriașe, zeci, sute de mii de oameni angajați ca să creeze și alte sute plătiți ca să se joace, plus sute de milioane de oameni care butonează doar din plăcere.

Deja vorbim de sport mondial, de ligi de profesioniști, de concursuri ca World Cyber Games și de licențe care i-au îmbogățit pe cei care le dețin în termeni de cifre pe care nici măcar nu ni le putem imagina. Dar epoca care într-adevăr a adus jocurile în atenția publicului larg a început undeva în anii ”80, odată cu dezvoltarea tehnologiei, în special pe partea grafică. Perioada respectivă trebuie menționată pentru că atunci s-au pus bazele genurilor, anume atunci au fost create poveștile considerate cele mai interesante chiar și în zilele noastre, de acolo își trag și acum seva inspirațională cele mai mari companii de jocuri.

E bine sau e rău să te intorci la origini? Să faci remake-uri, să continui serii care poate sunt mai vechi decât mulți dintre cei care citesc aceste rânduri? Sau să pui bazele unei francize noi o dată la un cincinal și atunci cu frică și chiar cu defecte tehnice majore? Sau pur și simplu se abandonează ceea ce numim „harcore gaming” în favoarea simplității excesive a curentului „casual”, cu biluțe colorate, hidden object games și aruncatul cu oi de pe Facebook? Cum au început jocurile, cum ele au evoluat până în ziua de azi și de ce s-au schimbat așa de mult lucrurile?

Mai jos sunt aduse niște exemple de evoluție a jocurilor video.

Figura 1.3.1 – Jocul Anno din anul 1998 și versiunea modernă din anul 2012

Figura 1.3.2 – Focul GTA din anul 1997 și versiunea nouă din 2010

Figura 1.3.3 – Jocul Super Mario din anul 1985 și versiunea nouă din 2013

1.4 Importanța jocurilor video

Conform unor cercetări efectuate de oamenii de știință, jocurile video nu au tot timpul un impact negativ asupra noastră. Astfel, specialiștii ne asigură că, pe termen lung în multe cazuri, jocurile video pot reduce anxietatea și stresul, pot restabili funcțiile motorii (în cazul celor cu probleme de mobilitate) și îmbunătățesc vederea, dar nu numai.

Iată și unele efecte pozitive a jocurilor video. În primul rând copiii diagnosticați cu boli grave precum autismul, depresia ori chiar boala Parkinson, ultimele două fiind în general specifice vârstelor înaintate, pot da semne de ameliorare a simptomelor dacă se joacă pe calculator, arată cercetările realizate în cadrul Universității din Utah.

De asemenea, jocurile video pot confen anul 2012

Figura 1.3.2 – Focul GTA din anul 1997 și versiunea nouă din 2010

Figura 1.3.3 – Jocul Super Mario din anul 1985 și versiunea nouă din 2013

1.4 Importanța jocurilor video

Conform unor cercetări efectuate de oamenii de știință, jocurile video nu au tot timpul un impact negativ asupra noastră. Astfel, specialiștii ne asigură că, pe termen lung în multe cazuri, jocurile video pot reduce anxietatea și stresul, pot restabili funcțiile motorii (în cazul celor cu probleme de mobilitate) și îmbunătățesc vederea, dar nu numai.

Iată și unele efecte pozitive a jocurilor video. În primul rând copiii diagnosticați cu boli grave precum autismul, depresia ori chiar boala Parkinson, ultimele două fiind în general specifice vârstelor înaintate, pot da semne de ameliorare a simptomelor dacă se joacă pe calculator, arată cercetările realizate în cadrul Universității din Utah.

De asemenea, jocurile video pot conferi sentimentul de putere, andruanță și spiritul de luptător, elmente esențiale de care avem nevoie pentru a supraviețui în situații limită și cu resurse limitate, pentru a trece cu bine peste încercările vieții.

Un alt efect pozitiv după părerea cercetătorilor este îmbunătățirea abilităților motorii la copii. Stând în fața calculatorului, copiii își dezvoltă mai bine controlul asupra abilităților motorii ceea ce îl determină să își stăpânească surplusul de energie.

A fost dovedit că jocurile video ajută la reducerea stresului și depresiei. Un studiu efectuat pe subiecții care sufereau de stres și depresie reevă că aceștia și-au exprimat mai ușor frustrarea și agresivitatea jucând jocuri video, astfel înregistrându-se o îmbunătățire a tării lor generale.

Pe lângă faptul că pot oferi alinare psihicului, jocurile video pot ameliora și durerile fizice. Acest lucru este posibil, susțin specialiștii, prin distragerea atenției de la probleme la ceea ce trebuie de făcut în cadrul jocului. Există și dovezi palpabile că acest beneficiu este real: un grup de soldați care au jucat "Snow World", un joc care presupune aruncarea bulgărilor de zăpadă în diverse ținte, au luat mult mai puține medicamente împotriva durerilor în timpul recuperării, oamenii de știință punând pe seama jocurilor video acest fapt.

Un studiu din 2009 a dat peste cap mitul conform căruia statul în fața televizorului ne poate slăbi vederea. Astfel, specialiștii de la Universitatea din Rochester au descoperit că persoanele ce suferă de cataractă își pot îmbunătății vederea prin jocurile de acțiune ce implică tragerile la țintă în viteză sau similare.

Astfel jucătorii își ascut simțul vizual  prin identificarea detaliilor de dimensiuni mici și prin recunoașterea nuanțelor de gri, iar pe termen lung, anumite jocuri video pot să genereze o privire mai ageră, atenție sporită asupra detaliilor și o mai bună percepție.

De asemenea, în timpul jocului sunt eliberate cantități mari de dopamină și adrenalină, hormoni care ne pun în alertă creierul, făcându-ne mai atenți și mai concentrați, dar care ne și pregătesc pentru o mai bună coordonare mâini-ochi.

Majoritatea jocurilor pe calculator nu presupun un efort fizic intens, însă există și jocuri speciale, de ultimă oră, care prin intermediul generațiilor noi de console îndeamnă la mișcare fizică. Jocurile Wii Fit sunt printre cel mai bine privite astfel de jocuri, au aprobarea Asociației Amerciane a Inimii și au capacitatea de pune toți mușchii în mișcare, evitându-se astfel depunerea kilogramelor și îngroșarea arterelor, principalii factori de risc pentru bolile de inimă.

Multe jocuri video necesită reacții rapide și decizii aproape instantanee care pot însemna diferența dintre viața și moartea virtuală. Neurologii de la Universitatea din Rochester, New York au descoperit că aceste jocuri oferă jucătorilor ocazia de a-și antrena creierul pentru luarea deciziilor în lumea reală.

Cercetatorii sugerează că jocurile de acțiune exercită un rol de simulator pentru procesul de luare a deciziilor de către jucatorilor, oferidu-le acestora mai multe șanse de a gestiona informațiile din mediul lor și forțându-i să reacționeze în consecință.

Un alt studiu realizat de cercetătorii de la Universitatea Iowa din Statele Unite a relevat faptul că jocurile video pot fi benefice. Jocurile video, considerate uneori dăunătoare pentru copii, sunt în schimb benefice pentru persoanele în vârstă de peste 50 de ani, mobilizândule și ameliorândule capacitățile cognitive, afirmă autorii studiului.

Sutele de persoane în vârstă de peste 50 de ani ce au fost monitorizate de cercetătorii, au dat dovada de îmbunătățire a capacităților cognitive și de o întârziere de câțiva ani a declinului mintal ce este asociat cu bătrânețea.

Este vorba de o serie amplă de studii care au avut ca scop, înțelegerea motivelor pentru care oamenii când îmbătrânesc, își pierd acele funcții majore ale creierului care asigură juncíonalitatea memoriei, a atenției, a percepției și capacitățile de rezolvare a unor probleme.

În acest studiu, 681 de persoane, care aveau o stare bună de sănătate, au fost repartizate în patru grupuri țintă, în interiorul cărora au fost separate în două subgrupuri: unul pentru persoanele între 50 și 64 de ani și altul pentru persoanele de peste 65 de ani.

Un grup trebuia să rezolve cuvinte încrucișate pe computer, celelalte trei, să joace un joc video denumit "Road Tour", care constă în identificarea unui model de automobil afișat pentru scurt timp pe o plăcuță de înmatriculare. Scopul este de a crește nivelul de dificultate. La fiecare nivel, viteza crește, la fel ca numărul elementelor care distrag atenția, afișate pe ecran.

Indiferent de viteza de pornire a jucătorului, afirmă Fredric Wolinsky, profesor de sănătate publică la Universitatea Iowa, principalul autor al acestui studiu publicat în revista PLOS One, "antrenamentul permite unui jucător să își crească viteza cu 70%".

Testate pe parcursul unui an, grupurile care au jucat cel puțin 10 ore acest joc video au câștigat cel puțin trei ani de sănătate mintală. Grupul care a jucat cu patru ore mai mult a câștigat chiar patru ani față de momentul în care se declanșează declinul cognitiv, potrivit acestui studiu.

"Nu am prevenit doar declinul lor, dar le-am accelerat și facultățile mintale", afirmă Fredric Wolinsky. "Avantajul jocurilor video, pentru cei mai în vârstă, pare să rezide în această accelerare a capacităților cognitive, care poate la rândul ei să favorizeze o vedere mai panoramică. Cu vârsta, într-adevăr, vederea se restrânge până ajunge un fel de tunel".

Persoanele care au jucat "Road Tour" au obținut rezultate mai bune decât cele care au rezolvat cuvinte încrucișate, în ceea ce privește puterea de concentrare, viteza și agilitatea de a trece de la o sarcină la alta. În total, jocurile se pot traduce printr-o ameliorare cuprinsă între 1,5 ani și 7 ani pentru aceste funcții mintale.

1.5 Violența în jocurile video

Cercetatorul Mirjana Bajovic a declarat că rezultatele obținute în prezent indică faptul că unii adolescenți care fac parte din grupul celor care joacă jocuri violente, petrec 3 sau 4 ore pe zi în acest mod, și își asumă detașarea de lumea din afară sunt lipsiți de astfel de oportunitați. Petrecerea a prea mult timp în lumea virtuală a violenței, poate impiedica jucătorii să se implice în diferite experiențe sociale pozitive din viața reală, lucru care i-ar ajuta în dezvoltarea unui sentiment pozitiv față de ceea ce este bine și ce este rău.

Cu toate acestea, alte jocuri nu au avut vreun efect, ceea ce sugerează că expunerea constantă la violență este cea care împiedică dezvoltarea lor. Cercetătorii au adăugat că expunerea la violență din jocurile video poate influența dezvoltarea raționamentului moral, pentru că violența nu este numai prezentată ca fiind acceptabilă, dar este, de asemenea, justificată și recompensată.

Ei au ajuns la concluzia că, mai degrabă decât o incercare "nerealistă" de a impune o interzicere a jocurilor, părinții și profesorii trebuie să incurajeze tinerii să facă muncă de caritate și să se implice în tot mai multe activitați extracurriculare.

1.6 Câteva curiozități despre jocurile video

Daca există ceva ce să le placă gamerilor mai mult decât jocurile video sunt mituri despre jocurile video. De când au apărut prima dată la începutul anilor 80, au devenit legende. Trebuie să fii un jucător dedicat pentru a auzi unele mituri cum ar fi existența unui cod ce o poate învia pe Aeris în jocul “Final Fantasy 7″. Există mituri mai mult sau mai puțin scandaloase, însă acela că jocurile video duc la violență rămâne un motiv de ingrijorare.

Primul mit este că toate jocurile video duc la violență. Dylan Klebold și Eric Harris, cei doi adolescenți care au făcut un masacru în liceul Columbine din Littleton, erau jucători înrăiți de Doom. Tânărul neamț Tim Kretschmer, în vârstă de 17 ani, a ucis 15 persoane cu mișcări pe care le-a învățat din Call of Duty. Când tinerii au un comportament violent, jocurile video pe care le-au jucat înainte să comită crimele devin motive pentru tendințele lor agresive. Jocurile violente îi fac pe copii violenți. Ideea aceasta rămâne, deși s-a făcut un studiu pe persoane cu vârste curprinse între 14 si 68 de ani, care au fost puse să joace Asheron’s Call 2 timp de 56 de ore într-o luna. La sfârșitul testului nu s-au descoperit schimbări în comportament sau creșteri în agresivitate. Însă alte studii au dus la alte concluzii.

Un alt mit interesant este că fetele nu joacă jocuri video. Când au apărut primele console de jocuri video, jocurile erau în general asexuale sau cel puțin unisexuale. Titluri precum Frogger, Dig-Dug, Q-Bert nu au niciun fel de orientare către un gen anume, însa odată ce jocurile au devenit mai sofisticate, titlurile au început să fie înclinate mai mult spre partea băieților decât a fetelor. Înseamnă acest lucru că fetele nu joacă jocuri video? Nici vorbă. Un studiu a arătat că 37% dintre femeile cu vârste cuprinse între 18 și 45 de ani se joacă jocuri video, iar bărbații în procent de 38% . Așa că diferența este foarte mică.

Poți folosi cipurile dintr-un PlayStation 2 pentru a construi un sistem de rachete ghidate. Spre sfârșitul anului 2000, existau reportaje cum că președintele Irakului Saddam Hussein adună sisteme PlayStation 2 ce apăruseră în acea toamnă. Mai bine de 4000 de console au ajuns In Irak în doar câteva luni. Consolele erau până la urmâ niște jucării, așa că ce era în neregula? Vorbe, cum că Hussein prețuia consolele pentru cipurile lor și că plănuia să unească 10-20 de console între ele pentru a crea un supercalculator capabil să ghideze sisteme de rachete, au devenit înspăimântătoare. Deși este posibil din punct de vedere tehnic să unesti mai multe sisteme PlayStation, Irak ar fi fost avut nevoie de software unic, ce necesită ani de cercetare după lansarea PlayStation 2, așa că aceste vorbe sunt doar un mit.

Pong a fost primul joc video. S-a scris istorie în Sunnyvale la data de 29 noiembrie 1972. Ted Dabney și Nolan Bushnell, doi programatori de calculatoare ce tocmai fondaseră Atari, au terminat și dezvăluit un joc numit Pong. Debutul jocului Pong a reprezentat nașterea industriei jocurilor video ce avea să ajungă la valoarea de 38 de miliarde de dolari în doar 34 de ani. Însă nu a fost tocmai primul joc video. Ideea că Pong este primul joc video este doar un mit. De fapt, un alt joc a apărut cu un an înainte de Pong, numit Computer Space. Acesta a fost conceput pornind de la un joc pe calculator numit Spacewar. Pong a devenit popular foarte rapid întrecând Computer Space, astfel născându-se acest mit.

Există milioane de dischete Atari îngropate în Deșertul New Mexico. Uneori ce sună ca un mit este de fapt realitate. În luna septembrie 1983, 14 camioane ce conțineau in jur de 10 milioane de dischete de joc Atari au mers la Alamogordo, unde au lăsat dovadă nașterii unuia dintre primele jocuri video. Compania Atari a avut un an mai rău decât se aștepta deoarece au riscat foarte mult pe doua jocuri lansate: o versiune de consolă pentru Pac-Man și un joc bazat pe filmul E.T. Jocurile nu au avut succesul dorit și peste 5 milioane de copii au fost returnate companiei. Deoarece aveau milioane de dischete inutile, s-au hotărât să le îngroape. Din păcate pentru nostalgicii vânători de jocuri video ce vin la locul desertării în căutarea unui suvenir, dischetele au fost mai întai strivite.

CAPITOLUL 2

2.1 Motorul de joc Unity 3D

Unity Technologies, firma care a creat acest pachet software, nu are nici pe departe renumele Epic sau Crytek, poate și pentru că nu s-au lansat pe piață cu jocuri care să le popularizeze engine-ul și pachetul de development. Dar cu toate acestea, au reușit într-un timp relativ mic să revolutioneze domeniul prototyping-ului și dezvoltării de jocuri cu Unity.

Cum s-a întâmplat așa ceva? Oferind un mediu de dezvoltare mult mai accesibil creatorilor de jocuri. Comparativ cu Unity, UDK și CryEngine SDK sunt ca ecuațiile diferențiale față de algebra de clasa a 5-a.

Sigur, nu se compară cu cei doi giganți pomeniți anterior în materie de putere pură și estetica, dar asta contează mult mai puțin pentru game prototyping decât o curbă de învățare mult mai puțin abruptă. Jocurile de succes pentru PC sau console create cu Unity nu sunt foarte numeroase, dar Appstore-ul este dominat efectiv de jocurile create cu Unity, ceea ce demonstrează că este apreciat de cei care vor să creeze jocuri simplu, rapid și cu investiții minime.

Lipsa de facilități care vin implicit cu celelalte pachete, de genul modul de visual scripting, sau de editare avansată a interfețelor grafice, cum este Scaleform din UDK, este compensată de o sumedenie de plugin-uri, însă ce-i drept costă bani.

Unity în sine este gratuit, dar există o versiune Pro care costă bani, dar nu este necesară pentru crearea de prototipuri, și chiar mai mult, însăși Unity a inițiat trendul de a deschide porțile pentru creatorii independenți de jocuri, oferind o versiune gratuită a SDK-ului.

Scriptarea se face în JavaScript (sau C# și Boo, pentru cine preferă limbajele respective), ceea ce este o abordare ideală. Două dintre ele sunt standarde în industrie, și chiar dacă personal nu le apreciez la fel de mult ca Java, faptul că Unity oferă posibilitatea de alegere între trei limbaje de scripting îl ridică mult în ochii programatorilor de jocuri.

Iar Unity Technologies și-au găsit un loc în lista scurtă a dezvoltatorilor favoriți de software atunci când au renunțat în mod public la Flash, considerând că nu are un viitor ăn industria de producție a jocurilor. Personal cred că, cu cât mai repede Flash își dă duhul în favoarea unor tehnologii de gen HTML 5 și WebGL, cu atât mai bine va fi pentru jocurile web casual.

Pentru proiectele personale, Unity este cea mai bună alegere . El poate fi folosit în combinație cu pluginul de visual scripting PlayMaker pentru a crea mici ‘jucării’ care au potențialul de a deveni ceva mai mult la un moment dat

2.2 Diferența dintre Unity și alte game engine-uri

Cum s-a menționat în secțiunea anterioară, Unity este un game engine ce este accesibil practic fiecărui utilizator ce are în plan să facă un joc video. Această programă oferă un set de instrumente pentru lucrul cu fiecare obiect din jocul dumneavoastră. Posibilitatea de a face schimbări din cadrul jocului chiar în Unity fără a parcurge la programe terțiare face realizarea jocului de zeci de ori mai facilă ca oricând.

Unity spre deosebire de alte game engine-ui folosește în mare parte plugin-uri, ce permite utilizatorului schimbarea unor componente din programă fără a scoate întreaga programă din nou. Interfața programului este chiar și pe înțelesul copiilor. Toate instrumentele sunt aranjate elegant și la locul lor. Utilizatorul poate interveni cu niște schimbări în orice moment fără a depune mult efort.

Unele motoare de joc sunt destul de scumpe și nu oricine ar putea să-și permită să cumere un asemenea program. Începând cu versiunea 4.x, Unity a devenit un open source ceea ce înseamnă accesibilitatea oricăruia din noi la programul dat. Există și o versiune contralpată pentru cei ce doresc să obțină întregul avantaj a acestui game engine.

Programul Unity operează cu 3 limbaje de programare ce îi oferă utilizatorului dreptul la alegere, spre deosebire de UDK sau Cry Engine ce oferă doar 1 sau maximum 2 limbaje de programare. Deși în prezent nu sunt așa de multe jocuri elaborate în Unity, oricum el rămîne unul din cele mai bune motoare de jocuri. Iar pe viitor sunt sigur că el va deveni cel mai întrbuințat program în domeniul jocurilor video.

2.3 Descrierea motorului de joc Unity

Unity este compus din mai multe compartimente, fiecare răspunzând pentru o anumită activitate din cadrul unui proiect. De obicei, setările implcite a programului conține 5 ferestre: Hierarchy, Project, Game, Scene și Inspector. Din meniul Window se mai pot adăuga așa ferestre precum Animator, Animation, Profiler, Asset Store și altele. De asemenea persistă și butoanele petru controlul jocului, adică pornire, pauză și rularea pe cadre a jocului. În partea stângă de sus a ecranului sunt aranjate 7 butoane petru a controla modul de ilustrare a obiectelor în spațiul de joc. În partea dreaptă de sus sunt aranjate 2 butoane pentru controlul tagurilor și straturilor.

Fereastra Hierarchy conține toate elementele ce sunt la moment prezente în joc. În fereastra dată utilizatorul poate adăuga un nou element sau poate șterge unul deja existent. Fiecare element reprezentând un așa numit game object, adică un element a jocului. Structura acestei ferestre permite expandarea sau comprimarea obiectului. Un exemplu cum arată fereastra dată este arătat în figura 2.1.

Figura 2.3.1 – Structura ferestrei Hierarchy

Fereastra Project prezintă toate obiectele disponibile utilizatorului pentru proiectul dat. Aici sunt amplasate toate măpile precum și fișierile create pe parcursul creării sau prefabricate. În secțiunea dată sunt disponibile deasemenea toate scenele jocului ce se crează. Câmpul pentru căutare are răspândire și în magazinul online a programei Unity ce permite cu ușurință de găsit un material necesar care nu-l avem în calculator. Figura 2.2 prezintă aspectul ferestrei Project.

Figura 2.3.2 – Structura ferestrei Project din programul Unity

Fereastra Scene este probabil una din cele mai importante ferestre a programului. Aici de fapt sunt executate cele mai importante acțiuni în ce privește jocul. Adăugarea elementelor, poziționarea lor, aranjarea, mărirea și micșorarea elementelor, toate acestea se execută anume în această fereastră. Această fereastră de asemenea servește ca un schimbătorîntre scenele 2D și cele 3D. De asemenea aici are loc controlul efectelor de cartografiere a mapei de joc. În partea de sus a ferestrei este amplasat partea de control a componentului Gizmo. Acest component este responsabil pentru prezentarea părților ce urmează să fie interpretate(rendering). La fel, partea de control a elementelor precum particulele se află în fereastra dată. Testarea sunetului, luminii, culorilor, toate acestea de asemenea fac parte din fereastra Scene. Însă o parte importantă ce o îndeplinește fereastra aceasta este controlul UI(user interface). Anume aici utilizatorul definește poziția, mărimea și rotația elementelor ce țin de prezentarea elementelor statice. Majoritatea timpului creatorul proiectului o va petrece anume în această fereastră.

Figura 2.3.3 – Fereastra Scene

Fereastra Game servește pentru vizualizarea rezultatului obținut. Aici se poate vedea rezultatul cum va arăta jocul în cele din urmă. Această fereastră este ca un emulator a jocului. Utilizatorul poate porni jocul și vedea ce ar trebui de schimbat și poate vedea comportamentul obiectelor, dacă totul funcționează așa cum a fost planificat. În colțul de sus se poate controla modul de previzualizare, pe tot ecranul sau numai în fereastra Game. De asemena aici se poate vedea unele caracteristici a jocului, precum memoria utilizată, numărul de cadre pe secundă, starea conectării la internet(în cazul în carea această opțiune este implementată în joc), memoria operativă utilizată și timpul pentru rendering.

Figura 2.3.4 – Fereastra Game

Fereastra Inspector are funcția de a furniza programatorului toate setările obiectelor din proiect. Aici are loc redenumirea obiectelor, adăugarea unor noi caracteristici la obiecte, adăugarea scripturilor, adăugarea elementelor fizice precum componentul rigidbody ce este responsabil de controlul forței de gravitație asupra obiectului. De asemeanea aici se execută schimbarea stării prefaburilor.

Figura 2.3.5 – Fereastra Inspector

Unity de asemeanea oferă posibilitatea de a controla și de a face unele modificări în părțile ce țin de animație. Cu ajutorul ferestrei Animation utilizatorul poate crea o animație dintr-o serie de imagini. El poate controla viteza de rulare și durata animației. Fereastra Animator permite fuziunea a mai multe animații pentru a crea o tranziție dintre aceste animații. Aici se poate seta condiția de tranziție de la o animație la alta precum și durata acesteia.

Figura 2.3.6 – Fereastra Animation din Unity Figura 2.3.7 – Fereastra Animator din Unity

Deoarece Unity este un game engine pentru mai multe platforme, el dispune și configurații pentru a seta butoanele de control a caracterelor din joc. Se poate configura butoanele de control de latastatură sau butoanele de la joystick pentru console. Pentru controlul sunetului Unity oferă fereastra Sounds. Aici se poate seta volumul sunetului, fregvența de redare și multe alte opțiuni.

În Unity pot fi adăugate și controlate legile fizicii, precum gravitația, inerția, elasticitatea și forța de frecare. Toate aceste forțe pot fi adăugate obiectelor cu ajutorul componentului rigidbody și collider. Componentul rigidbody permite obiectului să fie predispus la forțele fizicii iar componentul collider permite să arătăm în ce măsură vor acționa aceste forțe asupra altor obiecte.

Într-un final aș putea concluziona că motorul de joc Unity este una din cele mai bune și eficiente metode de a crea jocuri video. Nivelul de greutate nu tare înalt și uneltele de lucru sofisticate permit crearea unor jocuri destul de puternice ce ar avea succes în rândul copiilor și adolescenților în marea parte. Consider că anume această programă va începe să stea la baza jocurilor din viitor.

2.4 Programul MonoDevelop

MonoDevelop este un program simplu ce permite crearea scripturilor și diferitelor pachete de programe. MonoDevelop este acordată împreună cu programa Unity și de aceea nu necesită implicit să fie setată. Această programă suportă așa limbaje de programare precum C#, Boo și JavaScript. Din cauza numărului mic de pluginuri elementare de care dispune MonoDevelop, această programă este foarte comodă pentru dezvoltarea elemtentelor scriptice pentru jocul nostru. Figura 2.4.1 prezintă interfața programului dat:

Figura 2.4.1

2.5 Despre Microsoft Visual Studio

Visual Studio include un set complet de instrumente de dezvoltare pentru generarea aplicațiilor ASP.NET, Servicii Web XML, aplicații mobile și aplicații desktop. Visual C#, Visual C++, Visual Basic și Visual J# toate acestea folosesc același mediu de dezvoltare integrat (IDE) care le permite partajarea instrumentelor și ușurează crearea de soluții folosind mai multe limbaje de programare. Aceste limbaje permit să beneficieze de caracteristicile .NET Framework care oferă acces la tehnologiile cheie care simplifică dezvoltarea aplicațiilor web ASP și XML Web Services cu Visual Web Developer. În jocul nostru Microsoft Visual Studio îl voi folosi pentru crearea modulelor mai complicate.

2.5.1 Istoricul programei Microsoft Visual Studio

Înainte de lansarea versiunii 4 produsele Visual C++, Visual Basic, Visual FoxPro și SourceSafe se vindeau separat. Visual Basic era disponibil în acel moment deja la versiunea 3. Scopul a fost de a introduce pentru Windows 95 îmbinarea în mod corespunzător a acestor produselor.

Visual Studio 97 poartă numele de cod Boston. Visual Studio 97 era disponibilă în edițiile Enterprise Edition și Professional Edition. Visual Basic 5.0, Visual C++ 5.0 pentru programarea Windows; Visual J++ 1.1 pentru programarea Java; Visual FoxPro 5.0 pentru dezvoltarea bazelor de date. Visual InterDev pentru crearea paginilor web ce utilizează Active Server Pages.

Visual Studio 6.0 are numele de cod Aspen și este la moment ultima versiune care rulează pe platforma 9x. Include suport pentru Internet Explorer 4.0, controlul HTML dinamic, Windows NT 5.0 și componente de infrastructură așa ca Microsoft Message Queue server, serviciul Active Directory și tehnologia Microsoft's Zero Administration. Era comercializat în două ediții Enterprises și Professional. Versiunea Enterprises include caracteristici care nu regăsim în versiunea Professional așa ca:

Application Performance Explorer

Visual Studio Analyzer

Automation Manager

Microsoft Visual Modeler

RemAuto Connection Manager

Visual Studio 2005 poartă denumirea de cod Whidbey. Versiunea suportă Windows 2000 sau versiunile mai noi. Pe data de 14 decembrie 2006 Microsoft a lansat primul său Service Pack pentru Visual Studio 2005. Visual C + + 2005 susține compilarea pentru x86-64 (AMD64 și Intel 64) și IA-64 (Itanium)

Visual Studio 2008 are numele de cod Orcas și este prima versiune care permite programatorilor să folosească versiuni de .NET Framework. Visual Studio este bazat pe platforma de design .NET Framework 3.5, setul de instrumente .NET 3.0 a introdus versiunile actualizate ale ASP.NET, ADO.NET, Visual Basic, C# și CLR. Pentru gestiunea și interoperabilitatea codului mașină, Visual C++ introduce STL/CLR, care este un port de C++ Standard Template Library (STL) ce conține containere și algoritmi pentru gestionarea codului. Microsoft a lansat primul Service Pack pentru Visual Studio 2008 pe data de 12 august 2008.

Visual Studio 2010 are numele de cod Dev10 și a fost lansat pe 11 aprilie 2010 alături de .NET Framework 4. Visual Studio 2010 are un editor nou care utilizează WPF (Windows Presentation Foundation), susprijină interfața de tip Ribbon, suportă monitoare multiple, Windows 7 multitouch, funcționalitatea SharePoint, instrumente de Windows Azure și IntelliTrace, un nou produs care permite eradicarea bug-urilor irepetabile. Va veni furnizată împreună cu Expression Studio, Business & Enterprise Servers și Microsoft Office și în versiunile Premium și Ultimate.

2.5.2 Caracteristicile generale a programului MVS

Microsoft Visual Studio 2010 Professional este un instrument esențial pentru persoanele care îndeplinesc sarcini de bază de dezvoltare. Acesta simplifică crearea, depanarea, și implementarea de aplicații pe o varietate de platforme, inclusiv SharePoint și Cloud. Visual Studio 2010 Professional oferă suport integrat pentru dezvoltarea bazată pe testare, precum și instrumente de depanare, care contribuie la asigurarea de soluții de înaltă calitate.

Microsoft Visual Studio 2010 Professional vine cu o serie de caracteristici care permit programatorilor să construiască, depaneze, testeze în unități și să implementeze aplicații de înaltă calitate pe o gamă variată de platforme, inclusiv Windows, pe Web, în Cloud, Office și SharePoint și multe altele.

Scrierea de cod pentru aplicații necesită adesea a avea deschise simultan numeroase proiectii și editoare. Visual Studio 2010 Professional ajută să organizați mediul digital cu suport pentru monitoare multiple, ceea ce face mai ușoară gestionarea modului de lucu.

Figura 2.5.1.1

Mutarea aplicațiilor Web într-un mediu de producție devine mai ușoară. Visual Studio 2010 Professional transferă codul, setările Internet Information Server (IIS) și schema bazei de date la serverul dvs. țintă.

.

Figura 2.5.1.2

Aduceți unelte de colaborare personalizate pentru compania dvs., profitînd de un nou suport pentru dezvoltare SharePoint, inclusiv instrumente pentru părțile Web, liste, fluxuri de lucru, evenimente, și multe altele.

Figura 2.5.1.3

Visual Studio 2010 Professional oferă suport pentru monitoare multiple, astfel încât să vă organizați și să gestionați munca așa cum ați dorit. Dezlănțuiți creativitatea prin utilizarea proiectarilor vizuale pentru a profita de cele mai noi platforme, inclusiv Windows 7.

Figura 2.5.1.4

Visual Studio 2010 Professional vine cu instrumente incorporate pentru dezvoltarea sub Windows 7, inclusiv multi-touch ;i componente de interfață de utilizator (UI) "panglica" (ribbon) ce vă pun la dispoziție tehnologia Windows 7.

Figura 2.5.1.5

Fie că proiectul dvs. este simplu sau complex, puteți utiliza Visual Studio 2010 Professional pentru a vă aduce viziunea la realitate pe o gamă largă de platforme, inclusiv Windows, Windows Server, pe Web, în Cloud, Office și SharePoint și multe altele.

Figura 2.5.1.6

Noua legatură de date prin tragere-și-plasare (drag-and-drop data binding) din Windows Presentation Foundation (WPF) și proiectările Silverlight fac construcția de aplicații Windows și de aplicații Internet complexe (Rich Internet Applications – RIA), ușoară și rapidă, atât pentru designeri cât și programatori.

Figura 2.5.1.7

Visual Studio 2010 Professional include instrumente de testare pe unitate în cadrul IDE, care poate genera părțile necesare unei metode compilarea testelor de unitați, care ajută la asigurarea că fiecare unitate de cod se comportă in mod corect.

Figura 2.5.1.8

2.6 Internet Protocol(IP)

IP (Internet Protocol) este un protocol care asigură un serviciu de transmitere a datelor, fără o conexiune permanentă. Aceasta identifică fiecare interfață logică a echipamentelor conectate printr-un număr numit și „adresă IP". Versiunea de standard folosită în majoritatea cazurilor este de IPv4. În IPv4, standardul curent pentru comunicarea în Internet, adresa IP este reprezentată pe 32 de biți (de exemplu 192.168.0.1). Alocarea adreselor IP nu este arbitrară, ea se face de către organizații ce au sarcina să distribuie spații de adrese. De exemplu, RIPE este responsabilă cu gestiunea spațiului de adrese atribuit Europei.

Internetul este în proces de evoluție către o versiune nouă de IP, numită IPv6, care practic așteaptă un utilizator major, care să oblige folosirea acestei versiuni superioare și de alții. Ramurile Ministerului Apărării a Statelor Unite (DoD) au anunțat ca în decursul anilor 2009 – 2011 vor înceta relațiile cu furnizorii de servicii Internet care nu folosesc IPv6.

2.6.1 IPv4

Adresa IPv4 are o lungime de 32 de biți (4 octeți). Fiecare adresă identifică o rețea (network) și o stație de lucru (work station) din cadrul acestei rețelei. Notația obișnuită este obținută prin scrierea fiecărui octet în formă zecimală, separați de puncte. De exemplu, 192.168.0.1 este notația folosită pentru adresa 11000000.10101000.00000000.00000001

2.6.2 Subrețele

Atât adresele IPv4 cât și adresele IPv6 folosesc subnetarea, care constă în împărțirea adresei IP în două părți: prima parte este adresa de rețea iar a doua adresa de stație. Folosind o mască de rețea, calculatorul poate să determine unde să împartă adresa IP (conform standardului RFC 950).

Subnetarea a apărut ca o soluție pentru problema epuizării spațiului de adrese IP. Odată cu subrețelele a apărut distincția între adresarea de tip "classfull" (care ține cont de clasele de adrese) și adresarea de tip "classless" (ce oferă suportul pentru câmpul de subrețea).

În 1992 au fost introduse mecanismele de rutare pentru adresarea classless. Aceste mecanisme vizau atât protocoalele de rutare (CIDR), cât și cele rutate (VLSM).

2.6.3 VLSM (Variable Length Subnet Mask)

VLSM (Variable Length Subnet Mask) este un procedeu prin care se presupune precizarea unei măști de rețea pentru fiecare adresă asociată unei interfețe. Acest lucru permite împărțirea unei clase de adrese în mai multe rețele de dimensiuni diferite, micșorând astfel irosirea adreselor IP.

De exemplu, pentru o rețea de 30 de calculatoare (stații) se puteau folosi acum doar 32 de adrese (o rețea /27), față de 256 de adrese (o rețea de clasă C, /24).

2.6.4 IPv6

IPv6 este un protocol dezvoltat pentru înlocuirea IPv4 în Internet. Adresele au o lungime de 128 biți (16 octeți), ceea ce este considerat suficient pentru o perioadă destul de îndelungată. Teoretic există 2128, sau aproximativ 3,403 × 1038  de adrese unice. Lungimea mare a adresei permite împărțirea în blocuri de dimensiuni mari și implicit devine posibilă introducerea unor informații suplimentare de rutare în această adresă.

Windows Vista, Mac OS X, toate distribuțiile moderne de Linux, la fel și foarte multe alte sisteme de operare includ suport "nativ" pentru acest protocol. Cu toate acestea, IPv6 nu este la momentul dat folosit pe scară largă de către furnizorii de acces și servicii Internet, numiți Internet Service Providers sau ISP.

2.6.5 Rețelele WAN (Wide Area Network)

WAN desemnează tipul de rețele de transport de date care acoperă o zonă geografică mare și foarte mare (de exemplu de la un oraș la altul, de la o țară la alta sau de la un continent la altul), și folosesc de multe ori facilitățile de transmitere de date de la transportori publici (ca de exemplu companiile de telefonie). Tehnologiile WAN funcționează în general la nivelele inferioare ale modelului de referință OSI: physical layer, data link layer precum și network layer.

CAPITOLUL 3

3.1 Partea introductivă în jocul video

În capitolul dat v-a fi prezentată partea practică și anume jocul nostru video. Vor fi descrise toate etapele elaborării jocului precum și aspectele generale. Vor fi prezentate la general componentele din care este alcătuit jocul precum și alt material ce a fost folosit la alcătuire.

Scopul nostru propus a fost de a crea un joc pentru 2 persoane ce vor colabora pentru a trece toate misiunile. Fiecare jucător va fi dotat cu un set de abilități ce îi va permite să treacă de obstacolele din cadrul jocului. Vor fi posibile mai multe căi de trecere a etapelor, iar calea optimală fiind aleasă de jucători. Pe parcursul jocului jucătorilor vor avea oportunitatea să stringă aur care pe urmă poate fi schimbat pe diferite lucruri utile sau va putea fi folosit pentru înbunătățirea abilităților. Cu cât mai repede jucătorii trec o misiune cu atât mai mult aur vor primi la sfârșitul etapei. Fiecare jucător va avea 5 vieți, ceea ce înseamnă că jucătorii trebuie să fie precauți deoarece după epuizarea tuturor vieților trecerea etapei va deveni imposibilă. Ecranul va fi împărțit în două, o parte pentru primul jucător și cealaltă parte pentru jucătorul numărul 2. De la etapă la etapă nivelul de greutate va crește iar jucătorii vor avea tot mai puțin timp la dispoziție.

3.2 Descrierea părților jocului

Jucătorul numărul 1 sau Player 1 cum este numit în joacă va fi caracterul ce va poseda abilitatea de a arunca o săgeată cu o ață. Aceasta va permite jucătorului 2 să treacă de un anumit obstacol fără mare greutate. De asemenea jucătorul 1 va avea posibilitatea să distrugă unele cărămiză ce stau în calea eroilor noștri. A treia abilitate va fi scutul ce îl va proteja pe caracterul nostru de pierderea unei vieți. Caracterul va avea aceeași viteză de mișcare ca și caracterul numărul 2. Însă caracterul 2 va avea posibilitatea de a sări mai tare ce îi va oferi un mic avantaj în joc, în schimb abilitățile vor fi mai slabe. În imaginea 3.2.1 este prezentată structura caracterului 1 cum arată el în programul Unity.

Figura 3.2.1 – Jucătorul 1

Aici se vede pățile componente a jucătorului 1. Componentul GroundCheck este pentru a controla dacă personajul se află pe o suprafață sau el se află în aer. Acest component se va folosi pentru a permite jucătorului să sară dacă el se află pe sol sau sa-i interzică săritura dacă deja se află în aer. Următorul component este CeilingCheck, la fel ca și GroundCheck este pentru a controla dacă jucătorul se află în aer și dacă a atins un obiect cu proprietatea rigidbody, adică dacă a avut loc ciocnirea personajului cu acel obiect. Componentul NicknameFC arată numele personajului pe prima cameră iar componentul NicknameSC arată numele pe camera 2. Sunt folosite două componente NicknameSC deoarece camera numărul 2 este cea care raspunde de caracterul 1 și pe ea va fi arătat numele personajului 1 împreună cu o umbră pentru a delimita de locurile luminoase unde numele poate fi greu de văzut.

Figura 3.2.2 – Părțile obiectului NicknameFC

Componentul Bow reprezintă arcul jucătorului cu care acesta va putea arunca săgeata. Acest component are atașat scriptul Bow ce răspunde de declanșarea acțiunii pentru aruncarea săgeții. Aruncarea va fi posibilă doar dacă jucătorul se află pe sol. Mai jos este prezentat scriptul ce răspnde de aruncarea săgeții la apăsarea butonului C.

Figura 3.2.3 – Scripul pentru obeictul Bow

Componentul BigBang reprezintă abilitatea numărul 1 a primului jucător, anume acea ce permite distrugerea anumitor blocuri. Această abilitate reprezintă un sistem de particule pentru efectul special și un script ce răspunde pentru ștergerea blocurilor ce au intrat în raza abilității. La rândul lui, componentul BigBand este alcătuit din elementele Ray1, Ray2 și Ring1, toate aceastea servesc pentru a oferi un efect special mai fascinant. În figura 3.2.4 sunt reprezentate părțile obiectului BigBang.

Figura 3.2.4 – Părțile componente a obiectului BigBang

De asemenea caracterul 1 mai are un component aparte ce răspunde de timp. Componentul Player 1 Time are atașat un script numit PlayerTime ce răspunde de administrarea timpului precum și GUIText ce răspunde petru afișarea acestui timp la cameră. În figura 3.2.5 sunt prezentate părțile componente a obiectului Player1Time.

Figura 3.2.5 Părțile componente a obiectului Player1Time

Pentru afișarea timpului am folosit fontul ethocentric cu mărimea caracterelor 30 și stilul Italic. Poziționarea textului va fi în partea stângă sus a ecranului. Culoarea textului va fi albă iar spațiul între linii va constitui 1 mărime scalară din Unity.

La baza întrgului obiect Player 1 stă partea componentă ce răspunde de comportamentul primului jucător și anume scriptul pentru controlul caracterului, componentul rigidbody, componentul box și circe collider precum și componentul Animator pentru controlul asupra animațiilor a caracterului dat.

Figura 3.2.6 – Părțile componente a obiectului Player 1

Sunt folosite 2 collideruri pentru a face ca caracterul să se miște mai liber și să nu interacționeze cu absolut toate obiectele din jur și pentru a permite setarea mai detaliată a personjului dat. În continuare v-a fi descris scriptul ce răspunde pentru motorica primului caracter.

Figura 3.2.7 – Scriptul de control a primului caracter

În imaginea de mai sus este prezentată o parte din scriptul ce permite jucătorului să-l controleze pe caracterul. În script sunt date variabile precum speed ce răspunde de viteza cu care caracterului poate să se miște, variabila jumpForce ce răspunde de forța cu care poate sări acest caracter, variabila airControl ce răspunde de controlul personajului în aer, variablila Canvas ce face referință la UI(User Interface) și multe altele. Funcția Awake() ce va fi folosită pentru mai multe scripturi din cadrul proiectului este pentru a inițializa unele variabile necesare înaintea rulării jocului. Funcția Update() de asemenea va fi folosită pentru mai multe scripturi și ea este folosită atunci când intervin schimbi în joc și aceste schimbări trebuie aplicate la fiecare cadru. Funcția OnTriggerEnter2D de asemenea este o funcție des folosită și ea permite detectarea coliziunilor a două obiecte ce are cel puțin un component collider.

Jucătorl 2 sau Player 2 cum este numit în joacă va poseda abilități ce îi va permite teleportarea dintr-un loc în altul, va avea posibilitatea de a face o fuziune cu caracterul 1 în așa mod devenind mai puternic și căpătând unele abilități noi pe o perioadă scurtă de timp. A treia abilitate va fi posibilitatea de a înlătura unele obstacole cu ajutorul forței naturii. În figura 3.2.8 este reprezentată structura caracterului 2.

Figura 3.2.8 – Părțile componente a caracterului 2

Figura 3.2.9 Structura caracterului 2

Precum se vede în figura 3.2.9, structura caracterului 2 se aseamănă cu structura caracterului 1 cu mici deosebiri. Caracterul 2 are propriul său script ce răspude de motorica lui și de controlul de către jucător. De asemenea componentul Animator este diferit. După cum se vede mai sunt 2 componente noi: Portal Start și Portal Stop, acestea fiind proprietăți a abilității acestui caracter ce-i permite teleportarea de la un punct l altul. Este de menționat că el nu poate să se teleporteze în locuri unde nu a fost până acum.

Părțile componente a caracterului 2 la fel au GroundCheck și CeilingCheck ce îndeplinesc aceleași funcții ca și la primul jucător. Componentul NicknameFC arată numele jucătorului 2 pe camera 1 iar componentele NicknameSC sunt pentru a arăta numele jucătorului și umbra numelui pe camera numărul 2, ce este camera de control a acestui personaj. Componentul Etheral Flame reprezintă prima abilitate a personajului. Această abilitate constă în chemarea forței naturii. Componentul Sparkles din cadrul componentului Etheral Flame adaugă un efect special la abilitatea dată.

Personajul 2 la fel are un component al său ce răspunde de timp. În figura 3.2.10 sunt prezentate părțile componente a obiectului Player 2 Time.

Figura 3.2.10 – Părțile componente a obiectului Player2Time

Toată suprafața de joc o constituie o mulțime de cuburi ce au semnificația de resturi cosmice. Sunt mai multe feluri de cuburi, unele reprezentânt suprafața iar altele reprezentând obstacole ce trebuie trecute. În figura 3.2.11 este reprezentată structura obiectului Cubs.

Figura 3.2.11 – Părțile componente aobiectului Cubs

Figura 3.2.12 – Structura unui obiect de tip Cub

Componentele MainCamera și SecondCamera reprezintă cămerile ce vor urmări personajele din joc. MainCamera v-a urmări al doilea personaj iar SecondCamera pe primul personaj. De asemenea aceste cămeri au rolul de a afișa pe ecran conținutul ce ține de interfața utilizatorului sau mai numit UI. Structura unui obiect de tip cameră este prezentată în figura 3.2.13

Figura 3.2.13 – Structura obiectului de tip cameră

Acest obiect are atașat un script CameraControllerFirstPlayer ce răspunde de urmărirea primului caracter. Componentele GUILayer și Flare Layer sunt responsabile pentru interpretarea textului și efectelor speciale precum sistemul de particule. Proprietaea Projection arată modul de prezentarea a obiectelor la cameră. În cazul dat, Orthographic arată că obiectele trebuie prezentate în 2D.

Componentul coins reprezintă aurul ce jucătorii trebuie să-l colecteze. Aceste obiecte vor avea proprietatea de a se roti cu o viteză aleatoare. În figura 3.2.14 este prezentată structura obiectului CoinSprite.

Figura 3.2.14 Părțile componente a obiectului Coins

Figura 3.2.15 Structura unui obiect de tip CoinSprite

Un alt component este Canvas. Acest component răspunde pentru afișarea componentelor UI(user Interface) la cameră. În figura 3.2.16 este prezentată structura acestui Component.

Figura 3.2.16 Structura obiectului Canvas

Prima proprietate a obiectului dat arată poziționarea pe ecran, poziția pe axa X , poziția pe axa Y și dată este prezentă și poziția pe axa Z. Anchors arată cu cât să fie mișcat un component din cadrul UI la stânga sau la dreapta. Proprietatea Canvas din cadrul obiectului cu aceeași denumire permite configurarea afișării pe ecran a componentelor. Screen Space – Overlay arată că componentele UI trebuie să fie afișare deasupra componentelor ce țin de mediul înconjurător. Canvas Scaler permite setarea distanței a componentului față de obiectele ce interacționează cu personajul din joc. De asemean se poate seta mărimea Canvasului ca acesta să se adapteze la diferite rezoluții a monitorului pentru a oferi o afișare corectă tuturor elementelor din cadrul jocului.

Figura 3.2.17 Părțile componente a obiectului Canvas

Componentul Canvas are la bază mai multe obiecte, fiecare răspunzând pentru afișarea unui element grafic. Elementul Player1 răspunde pentru afișarea tuturor elementelor ce țin de jucătorul numărul 1. Aici sunt incluse pictograma jucătorului, prezentarea barului cu viețile rămase, afișarea abilităților. Elementul Player2 răspunde pentru afișarea elementelor leagate de jucătorul numărul 2. Aici de asemenea se includ pictograma barul cu viețile rămase precum și abilitățile disponibile. Elementele P1Coins și P1CoinsBackground răspund de afișarea aurului colectat de jucătorul 1 ia P2Coins și P2CoinsBackground afișează cantitatea de aur colectată de jucătorul 2. P1Gold și P2Gold servesc pentru o îmbogățire a conținutului din joc.

Figura 3.2.18

În figura 3.2.18 sunt prezentate unele componente ce persistă în cadrul jocului. Componentul Rain răspunde pentru lansarea evenimentului Ploaie, acest eveniment de fapt este abilitatea jucătorului 2 ce poate controla cu forța naturii. La baza acespui component stă mai multe sisteme de particule ce permite redarea ploii în joc într-un mod realistic precum și unele efecte precum vântul și stropii de ploaie. Componentul KillingFloor este compus din mai multe blocuri ce răspund pentru declanșarea evenimentului de “moarte” a personajului.

Figura 3.2.19 Structura componentului KillingCube

Elementul Box Collider răspunde pentru susținerea personajului pe blocuri, adică nu permite căderea acestuia în gol. Cylinder Mesh precizează forma figurii, în cazul nostu blocurile fiind de formă cilindrică. Elementul Animator răspunde pentru controlul animației legate de obiectul KillingCube. De asemenea acest component are un element ce răspunde pentru reprezentarea 3D. Deși jocul este în 2D, am folosit unele elemente 3D pentru a crea în joc efectul de volum.

Componentul Lasso reprezintă ața din abilitatea numărul 3 a jucătorului 1. Acest component nu este văzut în joc pînă când jucătorul 1 nu folosește abilitatea. El este alcătuit din mai multe elemente așa cum Mesh Filter ce ne arată că figura dată are forma cubică, Mesh Renderer ce reprezintă setările în timpul renderingului a figuii date, Box Collider ce ăi conferă posibilitatea de a interacționa cu alte obiecte din cadrul jocului. Deoarece componentul dat este un obiect prefabricat, el are și unele setări pentru materialul din care este compus, în cazul nostru materialul fiind Thunder_01. Main Color și Specular Color conferă nuanțele de culori pentru obiectul dat.

Figura 3.2.20 Structura componentului Lasso

Componentele PortalStart și PortalStop reprezintă abilitatea personajului 2 de a se teleporta dintr-un loc în altul. Această abilitatea v-a permite de asemenea și teleportarea personajul 1 prin portal. Aceste componente sunt alcătuite din mai multe sisteme de particule pentru afișarea grafică a acestei abilități. Scriptul PortalStart este responsabil pentru poziționarea portalului de start în fața jucătorului 2 iar scriptul PortalStop poziționează al doilea portal în fața personajului. În figura 3.2.21 este prezentat conținutul scriptului PortalStart iar în figura 3.2.22 este prezentat conținutul scriptului PortalStop.

Figura 3.2.21 Conținutul scriptului PortalStart Figura 3.2.22 Conținutul scriptului PortalStop

3.3 Componentul Animator

Componentul Animator răspunde pentru controlul animațiilor din cadrul unui obiect. Fiecare animație are setările sale precum durata, repetarea, tranziția, tagul și altele. Pentru ca o animație să înceapă să ruleze trebuie ca să fie îndeplinită o condiție. Condițiile se specifică cu ajutorul variabilelor. Variabilele sunt de tip bool, float, trigger și int. Variabila bool poate fi true sau false. În animator se folosește atunci când o condiție ori este adevărată ori nu.Variabila float se folosește când merge vorba de mișcare, adică cifre concrete precum viteza personajului sau forța cu care trebuie să sară caracterul dat. Variabila trigger se declanșează atunci când se îndeplinește o metodă sau un script. Setările unei animații sunt prezentate în figura 3.3.1.

Figura 3.3.1 Setările unei animații

De obicei toate animațiile se află pe stratul de bază sau cum mai este numit în engleză Base Layer. Dar la dorința sau necesitatea programatorului se mai pot adăuga și alte straturi pentru controlul a mai multor animații. În figura 3.3.2 este prezentat aspectul ferestrei pentru atribuirea variabileleor în cadrul animației.

Figura 3.3.2 Atribuirea variabilelor unie animații

Aici se văd mai multe tipuri de variabile precum float bool și trigger. Adăugarea unui nou parametru se efectuează cu ajutorul butonului “+” din colțul drept de sus.

În figura 3.3.3 este prezentat aspectul general a unui component Animator. În colțul stâng de sus se poate vedea partea de control a straturilor. De obicei aici se poate de redenumi sau de șters stratul dorit. Aici se poate de stabilit și așa numita opțiune IK Pass(Inverse Kinematics) ce permite rotirea obiectului în dependență de poziționarea “părintelui” acestuia.

Figura 3.3.3 Aspectul general a componentului Animator

Cu ajutorul tranzițiilor se poate stabili modul de trecere de la o animație la alta. Se poate stabili dutrata de trecere, condiția, stările de trecere precum și unele setări ca atomicitatea sau multitudinea de tranziții din cadrul animației.

Figura 3.3.4 Starea de tranziție

3.4 Inteligența artificială

Figura 3.4.1 Inteligeța artificială în viziunea unor savanți

 Când prima dată s-a vorbit de Inteligența Artificială (AI – Artificial Intelligence) în 1955, totul părea o utopie, un vis frumos pentru a fi realizat, un stadiu al dezvoltării considerat a fi greu de atins. În ultimii aproape 60 de ani, termenul a prins contur, devenind realitate, fiind în prezent întrbuințat în toate științele care doresc să se afirme. Inițiatorul său, profesorul John McCarthy a prezentat noul concept în vara anului 1957 la întrunirea “Darthmouth Summer Research Project on Artificial Intelligence”.

Inteligența Artificială poate fi definită ca fiind simularea inteligenței umane procesată de mașini, în special, de sisteme de computere. Acest domeniu a fost caracterizat de cercetări complexe în laboratoare și doar destul de recent a devenit o parte a tehnologiei în aplicații comerciale.

În ultimii ani au avut loc numeroase discuții în privința filozofiei Inteligenței Artificiale și rolul său în dezvoltarea tehnologiilor. De-a lungul timpului, opinia publică și-a pus unele întrebări legate de avansul tehnologic bazat pe Inteligența Artificială:

-pot fi construite mașini cu conștiință ?

-în ce măsură mașinile inteligente vor face parte din viața oamenilor ?

-sunt oamenii capabili să construiască mașini cu adevărat inteligente și dacă da, cum le vor controla ?

-avem cu adevărat nevoie de mașini inteligente ?

-cine va deține puterea, omul sau mașina ?

 Termenul de Inteligența Artificială este întâlnit azi în numeroase publicații tehnice, militare, medicale, științifice, de obicei, când vine vorba de aplicații ce realizează performanțe de care numai omul era capabil să le execute: recunoașterea și analiza vocii și a imaginilor, traduceri dintr-o limbă în alta, diferite jocuri de inteligență, luarea unor decizii complexe fără intervenția unui operator uman și altele. Inițial, obiectivele Inteligenței Artificiale au fost foarte ambițioase: mașina trebuia să rezolve diferite probleme, să se învețe din propria experiență și din evenimentele exterioare sistemului său, să efectueze raționamente, să conceapă noi obiecte cu proprietăți prestabilite.

Principalul scop al Inteligenței Artificiale este de a imita creierul uman în modul în care acesta gândește, răspunde și interacționează. În pofida nivelului atins de cercetători, acest deziderat nu va fi atins în timpul apropiat, creierul uman fiind încă o enigmă, aproape imposibil de analizat matematic sau tradus în limbaj mașină.

Indiferent de puterea lor de procesare, mașinile nu vor fi capabile să înlocuiască, probabil niciodată, omul, cea mai inteligentă și puternică ființă de pe Pământ. Această afirmație este sprijinită de numeroase rațiuni. Cel mai important argument împotriva dezvoltării mașinii cu adevărat inteligente este cel evoluționar. Mașinile nu au parcurs rigorile de supraviețuire timp de milioane de ani precum oamenii. Modul în care aceștia gândesc, interacționează și se adaptează sunt faze de dezvoltare ale intelectului, diferit fiecărui individ în parte. Acestui intelect i-au fost necesare milioane de ani să evoluționeze, reprezentând, astfel, o etapă extrem de dificil de implementat în dezvoltarea unei mașinii inteligente.

Unii oameni de știință afirmă că inteligența umană este imposibil de atins și de întrecut pe cale artificială de o mașină. În 1986, matematicianul britanic Roger Penrose a susținut că mecanismele de funcționare specifice creierului uman nu pot fi replicate de mașină, nici măcar în principiu. În prezent, creierul uman este considerat să fi cel mai sofisticat computer cunoscut. Afirmația nu poate fi negată, dar creierul uman funcționează pe aceleași principii ca oricare alt creier din regnul animal. Spre a înțelege inteligența umană, trebuie mai întâi să înțelegem modul în care se formează cele mai simple gânduri. Încercarea de a trece peste aceste etape primare și de a cerceta direct acțiunile complexe ale creierului uman este aproape imposibilă.

Până în prezent s-au dezvoltat două metode diferite de a aborda Inteligența Artificială. Prima metodă este cunoscută sub numele de “top-down approach” sau “symbolic approach to AI”.Spre exemplu, vederea artificială a unei mașini (controlată de un computer) a fost abordată prin construcția unor algoritmi și aplicarea lor pe o serie de date de intrare. Fiecare pas al procesului de vedere trebuie evaluat, un algoritm urmând să transforme unele date de intrare într-o formă mai ușor de utilizat. Această metodă are dezavantajul că este prea dependentă de mașină și poate fi utilizată doar în probleme foarte restrânse. De asemenea, abordarea se bazează în mare parte pe cunoștințele programatorului, absolut nimic nu poate fi adăugat automat.

A doua metodă constă în contrucția unei rețele neuronale care să asigure convertirea unei imagini în informație. În anii ’70 preocupările au fost concentrate pentru constituirea unei astfel de rețele, denumită “perceptron”. Acesta, o combinație reușită de rețea neuronală și informații pre-procesate, a permis pentru prima dată recunoașterea imaginilor de către un computer. Perceptronul s-a bazat pe ceea ce a reprezentat atunci primul stadiu în vederea inteligenței artificiale, fiind folosit ulterior în construcția mașinilor autoghidate.

3.5 Viitorul Inteligenței artificiale

Teoria conform căreia mașinile conduse de Inteligența Artificială, care vor prelua controlul asupra lumii este, evident, de domeniul science fiction. Numeroasele conferințe în domeniul roboticii au arătat realizări extraordinare din punct de vedere tehnologic și informațional, ce vin în sprijinul umanității, nicidecum în amenințarea ei. Astfel, roboții actuali sunt capabili să lucreze în medii inaccesibile pentru om, realizează singuri o serie de operații tehnologice cu precizie ridicată, Inteligența Artificială ce o înglobează fiind, de fapt, o prelungire a inteligenței umane care i-a creat.

Vor fi capabili roboții din viitor să-și creeze o societate în care să dezvolte o cultură proprie, un limbaj și interacțiuni între membrii săi ? Greu de crezut.

Dar totuși, care este viitorul Inteligenței Artificiale ? Oamenii de știință lucrează deja la diferite modele de mașini capabile să învețe, fără a fi programate pentru fiecare acțiune ce o vor întreprinde. Mediul în care funcționează și “evoluează” își va pune, în mod cert, amprenta asupra “personalității” mașinii, lucru pe care oamenii îl consideră, mai degrabă, folositor și interesant decât amenințător. Diferitele mașini care vor face parte din viața zilnică a oamenilor vor învăța toul despre aceștia, fiind gata să reacționeze corect la cele mai simple comanzi. Departe de a deveni numai “mașini de companie”, acestea vor veghea, corecta și sprijini omul în deciziile sale.

În acest moment este dificilă prezicerea cu exactitate a viitorului Inteligenței Artificiale. Ce se poate, totuși, spune acum este că Inteligența Artificială va fi înglobată în aplicații din ce în ce mai sofisticate. Sigur, se pot imagina identități umane și mașini reunite într-o conștiință colectivă, structurată într-o rețea complexă, cu granițe și abilități ce vor depăși cu mult posibilitățile individuale ale unei minți naturale sau artificiale. Scriitorul Francis Heylighen a spus: “Un astfel de creier global va funcționa ca un sistem nervos pentru un superorganism social, un sistem integrat format din întreaga societate umană”. Clișeul “let’s put our minds together on this problem” va deveni o realitate, permițând oamenilor și mașinilor să-și combine capacitățile individuale pentru a rezolva probleme în domenii diverse, de la teoria fizicii, la cercetări în medicină, explorarea spațiului cosmic etc.

Concluzie

În lucrarea de față am prezentat aspectele teoretice și aspectele practice a jocurilor virtuale. De asemenea am făcut analiza industriei jocurilor video și am descris importanța divertismentului în sistemul educațional și sistemul de învățământ. Am prezentat una din problematica jocurilor ce o constituie violența și am descris o posibilă soluție a acestei probleme care constă în implementarea contentului online și a elementelor de logică, la fel și necesitatea cooperativității între jucători. Inteligența artificială este de asemenea un domeniu pe care nu l-am trecut cu vederea și pe care l-am descris în lucrarea dată. Pentru partea practică am făcut un joc video pentru a demonstra posibilitatea creării unui produs de divertisment ce nu sporește violența și nu-i fac pe tineri să devină agresivi. Pentru crearea proiectului am folosit diverse programe pe care l-eam descris în capitolul 2 a lucrării date. Jocul creat nu este unul ideal și încă rămâne de a fi perfecționat pe viitor. Este necesar de a redacta unele componente ce țin de coliziune la fel și schimbarea comportamentului unor abilitîți a jucătorilor. Avem în plan să implementăm mai multe elemente ce țin de inteligența artificială precum și posibilitatea jocului de a folosi rețeaua de internet. Dacă jocul v-a avea succes pe piață, atunci vom mai revizui posibilitatea de a face partea grafică mai performantă precum și optimizarea acestuia. În linii generale, toate obiectivele propuse la început, au fost analizate și descrise în lucrarea dată. Desigur, tot timpul există loc pentru ceva mai bun, dar toate lucrurile devin mai bune cu timpul.

Bibliografie

Unity3D.com , forum [Resursă electronică]. – Regim de accesare: http://forum.unity3d.com/forums/2d.53/

Unity3D.com. sciptare – [Resursă electronică]. Regim de accesare: http://docs.unity3d.com/Manual/ScriptingSection

MonoDevelop.com,[Resursă electronică]. – Regim de accesare: http://www.monodevelop.com/documentation/creating-a-simple-solution/

Buysoftware.ro, [Resursă electronică]. Regim de accesare:

http://www.buysoftware.ro/visual-studio-2010-professional.html

Jocurile Video, articol, [Resursă electronică]. Regim de accesare:

http://www.ziare.com/articole/jocuri+video+calculator+consola

Inteligența Artificială, articol [Resursă electronică]. Regim de accesare:

http://www.catia.ro/articole/ai/ai.htm

Adresă IP, [Resursă electronică]. Regim de accesare:

http://www.catia.ro/articole/ai/ai.htm

Anexa A

Codul de program pentru fisierul insert.php

<?php

$con=mysqli_connect("localhost","root","","submarin");

// Check connection

if (mysqli_connect_errno())

{

echo "Failed to connect to MySQL: " . mysqli_connect_error();

}

$sql1="INSERT INTO datele_cercetare (temp_interna, temp_externa,temp_motor, umeditatea, luminozitatea, data_time)

VALUES ('$_POST[temp_interna]','$_POST[temp_externa]','$_POST[temp_motor]','$_POST[umeditatea]','$_POST[luminozitatea]','$_POST[data_time]')";

if (!mysqli_query($con,$sql1))

{ die('Error: 1 ' . mysqli_error($con)); }

$sql2="INSERT INTO gps (data_time, latitudinea,v_e,longitudinea,n_s)

VALUES ('$_POST[data_time]','$_POST[latitudinea]','$_POST[v_e]','$_POST[longitudinea]','$_POST[n_s]')";

if (!mysqli_query($con,$sql2))

{ die('Error: 2 ' . mysqli_error($con)); }

mysqli_close($con);

?>

Anexa B

Codul de program pentru microcontroller de tip arduino

#include <Wire.h>

#include <Servo.h>

int vibr,vibration=51;//pentru vibration

int bec_pin=19;//pentru bec

Servo servo1;

Servo servo2;

Servo motor1;

Servo motor2;

//=================================

//ce tine de ultrasonor

#include <NewPing.h>

NewPing sonar1(22, 23, 50); // NewPing setup of pins and maximum distance.

NewPing sonar2(24, 25, 50); // NewPing setup of pins and maximum distance.

NewPing sonar3(26, 27, 50); // NewPing setup of pins and maximum distance.

const int MAX = 125;

unsigned int sensor[3]={0,0,0};

//=================================

//======================================

//pentru un timer timp de sec

unsigned long currentTime;

unsigned long loopTime;

//==========================================

int b=0;// valoare temporara pentru ESC

String inputString; // a string to hold incoming data

boolean stringComplete = false; // whether the string is complete

boolean vibration_control = false;

void setup()

{

servo1.attach(17);

servo2.attach(16);

motor1.attach(14);

motor2.attach(15);

delay(100);

motor1.write(20);

motor2.write(20);

servo1.write(20);

servo2.write(20);

delay(100);

Serial.begin(9600);

pinMode(bec_pin,OUTPUT);//pinul pentru lumina, activam de iesire

pinMode(vibration,INPUT);

//becuri(1);

//==================variabilele timer

currentTime = millis();

loopTime = currentTime;

//

}

void loop()

{

int a;

if (vibration_control != digitalRead(vibration))

{vibration_control=digitalRead(vibration);vibr=1;}

if (Serial.available() !=0)

{

a=Serial.read()-'0'; becuri(a);

//if (a==2) test_motor();

//if (a==3) test_servo();

}

//if (Serial.available() !=0) {a=Serial.read()-'0'; becuri(2);}

mediaSensor();

currentTime = millis();

if(currentTime >= (loopTime + 100)){

//===============================0.1 secunda timer==================

Serial.print("#");Serial.print(";");

//Serial.print("Distanta: ");

Serial.print(sensor[1]);Serial.print(";");//ultrasunetul

//Serial.print(" ; Lumina: ");

Serial.print(lumina()); Serial.print(";");

//Serial.print(" ; Temperatura afara: ");

Serial.print(temp_ext()); Serial.print(";");

//Serial.print(" ; Temperatura motor1: ");

Serial.print(temp_motor1()); Serial.print(";");

//Serial.print(" ; Temperatura motor2: ");

Serial.print(temp_motor2());Serial.print(";");

//Serial.print(" ; Tensiunea bateriei: ");

Serial.print(voltage()); Serial.print(";");

// Serial.print(" ; Vibratie: ");

Serial.print((int)vibr);Serial.print(";");

Serial.println("");

vibr=0;

//================================================================

loopTime = currentTime; // Updates loopTime

}

// Serial.println(lumina());

//Serial.println(temp_ext());

if (Serial.available() != 0) {a = Serial.read()-'0';becuri(a);}

// Serial.print(temp_motor1()); Serial.print(" ");

// Serial.println(temp_motor2());

// delay(100);

// if (stringComplete) {

// //a=int(inputString);

// servo_sting(a);servo_drept(a);

// // clear the string:

// inputString = "";

// stringComplete = false;

// }

}

void servo_sting(int a)

{

Serial.print(a);

servo1.write(a); // sets the servo position according to the scaled value

delay(15);

}

void servo_drept(int a)

{

servo2.write(a);

delay(15);

}

void serialEvent() {

while (Serial.available()) {

// get the new byte:

char inChar = (char)Serial.read();

if (inChar == '\n') {

stringComplete = true;

}

// add it to the inputString:

if(stringComplete == false) {

inputString += inChar;

}

// if the incoming character is a newline, set a flag

// so the main loop can do something about it:

}

}

float voltage()

{

int voltage;

float temp;

voltage=analogRead(9);

temp=voltage/4.2;

temp=(temp/10);

return temp;

}

int lumina()

{

int lumina;

lumina = analogRead(10);

lumina=constrain(lumina,1,800);

lumina = map(lumina,1,800,0,100);

return lumina;

}

float temp_motor1 ()

{

int temp;

temp=analogRead(11);

temp=temp/22.75;

return temp;

}

float temp_motor2 ()

{

int temp;

temp=analogRead(12);

temp=temp/19.41;

return temp;

}

float temp_ext ()

{

float temp;

temp = analogRead(8); //read the value from the sensor

temp = (5.0 * temp * 100.0)/1024.0; //convert the analog data to temperature

return temp;

}

void becuri(int a)

{

if (a==1)

{

digitalWrite(bec_pin,HIGH);//Serial.print("am aprins becurile");

}

if (a==0) {digitalWrite(bec_pin,LOW);

//Serial.print("am stins becurile");

}

if (a==2) {test_motor();}

if (a==3) {test_servo();}

//if (a!=1 && a!=0) {Serial.print("nu avem asa comanda ");Serial.println(a);}

}

void motor_sting(int a)

{

if (a==1) {b+=5;motor1.write(b);}

if (a==0) {b-=5;motor1.write(b);}

if (a!=1 && a!=0) {Serial.print("nu avem asa comanda ");Serial.println(a);}

}

void motor_drept(int a)

{

if (a==1) {b+=5;motor2.write(b);}

if (a==0) {b-=5;motor2.write(b);}

if (a!=1 && a!=0) {Serial.print("nu avem asa comanda ");Serial.println(a);}

}

//***********Media la 10 numerede la sensori**************

void mediaSensor()

{

//Serial.println("media sensor");

int prezent[5]={0,0,0,0},precedent[5]={0,0,0,0}, temp[5]={0,0,0,0},contor = 0;

for(int i = 0;i < 4; i++){

// Serial.println("calculam prezent la fiecare");delay(1000);

// prezent[0] = sonar1.ping()/US_ROUNDTRIP_CM;//Serial.print(" 1 ");Serial.print(prezent[0]);

prezent[1] = sonar2.ping()/US_ROUNDTRIP_CM;//Serial.print(" 2 ");Serial.print(prezent[1]);

// prezent[2] = sonar3.ping()/US_ROUNDTRIP_CM;//Serial.print(" 3 ");Serial.print(prezent[2]);

// Serial.println("am terminat de calculat prezentu");delay(1000);

if(i !=0 ){

// Serial.print("executam operatia ");Serial.println(i);delay(1000);

// temp[0] = precedent[0] – prezent[0];//Serial.print(" 4 ");Serial.print(temp[0]);

temp[1] = precedent[1] – prezent[1];//Serial.print(" 5 ");Serial.print(temp[1]);

// temp[2] = precedent[2] – prezent[2];//Serial.print(" 6 ");Serial.print(temp[2]);

if(temp[0]>= -10 && temp[0] <= 10 && temp[1]>= -10 && temp[1] <= 10 && temp[2]>= -10 && temp[2] <= 10)

{

// Serial.println("intram in conditia cind abaterea nu e mare");delay(1000);

contor = 0;

}

else{

//Serial.print("abaterea e mare si contorul este " ); Serial.println(contor);delay(1000);

i–;

contor++;

if(contor == 5){

// Serial.println("am intrat in coditia cind la rind de 5 ori a fost abatere");delay(1000);

//sensor [0] = MAX*4;

sensor [1] = MAX*4;

//sensor [2] = MAX*4;

break;

}

}

}

delay(20);

}

sensor[0]=sensor[0]/4;

sensor[1]=sensor[1]/5;

sensor[2]=sensor[2]/4;

}

void test_motor()

{

for(int pos = 20; pos < 50; pos += 1) // goes from 0 degrees to 180 degrees

{ // in steps of 1 degree

motor1.write(pos); // tell servo to go to position in variable 'pos'

delay(100); // waits 15ms for the servo to reach the position

}

for(int pos = 20; pos>=1; pos-=1) // goes from 180 degrees to 0 degrees

{

motor1.write(pos); // tell servo to go to position in variable 'pos'

delay(100); // waits 15ms for the servo to reach the position

}

}

void test_servo()

{

for(int pos = 50; pos < 170; pos += 1) // goes from 0 degrees to 180 degrees

{ // in steps of 1 degree

servo1.write(pos); // tell servo to go to position in variable 'pos'

servo2.write(pos);

delay(50); // waits 15ms for the servo to reach the position

}

for(int pos = 170; pos>=50; pos-=1) // goes from 180 degrees to 0 degrees

{

servo1.write(pos); // tell servo to go to position in variable 'pos'

servo2.write(pos);

delay(50); // waits 15ms for the servo to reach the position

}

}

Anexa C

Codul de program pentru aplicația descktop limbajul C#

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Windows.Forms;

using System.IO.Ports;

using System.Windows;

using System.Threading;

using System.Drawing.Imaging;

//using System.Diagnostics.Debugger

namespace continenta

{

public partial class Form1 : Form

{

SerialPort SerialPort1 = new SerialPort();

String RxString;

int ggg;

String[] unghi;

//pentru serial recive

String inputString;

Boolean stringComplete = false; // whether the string is complete

String[] receivedData;

//String[] unghi;

double xData, yData;

System.Drawing.Pens rosu, negru,albastru;

public Form1()

{

InitializeComponent();

button2.Enabled = false;

this.MouseMove += new MouseEventHandler(Form1_MouseMove);

SerialPort1.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);

}

private void numericUpDown1_ValueChanged(object sender, EventArgs e)

{

}

private void button1_Click(object sender, EventArgs e)

{

try

{

//desenare();

SerialPort1.PortName = "COM4";

SerialPort1.BaudRate = 9600;

SerialPort1.Parity = Parity.None;

SerialPort1.StopBits = StopBits.One;

SerialPort1.DataBits = 8;

SerialPort1.Handshake = Handshake.None;

SerialPort1.Open();

if (SerialPort1.IsOpen)

{

button1.Enabled = false;

button2.Enabled = true;

}

//SerialPort1.Close();

}

catch (System.Exception excep)

{

MessageBox.Show(excep.Message);

}

}

private void Serial_Close() {

Console.WriteLine("Serial close");

SerialPort1.Close();

}

private void button2_Click(object sender, EventArgs e)

{

try

{

Console.WriteLine("executam disconect");

System.Threading.Thread.Sleep(1000);

//Application.Exit();

Thread sThread = new Thread(Serial_Close);

sThread.Start();

//SerialPort1.Close();

// SerialPort1.Dispose();

button1.Enabled = true;

button2.Enabled = false;

}

catch (System.Exception excep)

{

MessageBox.Show(excep.Message);

SerialPort1.Close();

}

}

private void Form1_FormClosing(object sender, FormClosingEventArgs e)

{

}

private void DisplayText(object sender, EventArgs e)

{

textBox2.Text = unghi[6] + " V";

textBox3.Text = unghi[7];

textBox4.Text = "0 A";

textBox5.Text=unghi[3]+"*C";

textBox6.Text = unghi[4] + "*C";

textBox7.Text = unghi[5] + "*C";

textBox8.Text=unghi[2]+"%";

textBox9.Text = "0 cm";

textBox10.Text = unghi[1]+" cm";

textBox11.Text = "0 cm";

}

private void DataReceivedHandler(object sender,SerialDataReceivedEventArgs e)

{

string indata = SerialPort1.ReadLine().ToString();

Console.Write(indata);

RxString = indata;

unghi = RxString.Split(';');

if (unghi[0]=="#") this.Invoke(new EventHandler(DisplayText));

}

void Form1_MouseMove(object sender, MouseEventArgs e)

{

}

private void button3_Click(object sender, EventArgs e)

{

}

double modifiedMap(double x, double in_min, double in_max, double out_min, double out_max)

{

double temp = (x – in_min) * (out_max – out_min) / (in_max – in_min) + out_min;

temp = (int)(8 * temp + .5);

return (double)temp / 8;

}

long map(long x, long in_min, long in_max, long out_min, long out_max)

{

return (x – in_min) * (out_max – out_min) / (in_max – in_min) + out_min;

}

private void button4_Click(object sender, EventArgs e)

{

SerialPort1.WriteLine("2");//demonstrare motor

}

private void button5_Click(object sender, EventArgs e)

{

Form3 form3 = new Form3();

form3.Show();

}

private void checkBox1_CheckedChanged(object sender, EventArgs e)

{

if (!checkBox1.ThreeState)

{

checkBox1.ThreeState = true;

SerialPort1.WriteLine("1");

}

else

{

checkBox1.ThreeState = false;

SerialPort1.WriteLine("0");

}

}

}

}

Bibliografie

Unity3D.com , forum [Resursă electronică]. – Regim de accesare: http://forum.unity3d.com/forums/2d.53/

Unity3D.com. sciptare – [Resursă electronică]. Regim de accesare: http://docs.unity3d.com/Manual/ScriptingSection

MonoDevelop.com,[Resursă electronică]. – Regim de accesare: http://www.monodevelop.com/documentation/creating-a-simple-solution/

Buysoftware.ro, [Resursă electronică]. Regim de accesare:

http://www.buysoftware.ro/visual-studio-2010-professional.html

Jocurile Video, articol, [Resursă electronică]. Regim de accesare:

http://www.ziare.com/articole/jocuri+video+calculator+consola

Inteligența Artificială, articol [Resursă electronică]. Regim de accesare:

http://www.catia.ro/articole/ai/ai.htm

Adresă IP, [Resursă electronică]. Regim de accesare:

http://www.catia.ro/articole/ai/ai.htm

Anexa A

Codul de program pentru fisierul insert.php

<?php

$con=mysqli_connect("localhost","root","","submarin");

// Check connection

if (mysqli_connect_errno())

{

echo "Failed to connect to MySQL: " . mysqli_connect_error();

}

$sql1="INSERT INTO datele_cercetare (temp_interna, temp_externa,temp_motor, umeditatea, luminozitatea, data_time)

VALUES ('$_POST[temp_interna]','$_POST[temp_externa]','$_POST[temp_motor]','$_POST[umeditatea]','$_POST[luminozitatea]','$_POST[data_time]')";

if (!mysqli_query($con,$sql1))

{ die('Error: 1 ' . mysqli_error($con)); }

$sql2="INSERT INTO gps (data_time, latitudinea,v_e,longitudinea,n_s)

VALUES ('$_POST[data_time]','$_POST[latitudinea]','$_POST[v_e]','$_POST[longitudinea]','$_POST[n_s]')";

if (!mysqli_query($con,$sql2))

{ die('Error: 2 ' . mysqli_error($con)); }

mysqli_close($con);

?>

Anexa B

Codul de program pentru microcontroller de tip arduino

#include <Wire.h>

#include <Servo.h>

int vibr,vibration=51;//pentru vibration

int bec_pin=19;//pentru bec

Servo servo1;

Servo servo2;

Servo motor1;

Servo motor2;

//=================================

//ce tine de ultrasonor

#include <NewPing.h>

NewPing sonar1(22, 23, 50); // NewPing setup of pins and maximum distance.

NewPing sonar2(24, 25, 50); // NewPing setup of pins and maximum distance.

NewPing sonar3(26, 27, 50); // NewPing setup of pins and maximum distance.

const int MAX = 125;

unsigned int sensor[3]={0,0,0};

//=================================

//======================================

//pentru un timer timp de sec

unsigned long currentTime;

unsigned long loopTime;

//==========================================

int b=0;// valoare temporara pentru ESC

String inputString; // a string to hold incoming data

boolean stringComplete = false; // whether the string is complete

boolean vibration_control = false;

void setup()

{

servo1.attach(17);

servo2.attach(16);

motor1.attach(14);

motor2.attach(15);

delay(100);

motor1.write(20);

motor2.write(20);

servo1.write(20);

servo2.write(20);

delay(100);

Serial.begin(9600);

pinMode(bec_pin,OUTPUT);//pinul pentru lumina, activam de iesire

pinMode(vibration,INPUT);

//becuri(1);

//==================variabilele timer

currentTime = millis();

loopTime = currentTime;

//

}

void loop()

{

int a;

if (vibration_control != digitalRead(vibration))

{vibration_control=digitalRead(vibration);vibr=1;}

if (Serial.available() !=0)

{

a=Serial.read()-'0'; becuri(a);

//if (a==2) test_motor();

//if (a==3) test_servo();

}

//if (Serial.available() !=0) {a=Serial.read()-'0'; becuri(2);}

mediaSensor();

currentTime = millis();

if(currentTime >= (loopTime + 100)){

//===============================0.1 secunda timer==================

Serial.print("#");Serial.print(";");

//Serial.print("Distanta: ");

Serial.print(sensor[1]);Serial.print(";");//ultrasunetul

//Serial.print(" ; Lumina: ");

Serial.print(lumina()); Serial.print(";");

//Serial.print(" ; Temperatura afara: ");

Serial.print(temp_ext()); Serial.print(";");

//Serial.print(" ; Temperatura motor1: ");

Serial.print(temp_motor1()); Serial.print(";");

//Serial.print(" ; Temperatura motor2: ");

Serial.print(temp_motor2());Serial.print(";");

//Serial.print(" ; Tensiunea bateriei: ");

Serial.print(voltage()); Serial.print(";");

// Serial.print(" ; Vibratie: ");

Serial.print((int)vibr);Serial.print(";");

Serial.println("");

vibr=0;

//================================================================

loopTime = currentTime; // Updates loopTime

}

// Serial.println(lumina());

//Serial.println(temp_ext());

if (Serial.available() != 0) {a = Serial.read()-'0';becuri(a);}

// Serial.print(temp_motor1()); Serial.print(" ");

// Serial.println(temp_motor2());

// delay(100);

// if (stringComplete) {

// //a=int(inputString);

// servo_sting(a);servo_drept(a);

// // clear the string:

// inputString = "";

// stringComplete = false;

// }

}

void servo_sting(int a)

{

Serial.print(a);

servo1.write(a); // sets the servo position according to the scaled value

delay(15);

}

void servo_drept(int a)

{

servo2.write(a);

delay(15);

}

void serialEvent() {

while (Serial.available()) {

// get the new byte:

char inChar = (char)Serial.read();

if (inChar == '\n') {

stringComplete = true;

}

// add it to the inputString:

if(stringComplete == false) {

inputString += inChar;

}

// if the incoming character is a newline, set a flag

// so the main loop can do something about it:

}

}

float voltage()

{

int voltage;

float temp;

voltage=analogRead(9);

temp=voltage/4.2;

temp=(temp/10);

return temp;

}

int lumina()

{

int lumina;

lumina = analogRead(10);

lumina=constrain(lumina,1,800);

lumina = map(lumina,1,800,0,100);

return lumina;

}

float temp_motor1 ()

{

int temp;

temp=analogRead(11);

temp=temp/22.75;

return temp;

}

float temp_motor2 ()

{

int temp;

temp=analogRead(12);

temp=temp/19.41;

return temp;

}

float temp_ext ()

{

float temp;

temp = analogRead(8); //read the value from the sensor

temp = (5.0 * temp * 100.0)/1024.0; //convert the analog data to temperature

return temp;

}

void becuri(int a)

{

if (a==1)

{

digitalWrite(bec_pin,HIGH);//Serial.print("am aprins becurile");

}

if (a==0) {digitalWrite(bec_pin,LOW);

//Serial.print("am stins becurile");

}

if (a==2) {test_motor();}

if (a==3) {test_servo();}

//if (a!=1 && a!=0) {Serial.print("nu avem asa comanda ");Serial.println(a);}

}

void motor_sting(int a)

{

if (a==1) {b+=5;motor1.write(b);}

if (a==0) {b-=5;motor1.write(b);}

if (a!=1 && a!=0) {Serial.print("nu avem asa comanda ");Serial.println(a);}

}

void motor_drept(int a)

{

if (a==1) {b+=5;motor2.write(b);}

if (a==0) {b-=5;motor2.write(b);}

if (a!=1 && a!=0) {Serial.print("nu avem asa comanda ");Serial.println(a);}

}

//***********Media la 10 numerede la sensori**************

void mediaSensor()

{

//Serial.println("media sensor");

int prezent[5]={0,0,0,0},precedent[5]={0,0,0,0}, temp[5]={0,0,0,0},contor = 0;

for(int i = 0;i < 4; i++){

// Serial.println("calculam prezent la fiecare");delay(1000);

// prezent[0] = sonar1.ping()/US_ROUNDTRIP_CM;//Serial.print(" 1 ");Serial.print(prezent[0]);

prezent[1] = sonar2.ping()/US_ROUNDTRIP_CM;//Serial.print(" 2 ");Serial.print(prezent[1]);

// prezent[2] = sonar3.ping()/US_ROUNDTRIP_CM;//Serial.print(" 3 ");Serial.print(prezent[2]);

// Serial.println("am terminat de calculat prezentu");delay(1000);

if(i !=0 ){

// Serial.print("executam operatia ");Serial.println(i);delay(1000);

// temp[0] = precedent[0] – prezent[0];//Serial.print(" 4 ");Serial.print(temp[0]);

temp[1] = precedent[1] – prezent[1];//Serial.print(" 5 ");Serial.print(temp[1]);

// temp[2] = precedent[2] – prezent[2];//Serial.print(" 6 ");Serial.print(temp[2]);

if(temp[0]>= -10 && temp[0] <= 10 && temp[1]>= -10 && temp[1] <= 10 && temp[2]>= -10 && temp[2] <= 10)

{

// Serial.println("intram in conditia cind abaterea nu e mare");delay(1000);

contor = 0;

}

else{

//Serial.print("abaterea e mare si contorul este " ); Serial.println(contor);delay(1000);

i–;

contor++;

if(contor == 5){

// Serial.println("am intrat in coditia cind la rind de 5 ori a fost abatere");delay(1000);

//sensor [0] = MAX*4;

sensor [1] = MAX*4;

//sensor [2] = MAX*4;

break;

}

}

}

delay(20);

}

sensor[0]=sensor[0]/4;

sensor[1]=sensor[1]/5;

sensor[2]=sensor[2]/4;

}

void test_motor()

{

for(int pos = 20; pos < 50; pos += 1) // goes from 0 degrees to 180 degrees

{ // in steps of 1 degree

motor1.write(pos); // tell servo to go to position in variable 'pos'

delay(100); // waits 15ms for the servo to reach the position

}

for(int pos = 20; pos>=1; pos-=1) // goes from 180 degrees to 0 degrees

{

motor1.write(pos); // tell servo to go to position in variable 'pos'

delay(100); // waits 15ms for the servo to reach the position

}

}

void test_servo()

{

for(int pos = 50; pos < 170; pos += 1) // goes from 0 degrees to 180 degrees

{ // in steps of 1 degree

servo1.write(pos); // tell servo to go to position in variable 'pos'

servo2.write(pos);

delay(50); // waits 15ms for the servo to reach the position

}

for(int pos = 170; pos>=50; pos-=1) // goes from 180 degrees to 0 degrees

{

servo1.write(pos); // tell servo to go to position in variable 'pos'

servo2.write(pos);

delay(50); // waits 15ms for the servo to reach the position

}

}

Anexa C

Codul de program pentru aplicația descktop limbajul C#

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Windows.Forms;

using System.IO.Ports;

using System.Windows;

using System.Threading;

using System.Drawing.Imaging;

//using System.Diagnostics.Debugger

namespace continenta

{

public partial class Form1 : Form

{

SerialPort SerialPort1 = new SerialPort();

String RxString;

int ggg;

String[] unghi;

//pentru serial recive

String inputString;

Boolean stringComplete = false; // whether the string is complete

String[] receivedData;

//String[] unghi;

double xData, yData;

System.Drawing.Pens rosu, negru,albastru;

public Form1()

{

InitializeComponent();

button2.Enabled = false;

this.MouseMove += new MouseEventHandler(Form1_MouseMove);

SerialPort1.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);

}

private void numericUpDown1_ValueChanged(object sender, EventArgs e)

{

}

private void button1_Click(object sender, EventArgs e)

{

try

{

//desenare();

SerialPort1.PortName = "COM4";

SerialPort1.BaudRate = 9600;

SerialPort1.Parity = Parity.None;

SerialPort1.StopBits = StopBits.One;

SerialPort1.DataBits = 8;

SerialPort1.Handshake = Handshake.None;

SerialPort1.Open();

if (SerialPort1.IsOpen)

{

button1.Enabled = false;

button2.Enabled = true;

}

//SerialPort1.Close();

}

catch (System.Exception excep)

{

MessageBox.Show(excep.Message);

}

}

private void Serial_Close() {

Console.WriteLine("Serial close");

SerialPort1.Close();

}

private void button2_Click(object sender, EventArgs e)

{

try

{

Console.WriteLine("executam disconect");

System.Threading.Thread.Sleep(1000);

//Application.Exit();

Thread sThread = new Thread(Serial_Close);

sThread.Start();

//SerialPort1.Close();

// SerialPort1.Dispose();

button1.Enabled = true;

button2.Enabled = false;

}

catch (System.Exception excep)

{

MessageBox.Show(excep.Message);

SerialPort1.Close();

}

}

private void Form1_FormClosing(object sender, FormClosingEventArgs e)

{

}

private void DisplayText(object sender, EventArgs e)

{

textBox2.Text = unghi[6] + " V";

textBox3.Text = unghi[7];

textBox4.Text = "0 A";

textBox5.Text=unghi[3]+"*C";

textBox6.Text = unghi[4] + "*C";

textBox7.Text = unghi[5] + "*C";

textBox8.Text=unghi[2]+"%";

textBox9.Text = "0 cm";

textBox10.Text = unghi[1]+" cm";

textBox11.Text = "0 cm";

}

private void DataReceivedHandler(object sender,SerialDataReceivedEventArgs e)

{

string indata = SerialPort1.ReadLine().ToString();

Console.Write(indata);

RxString = indata;

unghi = RxString.Split(';');

if (unghi[0]=="#") this.Invoke(new EventHandler(DisplayText));

}

void Form1_MouseMove(object sender, MouseEventArgs e)

{

}

private void button3_Click(object sender, EventArgs e)

{

}

double modifiedMap(double x, double in_min, double in_max, double out_min, double out_max)

{

double temp = (x – in_min) * (out_max – out_min) / (in_max – in_min) + out_min;

temp = (int)(8 * temp + .5);

return (double)temp / 8;

}

long map(long x, long in_min, long in_max, long out_min, long out_max)

{

return (x – in_min) * (out_max – out_min) / (in_max – in_min) + out_min;

}

private void button4_Click(object sender, EventArgs e)

{

SerialPort1.WriteLine("2");//demonstrare motor

}

private void button5_Click(object sender, EventArgs e)

{

Form3 form3 = new Form3();

form3.Show();

}

private void checkBox1_CheckedChanged(object sender, EventArgs e)

{

if (!checkBox1.ThreeState)

{

checkBox1.ThreeState = true;

SerialPort1.WriteLine("1");

}

else

{

checkBox1.ThreeState = false;

SerialPort1.WriteLine("0");

}

}

Similar Posts