luni, 10 iunie 2013

Proiectul Game Creator



Clasa a IX-a a fost pentru mine o experienţă cu adevărat nouă. Nu numai că am cunoscut un alt colectiv, dar şi sarcinile de lucru pe care a trebuit să le fac au fost diferite faţă de cele din gimnaziu. Dintre toate, cel mai mult mi-a plăcut proiectul Game Creator de la disciplina Informatică.

Ce a trebuit să facem?
Un joc folosindu-ne de cunoştiinţele noastre de programare dobândite pe parcursul clasei a IX-a. Nu am fost limitaţi doar la acestea, ci am putut folosi şi librăriile grafice graphics.h sau SDL. Cea mai importantă condiţie a fost ca jocul nostru să fie făcut în CodeBlocks, în limbajul C++.

Care a fost reacţia mea?
Eu am fost foarte vesel la auzul acestui proiect. Sunt gamer de când mă ştiu şi totdeauna mi-am dorit să fac un joc. Am făcut unul în gimnaziu în limbajul Pascal care genera un număr random şi tu trebuia să îl ghiceşti. Am fost foarte mândru de acel joc, dar îmi doream să fac unul mai mare, cu grafică, meniu şi gameplay mai complex.

Ce echipă am avut?
În echipă am fost trei oameni. Eu, Sergiu Iacob si Şerban Cobzac. Ne-am unit sub numele de TriPix.

Ce joc am făcut?
Iniţial nu am avut nici o idee de joc. Eu mă gândisem la un RPG text-based care să aducă un tribut primului meu joc. Dacă ar fi luat viaţă, în acel joc trebuia să fii un agent care avea o anumită clasă şi un device care permitea reducerea evenimentelor reale la ghicirea de numere. De exemplu puteai descuia o uşă încuiată prin ghicirea unui număr sau te puteai feri de un glonţ ghicind un număr care modifica traiectoria, etc… Deşi sună spectaculos, să nu vă gândiţi că ar fi avut o grafică prea spectaculoasă. Totul ar fi fost în mod text, iar progresul în joc s-ar fi bazat prin alegerea unei anumite decizii dintr-un grup de posibilităţi (adică: Pe ecran se afişa: “Eşti în faţa unei uşi. 1- deschide uşa 2- întoarce-te” şi jucătorul tasta 1 sau 2 în funcţie de decizie). Accentul s-ar fi pus pe atmosferă (deja mă pregătisem cu un playlist), poveste şi pe minigame-ul de ghicit (numărul suferea modificări pe parcurs, iar jucătorul trebuia să cumpere date despre număr sau să îşi folosească abilităţile specifice clasei pentru a-l ghici), însă genul acesta de joc nu prinde la publicul de rând. Deşi iniţial am vrut să facem asta, ulterior ne-am răzgândit şi am hotărât să facem alt joc. Intr-o zi ieşeam de la şcoală şi ne gândeam cu toţii de zor ce joc să facem, asta până când Sergiu ne-a arătat un joc de pe telefonul lui numit Mole! Mole! Mole!. Tot ce trebuia să faci în acel joc era să loveşti cârtiţe în cap atunci când acestea apar pe ecran. Jocul ne-a picat cu tronc şi am hotărât să facem un joc asemănător. Aşa a luat fiinţă în mintea noastră SmashTheMole.

Care e povestea jocului SmashTheMole?
În SmashTheMole, eşti un fermier a cărui grădină a fost atacată de o invazie de cârtiţe. Acestea au creat în grădina ta o reţea de 4x5 găuri din care îşi scot capul ocazional ca să îţi facă în ciudă. Enervat la culme, tu trebuie să salvezi cât mai multe legume lovind cârtiţele în cap de fiecare dată când ele îndrăznesc să iasă.

Ce trebuie să faci în SmashTheMole?
În SmashTheMole controlezi un ciocan cu care poţi lovi lucrurile de pe ecran, căci, pe lângă cârtiţe, mai apar şi diferite power-up-uri de timp sau de puncte. Scopul tău este salvezi cât mai multe legume (adică să faci puncte), într-un interval de timp care iniţial este de 35 de secunde, dar care creşte în funcţie de cât de bine te descurci. De asemea, ciţibuşare cum le ştim, cârtiţele vor profita de frenezia ta de a apăsa tot ce apare pe ecran şi, ocazional, vor mai ieşi din gropi şi cu câte o bombă ataşată de ele (hmm…suicide moles?). Nu îţi doresc să le arăţi partea cea mai ascuţită a ciocanului tău pentru că şi ele îţi vor arăta o penalizare de timp şi de legume. În plus, cârtiţele nu sunt singurele ce vor să fure legume din grădina ta! Până şi Chuck Norris vrea asta! De aceea, el va apărea ocazional pe ecran, iar dacă îl loveşti vei primi mult timp şi puncte bonus. Datorită faptului că el stă puţin pe ecran, a fost gândit să îţi strice combo-ul în cazul în care eşti foarte bun şi dai click pe el fix în momentul în care dispare. Că tot veni vorba, pe parcursul jocului, dacă loveşti mai multe cârtiţe consecutiv, vei începe să construieşti un combo care te va răsplăti cu puncte bonus în funcţie de lungimea lui (de la Combo x 2 poţi ajunge, dacă eşti bun, la Combo-ul maxim de x30).

Ce sarcini a avut fiecare?
Eu m-am ocupat de poveste, game design, conceperea unui algoritm iniţial de funcţionare, finisări de gamplay şi organizare (eu am fost şeful). Am făcut liste cu ce am făcut/ce mai trebuie făcut, precum şi prioritizare de sarcini. Sergiu a implementat grafica şi a mai “şlefuit” algoritmul meu. Şerban a făcut partea audio-grafică. Deşi el nu a implementat, a făcut o treabă excelentă cu grafica jocului şi nu de puţine ori a trebuit să refacă anumite elemente grafice la dorinţa mea sau a lui Sergiu :D .

Când/cum am lucrat?
Ne-am apucat târziu de joc (cam cu 10 zile înainte de deadline). Eram cu toţii puţin demoralizaţi să auzim că alţii aproape şi-au terminat jocul şi noi nici nu ne-am apucat, dar eu încercam să ridic moralul cu o glumiţă pe care o ziceam de fiecare când auzeam întrebarea:
-“Va-ti apucat de joc? Cum staţi?”
-“Aaaa…păi noi l-am terminat de mult. L-am facut şi în DirectX…”, le răspundeam eu surâzător.
În cele două week-end-uri pe care le-am avut la dispoziţie ne-am întâlnit la mine acasă şi am lucrat intens, Şerban în Photoshop la partea grafică şi eu cu Sergiu la programare. În restul săptămânii fiecare îşi făcea treaba lui, iar în ultimul week-end am reunit funcţionalitatea cu grafica. Duminică am făcut partea audio, iar jocul l-am terminat triumfători luni seara, terminaţi de oboseală.

Ce probleme am întâmpinat?
Pe lângă criza de timp, am întâmpinat şi alte probleme pe parcursul programării. Cele mai notabile a fost afişarea pe ecran (funcţia de afişare nu putea afişa date int, aşa că a trebuit să le convertim manual în şiruri de caractere), dispariţia cârtiţelor de pe ecran (iniţial, dificultatea jocului creştea pe măsură ce trecea timpul şi aceasta era definită prin numărul de cârtiţe ce apar, intervalul de apariţie şi intervalul în care stăteau pe ecran, valori ce se modificau pe parcursul trecerii timpului şi variau destul de mult. Asta determina la un moment dat o dispariţie instantanee a cârtiţelor pe la finalul jocului, ceea ce ne-a scos peri albi. Până la urmă am dat valori mai apropiate acelor timpi si am rezolvat problema), precum şi un bug in-game (care făcea ca jucătorul să îşi ia crash în runda a III-a de joc, asta dacă juca bine. Într-un final, am mai renunţat la o parte din sunetele pentru Chuck şi am făcut o serie de reiniţializări care ne-au scăpat de acest bug, sper).

Cum a fost munca în echipă?
Munca în echipă a mers bine. Fiecare şi-a făcut treaba într-un mod corezpunzător, fără întârzieri. Mi-a făcut o plăcere deosebită să lucrez în echipă cu Sergiu şi cu Şerban. Toţi trei fire perfecţioniste, asta ne-a determinat ca într-un scurt timp să realizăm un joc care, în opinia noastră, este foarte bun. Au mai fost şi idei în contradictoriu, mai ales între mine şi Sergiu. Cea mai mare a fost aceea de a folosi folosi o rezoluţie stabilă ( părerea mea) VS una variabilă în funcţie de rezoluţia ecranului ( părerea lui Sergiu). Până la urmă am făcut cu o rezoluţie stabilă, asta în momentul în care Sergiu a înţeles, din explicaţiile mele, că nu poţi să deformezi şi imaginile în funcţie rezoluţie, ceea ce ar fi putut determina o deformare a graficii.

Cum a fost la prezentare?
Prezentarea a fost în regulă. Aceasta s-a împărţit pe două părţi: prezentarea jocului şi prezentarea codului. La prezentarea jocului este evident ce am făcut, iar la partea de cod am prezentat cele mai importante funcţii din program: main(), meniu(), intro(), joc(), dategen(), punecursor(), gen() şi elim(). Nemulţumirea audienţei noastre a fost doar aceea că am preluat anumite elemente grafice sau audio din alte părţi ( ca de exemplu: sunetele care se aud atunci când Chuck este lovit sunt preluate de la un anouncer de Heroes of Newerth făcut cu sprijinul inegalabilului actor vocal John Saint John, care face vocea lui Duke Nukem în jocurile Duke Nukem sau vocea lui Axe, Kunka si Faceless Void din Dota 2). Acum, dacă suntem cârcotaşi, şi alţii au preluat elemente grafice din alte părţi, dar domnul profesor avea dreptate: e păcat să ne distrugem munca cu elemente audio&grafice care nu sunt ale noastre şi puse în joc fără nici o legătură…

Ce impact a avut acest proiect asupa dezvoltării mele personale?
Pe lângă faptul că am reuşit să mă împrietenesc mai bine cu membrii echipei mele, s-a trezit în mine o dorinţă arzătoare de a mai face şi alte jocuri. Am în minte câteva idei, deşi jocurile sunt simple în aparenţă, dar sunt un bun exerciţiu de a mai exersa lucrul cu librăria SDL. De asemenea, am realizat că mai am anumite probleme la capitolul “ascultare de opinii”.

Ce impact a avut acest proiect asupa dezvoltării mele profesionale?
 Acest proiect mi-a îndeplinit un vis din copilărie! A fost o ocazie excelentă în care am putut să îmi testez capacităţile de game design şi mă gândesc serios să urmez o cale în acest domeniu.

Awesome! Dar întrebarea cea mai importantă rămâne: cum mă pot juca şi eu jocul vostru?
Îl poţi descărca de aici: http://www1.datafilehost.com/d/a3d408a8 , peste care aplici patch-ul următor: http://www1.datafilehost.com/d/557a0225 . Ai grijă să debifezi opţiunea de sub download atunci când descarci şi spor la salvat de legume!