De-a lungul timpului termenul de joc a luat amploare în diverse domenii de activitate. [629586]
INTRODUCERE
De-a lungul timpului termenul de “joc” a luat amploare în diverse domenii de activitate.
Unul din principalele domenii fiind reprezentat de jocurile video, acesta ajungând astazi în topul
industriilor la nivel mondial.
Studii importante asupra jocuri lor începeau să fie realizate încă din secolul al XVI -lea, când
domeniul cercetat era cel al jocurilor de hazard , astfel că acestea sunt utilizate ca baze ale teorie
jocurilor pâ nă în prezent.
Jocurile reprezintă o modalitate actuală de petrecere a timpului liber, acestea fiind o sursă
de distracție ușor accesibilă multor persoane , prin interm ediul disp ozitivelor ca telefoanele mobile
, calculatoarele personale sau console le video. Prin alegerea jocurilor ca metodă de recreere,
jucătorii pot dezvolta simț practic, spirit organizatoric și funcți i intelectuale ca : imaginație și
creativitate .
Numă rul utilizatorilor de jocuri video este mai mare de la an la an , datorită dezvoltă rii
continue a industriei , aceasta aducând astfel simulări cât mai reale ale e xperienței de joc folosind
atât tehnici noi de reprezentare a graficii unui joc, cât și aparatură de tip realitate virtuală (VR) sau
realitate augumentată (AR). Datorită evoluție i masive, în anul 2017 industia destinată dezvoltării
de jocuri video a ajuns la suma de 97 miliarde de dolari , cu o creștere de 6,2% față de anul 2016.
Dacă i nițial jocurile erau utilizate pe minicomputere și pe mainframe -uri, fiind astfel
considerate costisitoare și inaccesibile , popularitatea acestora a luat amploare odată cu începerea
fabricarii de microprocesoare și de microcomputere.
Aparținând aceleiași indus trii de succes dispozitivele mobile, televizoarele inteligente și
consolele portabile intră în topul celor mai utilizate platforme pentru jocurile video alături de
calculatoarele personale (PC) și de consolele video (Fig. 1) . În prezent, deoarece beneficiază de o
gamă mai largă și de accesibilitate mai mare, din punct de vedere al resurselor materiale necesare,
utilizatori i preferă să își petreacă ti mpul liber, mai mult în compania jocurilor de pe calculatoarele
personale, decât în aceloră de pe consola video,fiind valabil atât pentru mediul onli ne cât și pentru
medium offline.
Fig.1 Cele mai importante platforme video conform alegerilor
dezvoltatorilor în 2017
Cercetă rile legate de continuă dezvoltate a jocurilor video , pe plan economic cât și de
relaționarea pe care o reușesc acestea cu utilizatorii , încurajând printre altele : utilizarea gândirii
logice și realizarea sarcinilor simultan , au contribuit la motivul realizării acestei lucrări.
Având ca premis ă îmbunătațirea pieței de jocuri video , dar raportând și la actualele
tendințele , aplicația vine cu o serie de caracteristici bine îmbinate, ce aduc utilizatorului o
experiență de joc incitantă și interactivă.
Aplicația intitulată “A Wise Choice” face parte din categoria jocurilor video de tip arcade,
îmbinând astfel perspectiva bi -dimensională cu grafica bazată pe arta pixelilor (pixel -art).
Accentul se pune pe acoperirea unui segment de vârstă al utilizatorilor cât mai mare , apelând
astfel la clasica grafică a jocurilor arcade și intensificând experiența de joc cu elemente de ale
teorie haosului .
Capitolul 1 ilustrează un mic is toric al dezvoltării jocurilor pe calculator, prezintă un top
al celor mai accesate jocuri de -a lungul timpului și abordează atât problema teoriei haosului la
nivel teoretic cât și aplicații care funcționează pe baza acestei teorii.
Capitolul 2 prezintă mediul grafic actual utilizat la realizarea jocurilor video dar și
tehnologiile , programele și limbajele folosite la crearea aplicație i, precum Unreal Engine, C++,
P.O.O. și Adobe Illustrator , fiind descris și modul de întrebuințare al acestora în dezvoltarea
aplicației. 3%4%5%7%13%22%24%27%38%53%
Nintendo SwitchApple TVSet ARLinuxWeb BrowserXbox OneSet VRPS4/ProSmartphone/TabletăPC/Mac
În capitolul 3 se descrie în detaliu modul de funcționare al aplicație, metodele folosite
pentru implementarea funcționalitaților și se discută problemele întâmpinate.
Capitolul 4 încheie lucrarea prin prezentarea posibilităților de extindere ale aplicației în
viitor și ulterior fiind enunțată concluzia la care s -a ajuns în urma dezvoltă rii acestei lucrări .
Capitolul 1
1.1 Introducere în dezvoltarea jocurilor
Studiile care stau la baza teoriei jocurilor de astăzi, au luat naștere încă din anul 1564, când
matematicianul italian, Gerolamo Cardano, scria lucrarea intitulată „Book on Games of Change”
având apoi să fie urmat de alte nume mari precum Pascal și Fermat în 1654, Leibniz în 1697 și
Berno ulli în 1738. Aceste studii s -au extins până în secolul nostru, astfel încât , în anul 1944, von
Neumann împreună cu Morgenstern au publicat o lucrare bazată pe cercetările anterioare asupra
Teoremei Minimax , îmbunătățind -o astfel cu elemente de teoria jocu rilor, lucrare studiată și de
Alan Turing care în 1948 , începea scrierea unui joc de sah ce putea fi jucat pe calculator. În anul
1950 urma ca studiile asupra acestei teorii să ia amploare, dezvoltându -se atunci concepte de bază
ca: forma extinsă a jocului , jocul repetitiv, jocul fictiv și nu în ultimul rând valoarea Shapley,
utilizată ca soluție în teoria jocurilor cooperative.
1.2 Aplicații populare
Se cunoaște că principalul domeniu î n care activează noțiunea de joc este cel al jocurilor
video. Thomas Go ldsmith și Estle Ray Mann realizau în anul 1947 un joc video de tip arcade bazat
pe utilizarea tubului catodic, ce a fost recunoscut ulterior ca fiind unul dintre cele mai vechi jocuri,
alături de două jocuri pentru calculator dezvoltate câțiva ani mai târ ziu OXO (1952) și Spacewar!
(1962).
Făcând o listă a celor mai vândute jocuri pe PC, printre cele la care numarul de exemplare
vândute a trecut de un milion, se enumeră atât joc uri de supraviețuire ca Minecraft, Doom 3, DayZ ,
MMORPG -uri [1] : World of Warcraft, Guild Wars, Star Wars Galaxies , First -person shootere :
Half-life, ARMA 3, Crysis dar și jocurile action -adventure precum Grand Theft Auto V, Magicka
sau The Binding of Isaac.
1.3 The Binding of Isaac
Prezenta lucrare este inspirată de grafica bazată pe arta pixelilor și de ideea de labirint a
jocului menționat anterior „ The Binding of Isaac ”. Creatorii jocului, Edmund McMillen și Florian
Himsl, publicau în anul 2011 o varintă a jocului suportată de Microsoft Windows, ulterior fiind
portat pe Mac OS și Linux. După incredibilul succes al jocului, cei doi au decis să lanseze o întreagă
serie. Astf el că în anul 201 4 se lansa The Binding of Isaac : Rebirth , fiind urm at apoi de The Binding
of Isaac : Afterbirth Plus în anul 2017.
1.3.1 Descriere
Jocul a parține categoriei jocurilor video realizate independent de către editor (indie) având
totodată aspect de labirint -temniță (roguelike) (Fig.2 ,3). Este un joc singleplayer ce are în spate
povestea biblică cu același nume. Astfel jocul începe cu Isaac fugind de mama sa, care încearcă să
îl scape de o așa zisă contaminare , pentru a -și putea arăta devotamentul față de vocea care o
îndrumă . Pe parcursul jocului, în funcție de alegerile facute de jucător, Isaac ajunge să lupte cu
diferiți antagoniști , numărându -se printre altele și cei reprezentați de pacate ca : invidia, mânia,
lacomia, mândria, etc. Strategia jocului constă î n explorarea cât mai multor încăperi are labirintului,
găsind astfel di verse instrumente care îl ajută pe Isaac la înfruntarea monștriilor. O caracteristică
importantă a jocului constă în posibila terminare a acestuia în 13 moduri diferite.
Fig. 2 Camera de inceput [2] Fig.3 Isaac aflat în bătălie
cu un monstru [3]
1.3.2 Suport pe Steam
Odată cu terminarea dezvoltării jocului, McMillen a hotărât în anul 2011 lansarea l ui pe
bine-cunoscut platformă globală Steam. La fel ca și jocul, platforma Steam nu avea la acea vreme
compatibilitate cu alte sisteme de operarea înafară de Windows, extinderea realizându -se câtiva ani
mai tarziu. Deși acesta nu se aștepta la un număr mare de vânzări, jocul a câștigat popularitate
mulțumită video -urilor cu transmisiuni în direct de tipul “Let’s play” .
1.4 Introducere în teoria haosului
Teoria haosului reprezintă o modern ă și importantă ramură a matematicii. Deși studiile
asupra teorie haosului au aparut relativ recent, t ermenul de “ Chaos” provine din mitologia greacă,
unde se referea la starea primordială a creației. Tot atunci Chaos era considerată una dintre
divinitățile primordiale alături de Gaia (Pământ), Tartarus (Abis) și Eros (Dragoste). Grecii susțin
că din Chaos s -au născut Erebus (Întunericul) și Nyx (Noaptea) [4].
Până astazi putem afirma că la baza oricărui lucru creator se află teoria haosului, exemplul
cel mai amplu pe care îl putem observa este natura și cum lucrează aceasta , după anumite tipare.
1.4.1 Scurt istoric al teoriei haosului
Printre primii matematicieni care au propus abordarea teoriei haosului, se află Henri
Poincaré. În anul 1880 când realiza un studiu asupra “Problemei celor trei corpuri” [5] a descoperit
că există orbite care nu sunt periodice, nu cresc la infinit și nici nu se apropie de un punct fix. Un
studiu realizat de Jacques Hadamard în anul 1898 , denumit „Biliardul lui Hadamard”, a reușit să
demonstreze că traiectoriile mișcării sunt instabile, diviând exponențial una din cealaltă cu un
exponent pozitiv Lyapunov [6].
Prin modificarea accidentală a condițiilor inițiale ale unui model meteorologic,
matematicialul și meteorologul american Edward Lorenz , a observat un comportament neobișnuit
al modelului. Acest rezultat a fost descoperit după ce matematicianul a propus reluarea
programului incepând de la jumătate, introducând valorile pe care le obținuse până în acel punct al
rulării. Tehnologia de atunci nefiind foarte avansată, astfel imprimanta folosită putea tipării do ar
primele 3 zecimale de după virgulă, neglijându -le pe celelalte 3 existente . După introducerea
inexactă a valorilor , întregul sistem a fost dat peste cap , fenomenul fiind denumit ulterior “Efectul
fluturelui” . În urma acestui fapt, Lore nz a constatat importa nța modificărilor făcute asupra oricărei
valori, fie și la nivel zecimal.
1.4.2 Descriere și aplicații
Caracterizată ca “Un fenomen care pare că se desfășoară la întâmplare, având de fapt un
element de regularitate ce poate fi descris matematic.” [7], teoria haosului aprobă astfel ipoteza
cum că la originea evoluției haotice a sistem elor dinamic e se află o ordine ascunsă .
Există o reprezentare grafică a evoluției sistemelor numită “planul fazelor”. Realizând
acest plan al fazelor putem afla, spre exemplu, viteza de variație a unui fenomen în funcție de
fenomenul propui -zis, sau altfel spun derivata fenomenului raportată la el însuși. Pentru
comportamentele regulate ale unui sistem , planul fazelor este descris de reprezentă ri regulate
precum spiralele sau curbele închise. Sistemele ce dispun de comportament haotic generează în
planul fazelor reprezentări neobișnuite. Grafic vorbind, aceste reprezentări se numesc „atractor
straniu” și sunt descrise că fiind o multitudine de c urbe cu traiectorii ce nu se suprapun dar care
totuși răman intr -un spațiu bine definit. Un asemenea atractor straniu a apărut și în reprezentarea
fenomenului meteorologic a lui Lorentz, de la acesta provenind și numele fenomenului “Efectul
fluture” (Butte rfly effect) datorită graficului care arată ca aripile unui fluture (Fig. 4)
Fig.4 Exemple de soluții ale “atractorului Lorenz” [4]
O altă inovație a teoriei haosului este reprezentată de fractali. Acești “fractali” au apărut
din dorința matematicienilor de a rezolva paradoxul curbei lui Koch. Reprezentarea acesteia se
realizează pornind de la un triunghi echilateral, urmând apoi ca pe fiecare latură a triunghiului să
se adauge alt triunghi echilateral (Fig 5,6). Paradoxul apare atunci când la adăugarea unui nou
triunghi la figura inițială, aria interioară rămane mai mică decât aria cercului circumscris a
Fig.5 Reprezentarea fulg ului lui Koch [5] Fig.6 Reprezentare pe nivele [6]
triunghiului în timp ce lungimea liniei crește.
Comportant haotic prezintă și ceea ce se numește “mapă logistică” (logistic map) .
Conceptul a devenit cunoscut în anul 1976, după publicarea unei lucrări aparținând biologului
Robert May în care era dezvoltată ideea de ecuați e logistică . Formula ecuației logistice a fost
publicată de către Pierre François Verhulst în lucrarea sa din 1838 , intitulată “The Logi stic Map
and the Route to Chaos ” :
𝑑𝑁
𝑑𝑡=𝑟𝑁−𝛼𝑁2
unde N(t) reprezintă numărul de indivizi la momentul t, r este rata de creștere intrinsecă , iar 𝛼
exprimă efectul de aglomerarea dependent densității.
Ecuația mapei logistice este utilizată în biologie la determinarea numărului populației , în funcție
de variabile ca fertilitate sau rata de mortalitate a populației și este reprezentată astfel :
𝑥𝑛+1=𝑟𝑥𝑛(1−𝑥𝑛)
unde 𝑥𝑛 reprezintă populația inițială 0≤𝑥𝑛≤1, r reprezintă rata fertilitații, 0≤𝑟≤4.
Pentru fiecare valoarea a lui r, în graficul ecuației se genereaza câte un atractor observându -se
astfel comportamentul haotic (Fig.7).
Fig.7 Diagrama bifurcării pentru mapa logistică [7]
1.5 Exemple de alte abordari
Înafară de meteorologie, teoria haosului are aplicabilitate și in domenii ca criptografia,
geologia, biologia, robotica, ingineria ș.a.
Pe partea de criptografie, teoria haosului este de mulți ani utilizată. În ultimele decenii,
studii asupra haosului și asupra dinamicii neliniare au contribuit la determinarea a sute de primitive
criptografice precum algoritmi pentru decriptarea imaginilor, funcții hash, generare de numere de
securitate aleatorii ș i filigranare.
În robotică vine ca un beneficiu actual, contribuind la eficentizarea acțiunilor roboților.
Roboții funcționează pe modelul Încercare și Eroare (trial -and-error), acesta nefiind tocmai cel mai
rentabil mod de operare, astfel folosind teoria haosului, s -a creat un model predictiv ce determină
viitoarele mișcări are robotului.
În domeniul biologic , este cunoscut faptul că biologii au centralizat din totdeauna diferite
specii, utilizând șabloane de populație (population models). Cele mai multe dintre șabloane având
comportament ca cel al funcțiilor continue, dar recent, s -a descoperit ca pe anumite populații se
pot implementa șabloane haotice.
1.6 Obiectiv
Având ca fundament grafic aplicația menționată anterior, The Binding of Isaac, prin
prezenta lucrare se propuse dezvoltarea unui joc destinat platformei Windows care î ncearcă să
pastreze aspectul specific seriei dar improspătând -o prin implementarea unui algoritm bazat pe
teoria haosului și pe introducerea cât mai multor elemente specifice jocurilor de tip arcade
roguelike.
Capitolul 2
2.1 Tehnologii folosite
Înainte de începerea proiectării propriu -zise a unui joc video, este necesară schițarea unui
plan bine organizat. Elaborarea jocurilor video este definită ca fiind un complex proces ce poate
implica de la un dezvoltator, pentru proiectele mici, la o întreagă organizație, pentru proiecte ca
The Witcher, God of War, Fortnite ș.a.
Printre primele etapele ale dezvoltării unui joc video se numară decizii precum: alegerea
tipului (RPG, MMORPG, MOBA, arcade, strategie, etc), ale gerea dimensiunii (2D, 3D), alegerea
perspectivei din care este privit personajul (firs t person, third person, top -down, side-scroller) și
alegerea dispozitivului pentru care sa fie conceput (calculator, conso lă, tabletă/telefon mobil) .
Acestea sunt urmate de eta pe ce țin de conturarea ideei precum : crearea unei povești, schițarea
personajelor, schițarea scenei în care se desfășoară acțiunea, realizarea efectelor dinamice și
animarea obiectelor dinamice.
Atât în proiectarea unui joc realizat de un dezvoltator independent (indie game [8]) cât și în
a unuia realizat de o companie specializată în domeniu, se utilizează numeroase aplicații software
care facilitează procesul. Cele mai utile si folosite dintre acestea sunt: motorele grafice (Unreal
Engine, Unity, Godot, etc.) iar în funcție de dimensiunea d e joc aleasă se pot utiliza simulatoare
fizice (Box2D,Phyz) sau aplicații pentru modelare grafică (Autodesk Maya, Zbrush).
În realiza rea prezentei aplicații au fost utilizate motorul grafic Unreal Engine și editorul
grafic Adobe Illustrator pentru modificarea fișierelor .
2.2 Unreal Engine
Motoarele grafice au fost create spre a conferi dezvoltatorului control total asupra aplicației,
punându -i totodată la dispoziție o gamă largă de unelte eficiente.
Prima variantă a motorului grafic, dezvo ltat de Epic Games, și denumită Unreal Engine a
fost utilizată în anul 1998 pentru realizarea jocului “Unreal”. Deși inițial a fost conceput doar pentru
proiectarea jocurilor de tip shooter first -person, motorul grafic Unreal Engine a progresat ulterior,
ajundând astăzi să fie utilizat la crearea jocurilor precum : MMORPG -uri, RPG -uri, shootere third –
person și nu numai.
Limbajul cu ca re lucrează programul este C++ , conferindu -i acestuia un mare grad de
portabilitate , fapt pentru care atrage foar te mulți d ezvoltatori de jocuri. Chiar și după 20 de ani de
la lansarea primei versiuni, Unreal Engine continuă să fie utilizat în realizarea proiectelor mari,
clasându -se astfel în topul celor mai populare motoare grafice alături de: Unity [8] și Godot [9] .
Cea mai actuală variantă a programului este Unreal Engi ne 4, acesta fiind compatibilă cu Microsoft
Windows, macOS, Linux, iOS, Android, PlayStation 4, Xbox One și cu realitatea virtuală.
Unreal Engine este cunoscut drept un motor grafic complex, bine dezvoltat ș i totuși
accesibil, ce deține o gamă largă de funcționalitați și instrumente . Până în anul 2012, limbajul nativ
utilizat era UnrealScript și este descris ca fiind un limbaj similar cu Java, orientat pe obiecte. Odată
cu lansarea Unreal Engine 4, companie E pic Games a anunțat renunțarea la UnrealScript, optând
pentru abordarea limbajului C++ și implicit, cu ajutorul acestuia, la trecerea la programarea vizuală
utilizând Blueprint -uri.
Interfața utilizată este una accesibil ă, alcatuit ă din ferestre care, în funcție de proiectul a
supra căruia se lucrează, pot fi închise/deschise. În mod implicat interfața u nui proiect arată astfel
(Fig.8 ):
Fig.8 Interfața meniului principal
1) Viewport -ul, locul unde se pot observa modificările facute , aici se introduc elementele
ce vor fi vizibile ulterior la pornirea jocului: caracter, teren, mediu înconjurător, sursă
de lumină, cer, etc ;
2) Bara pentru meniu, conține diverse opțiuni similare cu ale majoritații aplicațiilor;
3) Bara de instrumente, dotată cu opțiuni de bază ca: Salvare, Compilare, Setări, aici se
află și butonul pentru pornirea jocului, aces tă fiind un intrument important;
4) Fereastra de modele (modes) este alcătuită din subcategorii ca: Plasare (Place), Pictură
(Paint ), Peisaj (LandScape), Frunziș (Foliage) și editare geometrică ;
5) Fereastra pentru căutare de conținut, aici se organizează toate folderele folosite și se
permi te accesarea fișierelor externe;
6) World Outliner , fereastra ce afișează o listă a tuturor element elor care se află în scenă .
7) Fereastra detalii contolează proprietățile oricărui obiect selectat.
2.3 Programare vizuală cu B lueprint -uri
Blueprint Visual Scripting (programare vizuală ) este limbajul utilizat de Unreal Engine.
Acesta limbaj vizual se bazează pe conceptul de noduri și pe uti lizarea unui interfețe grafice.
Precum multe alte limbaje de programare, Blueprint -urile definesc clase orientate pe obiecte.
Sistemul de Blueprint -uri este unul complex și extrem de fl exibil oferind dezvoltatorilor toată gama
de concepte și instrumente disponibile limbajelor de programare.
Modul de utilizare al Blueprint -urilor este unul simplu și accesibil . Astfel pentru fiecare
obiect introdus in scena (viewport) se declanșat de un eveniment, ca de exemplu: pornirea jocului
, când un alt obiect se suprapune cu acesta (overlap) sau la acționarea unei taste. Înafară de
ferestrele de pe meniul principal, la deschiderea unu i Blueprint, găsim fereastra pentru adăugarea
componentelor (Fig.9) și pe cea pentru atrib uirea funcțiilor (Fig .10).
Fig.9 Fereastra de componente Fig.10 Fereastra pentru funcții
Instrumentele de lucru utilizate de Blueprint -uri au fost concepute pentru a putea fi folosite
de designeri și dezvoltatori începători î n domeniu, nefiind nevoie de codare propriu -zisă. Așadar ,
prin utilizarea unui Blueprint, dezvoltatorul implementează, modifică sau crează un ele ment de joc
într-un mod eficient.
Există patru tipuri principale de Blueprint -uri, fiecare având un scop și o situație specifică
în care acționează.
2.3.1 Nivel Blueprint (Level Blueprint)
Un nivel B luprint este, după cum sugerează și numele, un nivel bazat pe un graf de
evenimente. Acesta se crează, în mod implicit, pentr u fiecare nivel adăugat, de unde reiese faptul
că nu poate fi creat . De asemenea, este singurul tip de Blueprint, disponibil intr-un singur exemplar
pentru fiecare nivel . Utilizând acest tip de fișier putem contro la evenimente, secvențe și apelurile
funcții lor. Pentru a deschide ferestr a destinată acestuia, se apasă butonul de “Blueprint” , din bara
instrumentelor destinate editării de nivele, urmând apoi accesarea ferestrei “Open Level Blueprint” .
2.3.2 Clasă Blueprint (Blueprint Class)
O clasă Blueprint, denumită adesea , doar Blueprint, reprezintă elementul cel mai familiar atât
în programarea avansată cât și la nivel de începători. La crearea unui Bluepr int, cele mai cunoscute
clase pă rinte sunt:
1) Actorul: poate fi introdus sau spawnat în fereasta de view port ;
2) Pionul (Pawn): este un actor care poate fi subordonat , acesta benificiază de acces la setările
controlurui (controller) ;
3) Caracterul: este asemănat or pionului, beneficiind în plus, de f uncții pentru mers, alergat ,
sărit ș.a.;
4) Controlorul jucătorului: este reprezentat de actorul care controlează pionul ;
5) Modul de joc: definște regulile, scorul și orice alt aspect al joc ului.
2.3.3 Blueprint -urile la nivel de date (Data -Only Blueprint)
Pe scurt, blueprint -urile la nivel de date re prezintă clase le Blueprint fără utilizarea
nodurilor/legăturilor dintre ele. Conțin toate propriet ățile și componentele ce sunt moștenite de la
clasele părinte, permițându -i utilizatorului să ajusteze aceste proprietăți, fără a mai construi grafice
întregi pentru funcții și noduri.
2.3.4 Interfața B lueprint (Blueprint Interface)
Interfața Blueprint (Fig.11) deține proprietăț i similare cu ale interfețelor , utilizate în gereral
. Acceptă lucrul cu diferite tipuri de obi ecte, ce comuni că între ele . O astfel de interf ață, trebuie
legată de o clasă Blueprint, pentru a putea fi folosită. Clasele Blue print care accesează interfețe,
beneficiază de toate funcțiile prestabilite.
Fig.1 1 Interfața Blueprint
Comunicare prin Blueprint -uri, crează legături între obiecte individuale. Un exemplu
concert poate fi reprezentat de: presupunerea a două obiecte diferite , un bec și un intrerupător.
Teoretic vorbind, prin definirea acestora ca obiecte aparținând unei clase Blueprin t și ulterior prin
trasarea unei legături între ele, putem astfel demonstra ca la apăsarea întrerupătorului să se
acționeze aprinderea becului.
Înafara funcțiilor existente, Blueprint -urile beneficiază și de opțiuni precum realizarea unei
funcții noi,impl ementată de utilizator și adaptată cerințelor problemei. Odată create, acestea pre iau
comportamentul funcțiilor prestabilite, legăturile cu acestea, făcându -se în același mod.
Implementarea legăturilor se real izează ușor, totul se petrece în zona destinată graficului,
situată central . La apăsarea butonului click -dreapta de pe mouse, î n interiorul mediului de lucru , se
deschide meniul funcțiilor. În funcție de necesitate, se poate opta între căutarea manuală în
bibliotecă de funcții (Fig.12) și între căutare a directă, introducând numele funcției (Fig 13 ). .
Fig.12 Biblioteca funcțiilor Fig.13 Căutarea funcțiilor în biblioteă
Design -ul interfeței grafice este unul simplu , funcțiile sunt reprezentate prin dreptunghuri
negre, partea de sus a acestora fiind colorată. Fiecare culoare reprezintă un alt fel de funcție
(Fig.14,15) : roșu, specific declanș ării unui eveniment, gri pent ru im plementarea structurilor
precum: dacă, repetă până câ nd, pentru,etc., albastru și verde pentru funcțiile prestalibile și mov
pentru cele create de utilizator.
Fig.14 Funcție ce odată cu pornirea programului afișează valoare reținută în “My Float”
Fig.15 Funcție creată de utilizator pentru compararea a două numere
Datorită posibilelor complicații ce ar putea apărea în urma elaborarii unui cod complicat,
legăturile devenind eventual foarte greu de observat , o uste nsilă utilă este reprezentată de selectarea
unei bucăți de cod, unde de realizează o funcționalitate și comentarea acesteia. O secțiune fiind
astfel comentată, la o revenire ulterioară, în vederea unei modificări, asupra acesteia, modificarea
respectivă se va realiza mult mai repede și aspectul codului va fi unul mai organizat. Înafară de
secțiuni ale codului, comentariile pot fi utilizate și doar pentru o funcție, opțiune intitulată Node
Comment (Fig.16)
Fig.16 Secțiune din cod comentată
Iar o altă componentă organizatorică este reprezentată de o pauză (Exec). Acestă pauză este
utilizată în interiorul unei legături, care eventul este foarte l ungă, ne mai fiind vizibilă, sau atunci
când este nevoie de crearea unei bifurca ții (Fig. 17)
Fig.1 7 Secțiune unde s -au utilizat Exec -uri
2.3.5 Proiecte realizate în Unreal Engine
Luând în considerare caracteristicile prezentate, putem aprecia motorul grafic, Unreal
Engine ca fiind unul accesibil dezvoltatorilor începători și totodată unul complex și bine
organizat pentru dezvoltatorii experimentați.
În timp, numeroase jocuri au fost proiectate, utilizând Unreal Engine. Dintre acestea se
evidențiază următoarele: Borderland s 2, Gears of War 3 , Batman Arkham City, Bioshock și Mass
Effect, toate având un mare succes.
2.4 Limbajul de programare C++
Denumit inițial “C cu clase”, limbajul de programare C++ a fost lansat, de către
informaticianul danez, Bjarne Stroustrup, în anul 1985. C++ a luat naștere din dorința lui Stroistrup
de a îmbunătați limbaju l C, adăugându -i astfel facilități reprezentate d e clase, clase derivate,
verificări ale tipului și argumente cu valori implicite [10].
Se definește ca fiind un limbaj multi -paradigmă ce are caracteristici imperative, orientate
pe obiecte și de programare generală.
În vederea scrierii unui pro gram uti lizând C++ (Fig.18) ,se introduc următoarele elemente :
1) Declararea bibliotecilor;
2) Deschiderea funcției principale: main();
3) Declararea variabilelor utilizate;
4) Inițializarea variabilelor;
5) Citirea de la tastatură a variabilelor care nu au fost inițializate;
6) Realizarea calculului cerut;
7) Afișarea rezultatului;
8) Închiderea funcției principale: return0 și părăsitea programului.
Fig. 18 Secvență de cod pentru calcularea celui mai mare divizor comun
Pentru obținerea rezultatelor dorite, aplicațiile sunt programate să funcționeze într -un mod
bine precizat. Acest mod de funcționare este definit, în C++ de utilizarea instrucțiunilor. Acestea
sunt comenzile pe care le introduce programatorul în calculator înainte de rularea codului. În
funcție de acuratețea codului scris, un program poate rula cu succes sau nu.
Instucțiunile principale utilizate în C++ sunt (Fig.19) : instrucțiunile decizionale: if și switch
, instrucțiunea repetitivă cu număr cunoscut de p ași: for și instrucțiunile repetitive cu număr
necunoscut de pași: while și do while.
Fig.19 Clasificarea instrucțiunilor de control
De asemenea limbajul C++ este și limbajul de bază utilizat de Unreal Engine . Clasele
C++ pot fi dezvoltate prin Blueprint -uri, permitându -le programatorilor să creeze funcții scrise cu
C++ ce pot fi editat e cu ajutorul Blueprint -urilo r.
Instrucțiunile de control C++, se găsesc astfel în biblioteca de funcții Blueprint, sub
denumiri ase mănătoare, astfel instrucțiunile decizionale sunt: Branch și Sequence (Fig. 20)
Fig. 20 Varianta Blueprint a instrucțiunilor If și Switch
iar instrucțiunile repetitive sunt reprezentate de: For Each Loop și While Loop (Fig.21).
Fig. 21 Varianta Blueprint a instrucțiunilor For și While
Pentru orice element implicit din Unreal Engine există în spate un cod C++. Unele dintre
aceste elemente și funcții pot accesa codul sursă cu ajutorul programului Visual S tudio, selectând
respectivul element (Fig.22) și accesând opțiunea de Open NumeObiect.h (Fig.23 ).
(Fig.22) Obiectul spațiu de declanșare vizualizat în Unreal Engine
(Fig.23) Codul spațiului de declanșare
Instrucțiunile de control au contribuit la dezvoltarea proiectului prezentat, făcând astfel
posibilă , ducerea codului la capă t. Instrucțiunea “succesiune” (sequence) este cea mai intâlnită,
deoarece din funcțiile de declanșare nu se poate pleca cu două legături, i ar uneori este nevoie de
declanșarea aceluiași eveniment pentru a se r ealiza funcționalități diferite (Fig.24) . De asemenea
și instrucțiunea “ramificare ” (branch) este utilizată în diverse situații. Una dintre acestea fiind
reprezentată de necesitatea unei condiții atunci cand un inamic ramane fără viața (Fig.25) .
(Fig.24) Exemplu de utilizarea a funcției Succesiune
(Fig.25) Exemplu de utilizarea a funcției Ramificare
2.5 Programare orientată pe obiecte
Asocierea între t ermenii “orientare” și “ obiect” a fost discutată pentru prima data la
Institutul de tehnologie din Massachusets, în jurul anilor 60’ . Acest tip de programare a fost pus în
practică utilizând limbajul de programare Simula .
Programarea orientată pe obiect e, în România a lu at naștere , sub forma unui manual
publicat de editura EduSoft cu scop ul de a face mult mai accesibilă programarea pentru omul de
rând, dornic să înveț e.
Caracteristicile de funcțio nare ale programării orientată pe obiecte sunt:
1) Încapsulare: organizarea pe clase a datelor, ca de exemplu procedura struct utilizată la C++;
2) Moștenire: posibilitatea de dezvoltare a unei clase pornind de la ea înșiși ;
3) Polimorfism: proprieta tea că mai multe obiecte pot percepe diferit aceași metodă.
4) Abstractizarea: proprietatea prin care un program poate ignora anumite aspecte ire levante,
concentrându -și atenția asupra aspectelor importante.
Clasele și obiectele
O clasă se definește ca fiind un tip de dată, care se ocupă cu organizarea metodelor de
manipulare. Elementele (Fig. 26) din care este alcătuită o clasă, se numesc obiecte. Pentru clase
controlarea accesului se face utilizând specificatorii: public, au acces toa te funcțiile din domeniu,
private, accesul este permis doar funcțiilor din interiorul clasei și funcțiilor prietene, și protected ,
înafară de cele de la private , mai au acces și funcțiile membre și prietenele derivate are funcției.
Caracterist icile clasei
Pentru definirea unei clase se presupune declararea și implementarea acesteia. În interiorul
unei clase se află partea protejată cu ajutorul c ăreia se implementează clasa și o parte publică,
reprezentată de interfața clasei. O cla să (Fig.26) prezintă o structură simplă, unde elementele
componente sunt delimitate în: datele care intră și acțiunilor care se petrec. Rolul acesteia este de
a grupa datele sub un modul, definind o enititate mai naturală,
Clasa însăși este conceptul aflat la bazele programării orientată pe obiect. Este entitatea ce
nu numai că abstractizează sinteză problemei, ci și generalizează, alcătuind astfel mulțimi de
obiecte ce răspund acelorași proprietați.
(Fig.26) Reprezentarea claselor
Blueprint -urile utilizate de Unreal Engine, nu numai că au aspect asemănator cu al unei clase
(Fig.27) , ci și modul acestora de funcționare este inspirat de programarea orie ntată pe obiect.
(Fig.27) Evenimente de declanșare
Sintaxă pentru declararea claselor în Unreal Engine este următoarea:
În declalarea unei clase se poate adăuga funcția de specificator de clasa (Class Specifiers),
care controlează comportamentul clasei. Printre acești specificatori se număra:
1) Specificatorul Abstract: oprește utilizatorul din eventuala inserarea de Actori în Nivel;
2) Specificatorul Grup: alcătuiește grupuri formate din orice element aparți nând unei clase sau
unei subclase;
3) Specificatorul Const: toate proprietățile și funcțiile sunt considerate constrante, acest
specifi cator este moștenit de subclase.
Capitolul 3
3.1 Prezentarea aplicației
Obiectivul lucrării realizarea jocului “A Wise Cho ice” de tip 2D, destinat platformei
Microsoft Windows. Bazele acestui proiect sunt reprezentate de motorul grafic, Unreal Engine,
cu ajutorul căruia s -a realizat conexiunea grafică dintre utilizator și aplicație. Dezvoltatea jocului
a parcurs și etape simp le și etape dificile, ca în final să rezulte un joc incitant, potrivit oricărei
vârste.
3.2 Descriere
Ideea principală este inspirată de jocul "The Binding of Isaac", asemănarea fiind vizibilă
la aspectul și modul de controlare al caracterului și la struct urarea nivelelor pe camere. Partea de
început a proiectului a fost ocupată de schițarea unor ideei legate de design dar și de modul de joc
propriu -zis, iar apoi de căutarea resurselor necesare. În urma concluziilor l -a care s -a ajung a
apărut jocul "A Wise Choice", titlul fiind unul semnificativ pentru finalul jocului.
A Wise Choice se încadrează în categoria jocurilor destinate unui singur jucător
(singleplayer), arcade bazat pe explorarea cât mai multor încăperi ale temniței în speranța
descoperii traseu lui ce duce la un final mulțumitor.
3.3 Despre design
Odată cu deschiderea primului nivel se poate observa design -ul jocului, perspectiva aleasă
și modul cum este poziționată camera în raport cu personajul. Astfel design -ul, după cum s -a
menționat anterior, se inspiră după majoritatea jocurilor arcade, implementându -se un design
creativ de tip pixel art ce atrage atenția posibililor utilizatori. Perspectiva aleasă este denumită, în
engleză Top -down, termenul fiind tradus “perspectivă de sus” sau “pe rspectivă de deasupra” iar
pentru poziționarea camerei s -a ales modul de proiecție ortografic, reprezentând o necesitate în
utilizarea obiectelor 2D.
Fiecare element, începând de la plăcile (tiles) ce formează platforma pe care sunt atașate
elementele, și până la sprite -uri, care vin în alcătuirea animațiilor caracterului, sunt create
utilizând metoda pixel art.
Nivelurile jocului sunt reprezentate grafic prin "tilemap -uri". Tilemap -ul este o hartă 2D
pe care se pot insera plăci (Fig. 28). La crearea unu i tilemap se utilizează un set de plăci (tileset),
ce poate fi creat în orice editor grafic precum Photoshop sau Illustrator, singura condiție fiind
reprezentată de încadrarea plăcilor într -un număr fix de pixel ce pot determina un patrat: de
exemplu 70×70 px ca în lucrarea prezentată. Tileset -urile utilizate în crearea nivelurilor, pentru
jocul prezentat, sunt găsite în pachete open source, modificate și recolorare ulterior, cu ajutorul
programului Adobe Illustrator, în funcție de nevoi.
Fig. 28 Meniu de editare pentru tilemap -uri
Dispunerea acestor tile -uri este organizată într -un sistem de straturi (layers). De exemplu,
tilemap -ul nivelului 1 se structurează pe 4 straturi astfel: primul strat este podeaua (floor), indică
spatiul în care se pot deplasa caracterele, ca o completare a primului strat apare pe un nivel
superior, stratul al doilea, marginile (borders) care împiedică ieșirea caracterelor în afară harții.
Pe stratul al treilea se găsesc ușile (doors), care la nivel de tilemap nu pot dec lanșa evenimente,
de aceea pentru încărcarea nivelului, în fața fiecărei uși se va plasa un spawner ce declanșează
încărcarea nivelului atribuit acesteia. Iar pe ultimul strat se află elemente grafice folosite doar în
scopul îmbunătățirii aspectului joculu i (enviroment).
Atât design -ul caracterului pe care îl controlează utilizatorul cât și design -ul caracterelor
adiționale, este realizat folosind flipbook -uri. Flipbook este funcția ce utilizează două sau mai
poziții statice (sprite -uri) (Fig. 29) pe care l e repetă , conferind caracterelor aspect dinamic.
Fig. 29 Sprite -urile utilizate pentru inamicul albină
Spite -uri asemanătoare cu primele două s -a folosit la creerea flipbook -urilor pentru starea
de mișcare a caracterelor, al treilea fiind folosit în momentul când caracterul respectiv ramâne
fără viață.
3.4 Construcția jocului
Deși motorul grafic Unreal Engine deține o varietate de șabloane (template -uri) pentru
diferite tipuri de jocuri asemenea celor: first -person [10], third -person [11], puzzle[12] , ș.a. ,
întocmai spre a ușura munca dezvoltatorilor, jocul A Wise Choice, nu s -a potrivit pe niciunul
dintre șabloanele prestabilite. Cu toate acestea, proiectul a fost început pe un template de Top –
Down, ulterior eliminându -se tot conținutul existent, di n pricepă faptului că nu era de ajutor în
ideea ce avea să fie dezvoltată.
Setările proiectului
Întocmai datorită începerii proiectului de la zero, o etapă importantă în dezvoltarea
acestuia a fost reglarea și setarea optimă instrumentelor și a programul ui. Modul în care se vedea
un obiect 2D în fereastra View Port, reprezintă una dintre primele probleme rezolvate în
realizarea jocului. Modificându -se astfel perspectivă și modul inițial de vizualizare (Fig . 30)
Fig. 30 Modul în care se vedea inițial platf orm 2D
Printre modificările necesare se număra și afișarea unui personaj pe platforma 2D. S -au
întâmpinat probleme ca prăbușirea personajului de pe platformă, trecerea personajului prin
platformă, acestea fiind rezolvare ulterior cu ajutorul setărilor para metrilor din graful x,y,z, unde
pentru un plan 2D una din valori trebuie setată 0 și cu prin modificarea valorii gravitație.
O altă modificare ce necesita să fie facută, reprezintă schimbarea tastelor de control ale
caracterului. Cu toate că elementele din View Port, ale modului de joc ales inițial au fost
eliminate, în proiect existau încă setările acestuia. Așadar, controlarea caracterului acționată prin
mouse a fost înlocuită cu cea acționată de tastele WASD și respectiv de săgeți.
Odată cu rezolvarea ac estor impasuri întâlnite s -a trecut la etapa de proiectare a jocului,
începându -se cu creerea meniurilor de tip elemente de control (widget).
Meniul principal
Meniului principal (Fig.31 ) are un design minimalist și este afișat la pornirea aplicației.
Este format din 3 butoane: primul este butonul “START” pentru pornirea jocului, al doilea buton
este cel de opțiuni “OPTIONS”, odată accesat, acestă afisează un al doilea meniu de unde se
poate seta rezoluția dorită, apoi se poate reveni la meniul principal uti lizând butonul “RESUME”.
Tot în meniul principal se află și butonul de “QUIT” cu care se inchide sesiunea de joc. Pe
parcursul navigării în meniu se redă pe fundal o melodie electronică, în ton cu temă jocului.
Meniul pauză
Se accesează apăsând tasta “P” de pe tastatură și este fereastra ce întrerupe sesiunea de
joc, fără să o reseteze. Beneficiază de aproape aceleași elemente ca meniul principal, butonul de
start fiind înlocuit de butonul “RESUME” (Fig. 32)
Meniul restart
Odată ce caracterul ramâne fără vieți, se afișează meniul de restart (Fig. 33). Acesta
conține un buton pentru reînceperea jocului “TRY AGAIN” dar și buton de părăsire a sesiunii de
jocului.
Navigarea în cele 3 meniuri se face cu ajutorul cu mouse -ului, iar butoanele peste care se
trece cu mouse -ul (hover) își schimbă culoarea și declanșează pornirea unui sunet.
Fig. 31 Meniu pri ncipal Fig. 32 Meniu pa uză Fig. 33 Meniu restart
Nivelul de start
După alegerea opțiunii "START" din meniul principal, jocul pornește cu încărcarea
primului nivel. Primul nivel sau punctul de start este alcătuit din expunerea tilemap -ului destinat
acestuia, fiecare nivel folosește câte un tilemap, așadar nivelul 1 afișea ză tilemap -ul 1. Pe aceste
tilemap sunt prezente elementele descrise mai sus, și în plus sunt afișate și doua pătrate cu
margini galbene ce conțin fiecare cate o cheie. Conceptul introdus aici are să fie ca un fel de
element induitiv ce prevestește finalul jocului, reprezentat în tocmai, de o decizie între alegerea
cheiei roșii sau a celei albastre, fiecare generând un alt tip de final.
Camera de start ilustrează 4 uși, toate putând fi accesate, prin plasarea unui spawner
suprapus acestora. Spawer -ul este elementul creat din Blueprint -ul unui actor, căruia i s -a adăugat
o zonă de coliziune (box collison) și o funcție de Deschidere Nivel (Fig. 34) , devenind astfel un
portal între camere. Locul de generare, la întoarcerea caracterului în camera de start, se află în
centru mapei.
Fig. 34 Blueprint -ul care generează nivelul la care se trece .
Nivelul de start se ramifică, lăsând liber accesul la alte camere iar o dată cu înaintarea prin camere
se modifică și gr adul de dificultate a nivelelor (Fig. 35)
Fig. 35 Cameră cu inamici
Caracter ul principal
Caracterul principal, controlat de utilizator este reprezentat de un omuleț. Și acesta și
celelalte caractere implementate, funcționează pe bază de flipbook -urilor. Utilizarea acestora se
face adăugând un tileset în browser -ul de conținut și ulterior extragându -se sprite-urile.
Flipbook -urile caractrerului principal se accesează diferit față de ale celorlalte caractere.
De exemplu la apăsarea tastei W/Sus se reda flipbook -ul caracteristic mișcarii în sus, fiind valabil
și pentru celelalte direcții de mers. Caracteru l principal utilizează și o funcție de repaus (idle) ce a
fost concepută pentru afișarea corectă a flipbook -urilor atunci când acesta nu se află în mișcare.
Această funcție (Fig. 36) funcționează pe baza unor condiții de adevar reținand astfel, ultima tast ă
apăsată înainte ca personajul să fie inactiv.
Pentru ca modul de joc sa fie unul corect, s -a implementat ca la apăsarea tastei “Space”,
caracterul să lanseze proiectile. Design -ul proiectilelor este reprezen tat printr -un sprite.
Fig. 36 Blueprint -ul folosit în reținerea ultimei poziții
Implementarea proiectilelor nu a fost tocmai ușoară și favorabilă, prezentând o mulțime
de probleme. Prima încercare de implementare a funcției pentru lansarea de proiectile a avut ca
rezultat lansarea acestora doar în su s, indiferent de direcția în care privea sau mergea caracterul
(Fig. 37)
Fig.37 Prima problemă întâlnită la implementarea proiectilelor
A doua problemă întâlnită și asemănatoare cu prima, a fost prezentată de lansarea
proiectilelor, atât în sus/jos cât și în stânga/dreapta, în funcție de ultima direcție de mers a
caracterului (Fig. 38). Ulterior acestă problemă s -a dezvoltat ajungând ca la acționarea tastei
“Space” s ă se lanseze proiectile în toate direcțiile simultan.
Fig.38 Prima problemă în tâlnită la implementarea proiectilelor
După găsirea codului optim pentru propulsarea de proiectile, lansate de asemenea doar în
direcția în care privește caracterul, respectivele proiectile sunt lansare cu o viteză preponderentă,
vitezei de miscare a perso najului. După adăugarea funcției de “Get Velocity”, viteza acestora se
reglează relative. Lucru ce nu era neapărat rău, poate doar puțin dificil de acomodat, dar
adevărata problemă era reprezentată de combinarea stării de repaus cu lansarea de proiectile. În
modul acesta, caracterul lansa un proiectil ce apare sub acesta, blocându -l în poziția curentă
(Fig. 39). Tot în această fază a dezvoltării problemei, a mai apărut o disconcordanță între setările
zonei de coliziune a ploiectilelor și jumatatate din situa tă în partea stângă a tilemap -ul de pe
meniul principal. Problema era că de la jumatatea harții proiectilele lansate treceau pe sub textura
podelei.
Completând codul utilizat la problema anterioară, cu o funcție de selectare a direcțiilor de
mers posibile și adăugând o variabilă ce reține ultima mișcare a caracterului , seria de probleme
legate de lansarea proiectilelor se încheie cu succes.
Fig.39 Blueprint -ul în care este încercată ideea cu sporirea vitezei
Iteme și inamici
Aplicația utilizează o mulțime de elemente ce nu fac parte din cele de tip environment.
Printre acestea se numără, inamicii reprezentați de actori care odată ce fac contact cu caracterul
principal, îi aplică acestuia o pagubă de -1 o viață din numărul iniț ial de vieți. Pentru că jocul să
nu fie în tocmai unul nedrept, l -a apăsarea tastei “Spațiu”, caracterul controlat de utilizator,
lansează proiectile. Proiectilele trebuie sa provoace pagubă de 20% din viața toatală a inamicului.
Pentru ca acest proces să i ntre intr -o buclă infinită, cu ajutorul funcției de ramificare s -a realizat
un algoritm care verifică condiția ca viața inamicul să nu fie mai mica decat 0 , iar dacă este,
inamicul să se oprească din mișcare și să fie afișată animația corespunzatoare (Fig.40) . După o
Fig.40 Animația inamicului când rămâne fără viață
perioadă de 3 secunde în care inamicul stă în scenă, ne mai având animația de mișcare, acesta
dispare.
Pentru nivelele avansate s -a implementat un algoritm care la declanșarea unui zone de
coliziune, generează în funcție de dificultatea aleasă inamici pentru a anumită perioadă de timp.
Inamicii nu pot fi generați toți odată acce sul la nivele Mediu, respectiv A vansat ne fiind posibil
până nu se termină generarea anterioră (Fig. 41).
Fig.41 Generarea inamicilor în funcție de dificultate
Terminarea unui nivel ca acesta presupune eliminarea tuturor inamicilor generați, după ce
utilizatorul face asta, în scenă apare o ușă.
Trecând la categoria itemelor putem enumera câteva precum: diamantele, cheile, bombele
și ușile corespunzătoare cheilor (Fig. 42)
Nivel Nume Timp de
generare Frecvență
Ușor Blue Slime 5 secunde 1 sec
Mediu Green Slime 10 secunde 0.9 sec
Avansat Purple Slime 15 secunde 0.8 sec
Fig.42 Iteme
1) Diamantul: când es te colectat de către utilizator, acesta dispare, adăugându -se +1 la
valoarea acestoră de pe bara de status;
2) Cheia: odată colectată, aceasta dispare făcand posiblă trecerea prin ușa de culoarea
corespunzătoare;
3) Ușa: dispare când utilizatorul colectează cheia specifică culorii acesteia.
Printre itemele importante se află și cele de modificare a vieții caracterului. Cel pentru scăderea
vieții, la contactul cu personajul scade acestuia o viață, dacă acesta rămâne în urma contactului
fără vieți, personajul “moare” și se afișează meniu de res tart. În urma contactului itemul nu
dispare. Item -ul pentru c reșterea a vieții, odată contactat dispare, adăugându -i caracterului o
viață. Dacă bara de viață a acestuia este plină se afișează mesajul “Full health”, iar itemul rămâne
în scenă (Fig. 43)
Fig.43 Afișare mesaj “Full health”
Bara de status
Cu ajutorul HUD -ului (Head -Up Display) sau denumită în română Bară de status,
utilizatorul poate vizualiza în timpul jocului informații care aparțin interfeței.
Bara de status a jocului prezentat utilizează elemente de arta pixelilor, ce vin ca o
îmbunătățire a aspectului acestuia. În bara de status se pot observa funcționalitați pentru afiș area
vieții personajului (Fig .44 ) și pentru numărul de diamante colectate (Fig. 45).
Fig.44 Blueprint -ul co respunzător barei de status pentru afișarea vieții
Fig.45 Blueprint -ul corespunzător barei de status pentru numărarea diamantelor
Pentru apelarea codului care generează creșterea numărului diamantelor albastre, s -a creat
o variabilă în Blueprint -ul caracterului denumită “Gem Blue” . Apelarea variabilei s -a putut
realiza prin funcția “Cast To CharacterBP”, unde CharacterBP reprezință n umele Blueprint -ului
utilizat pentru caracterul princi pal .
Pentru bara de viață, la apelare s-au folosit bucăți de cod asemănatoare celui pentru
diamante, atribuind variabilei “Health ” valoarea inițială 5. Implementarea funcționalităților
pentru scădere, respectiv ridicare a vieții a fost realizată la nivelul mai multor Blueprint -uri, astfel
încât să fie posibilă diferențierea dintre itemele/obiectele care duc la scădera vieții (Fig. 46), de
cele care adaugă viață (Fig. 47).
Fig.46 Blueprint -ul inamicului “muscă” la contacul cu personajul controlat de utilizator .
Reprezentare funcționalitării de scădere a vieții
Fig.47 Blueprint -ul editorului de viață “ciupercă” la contacul cu personajul controlat de utilizator.
Reprezentare funcționalitării de adăugare a vieții
Hartă logistică
În vederea utilizării unei din funcțiile aparținand Teorie Haosului, cu ajutorul funcției
“Math Expression”, s -a utilizat ecuația caracteristică mapei logistice (Fig. 48)
Fig.48 Blueprint cu implementarea ecuației mapei logistice
Ecuația a fost utilizată în generarea aleatorie inamicilor din cadrul unui nivel avansat .
Astfel pentru valoarea lui r s-a utilizat o funcție de generare aleatorie a unui variabile între frecventă
apariției inamicului și o constantă maximă, 4 în exemplul prezentat. Iar pentru valoare lui x s -a
folosit valoarea dificultății nivelului. Codul es te utilizat pe parcursul a mai multe nivele și arătând
chiar proprietatea de creșterea/scădere a populației în funcție de rata fertilității , acestă rată fiind
înlocuită în program de frecvența cu care apar inamicii.
Finalul jocului
După parcurgerea nenumă ratelor nivele și experiența multor provocări, utilizatorul ajunge
în faza finală a jocului. Camera finală, după cum prezentă și indiciul din incipitul jocului este legată
de luarea unei decizii. Aici sunt ilustrate două chei de culori diferite, roșu și al bastru, fiecare
reprezentând un alt final al jocului (Fig. 49).
Fig.49 Camera de final
Pentru alege a cheiei roșii, se v -a deschide ușa corespunzătoare culorii. După acestă ușă se
află o cameră închisă din care personajul odată intrat nu mai poate ieși și în plus la declanșarea
zonei de coliziune plasată exact în fața ușii, folosită adineaori de jucător , pe suprafața intregii
camere apar bombe care explodează, facând inevitabil contactul cu acestea (Fig. 50). Urmează
apariția meniului de restart care de acestă dată nu mai include butonul de “Try again ”, singura
Fig.50 Camera de generată în urma alegerii cheie roșii
opțiune fiind prezentată de butonul pentru închiderea jocului.
Alegerea cheiei albastre funcționează similar cu cea a chei ei roșii, până în punctul apariției
bombelor, acesta fiind înlocuit de generarea unui unui mesaj cum că, această alegere era cea
potrivită, urmând apoi afișarea meniu de start .
Folosind limbajele și intru mentele de lucru prezentate în cadrul Capitolului 2,
implementarea aplicației A Wise Choice a fost realizată pentru a -i aduce utilizatorului o experiență
interactivă și plăcută.
În implementarea jocului s -a încercat obținerea cât mai multor elemente de di versitate, prin
crearea mai multor nivele și situații care sa pună utilizatorul în dificultate.
Capitolul 4
4.1 Concluzie și direcții de viitor
Direcții de viitor
Aplicația poate avea mai multe direcții în care poate fi dezvoltată.
Implementările viitoare ar putea fi constituite de:
1) Introducerea unui meniu din care utilizatorul iși poate selecta, încă de la început
gradul de dificultate ;
2) Adăugarea unei variații de teme vizuale, ca de exemplu o temă de temniță, unde toate
elementele ar avea culori închise, efectele artistice și inamicii ar fi mai înfricoșători;
3) Dezvoltarea meniului aducând ferestre pentru inventarul caracterului, status jocului, și
harta camerelor;
4) Introducerea itemelor de tip “power -up”, care ar oferi personajului anumite puteri
precum : lansarea a doua proiectil e la o singură apăsare a tasei, viteză de mișcare sau
imortalitate pentru un timp determinat;
5) Implementarea modului de joc co -op (cooperative), apelând la rețeaua LAN ;
6) Crearea unui povești cu elemente cinemat ice și intoducerea unor personaje non –
jucător (NPC) pe parcursul jocului.
7) Implementarea jocului pe dispozitivele mobile și pe tabetă , pentru sistemul de operare
Andoid și pentru iOS . Acestă idee apare ca o provocare, atâ t pe partea de scalabilitate,
cât și la modificarea controlului de joc.
8) Extinderea aplicației pe sistemele de operare Linux și MacOS.
Concluzii
Aplicația “A Wise Choice” a apărut în urma dezbaterii mai multor ideei de teoria jocurilor
îmbinate cu implementarea ecuației hărții logistice, idee care își are rădăcinile în teoria haosului.
Acesta își propune a fi aplicație bazată pe ideilei unui joc utilizate în crearea jocurilor de
tip RPG, arcade și roguelike.
Prin prezenta lucrare s -a încercat prezentarea modului de funcționarea a aplicație i și
legătura acesteia cu tehnologiile ,limbajele și teoriile de la bază. Prezentarea aplicației s -a realizat
pornind de la idei generale precum ilustrarea tehnologiilor folosite și concretizând cu idei
particulare ale modului de folosire a acesteia. Atât prezentarea tehnologiilor utilizate cât și
descrierea problemei sau fost structurate pe părți, pornindu -se de la realizarea unui scurt istoric al
domeniului, continuând cu expunerea aspectelor generale, ajungând în final la descrierea concretă
a atribuțiil or aduse lucrării.
Având în vedere ideile expuse, jocul intitulat “A Wise Choice” – O alegere înțeleaptă,
oferă utilizatorilor o experiență palpitantă într -un cadru de joc placut.
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: De-a lungul timpului termenul de joc a luat amploare în diverse domenii de activitate. [629586] (ID: 629586)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
