CREACIÓ I DESENVOLUPAMENT D’UN VIDEOJOC · Això fa que els videojocs que es creen per telèfons...
Transcript of CREACIÓ I DESENVOLUPAMENT D’UN VIDEOJOC · Això fa que els videojocs que es creen per telèfons...
TREBALL DE RECERCA CREACIÓ I DESENVOLUPAMENT D’UN VIDEOJOC
Autor/a: Guillem Rueda Oller
Curs: 2013 - 2014
Centre educatiu: Institut Icària
Tutor/a del treball: Feliu Muniente Navales
ÍNDEX
INTRODUCCIÓ ............................................................................................... 3
1. PART GENERAL ........................................................................................ 5
1.1. Suports per a videojocs .......................................................................... 5
1.1.1. Els ordinadors ............................................................................... 6
1.1.2. Els telèfons mòbils ........................................................................ 7
1.1.3. Les consoles per videojocs ........................................................... 8
1.1.4. Recomanació i decisió ................................................................ 9
1.2. Llenguatges i entorns de programació .................................................. 11
1.2.1. Programes específics per jocs VS llenguatges de programació ... 11
1.2.2. Llenguatges de programació ....................................................... 13
1.2.3. Entorns de programació per C++ ................................................ 17
1.3. Requeriments per programar en C++ .................................................. 20
1.3.1. Instal·lació de l’entorn Dev-C++ ................................................ 20
1.3.2. Explicació i instal·lació de la llibreria Allegro 5 ........................ 21
1.3.3. Opcions a definir per programar un videojoc ............................. 23
1.4. Gèneres de videojocs ............................................................................ 24
1.4.1. Videojocs d’acció ........................................................................ 24
1.4.2. Videojocs de simulació ................................................................ 26
1.4.3. Videojocs d’aventura ................................................................... 28
1.4.4. Recomanació i decisió ................................................................ 30
1.5. Advertències per crear un videojoc ....................................................... 31
1.5.1. Les llicències dels recursos informàtics ...................................... 31
1.5.2. Recomanacions a l’hora de programar ......................................... 32
2. PART ESPECÍFICA ................................................................................... 33
2.1. Especificacions del joc .......................................................................... 33
2.1.1. La concepció ............................................................................... 33
2.1.2. El disseny ................................................................................... 45
2.1.3. La planificació ............................................................................ 50
2.2. Desenvolupament del projecte .............................................................. 52
2.2.1. La producció ................................................................................. 52
2.2.2. Les proves ................................................................................... 69
2.2.3. El manteniment ............................................................................ 70
2.3. Compilació i distribució del joc ............................................................ 72
2.3.1. Compilació estàtica amb Allegro 5 utilitzant l’entorn Dev-C++ . 72
2.3.2. Incorporació d’arxius multimèdia al fitxer final ........................ 74
CONCLUSIONS ............................................................................................. 75
BIBLIOGRAFIA ............................................................................................. 76
ANNEX ............................................................................................................. I
ANNEX A: GLOSSARI (paraules marcades en >> verd <<) ............ II
ANNEX B: PROGRAMES UTILITZATS ...................................... XV
ANNEX C: CODIS DEL VIDEOJOC “Tiverton” ........................... XVI
ANNEX D: CODIS DEL PROGRAMA “makeUpdateMaps” ........ XXIX
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller 3
INTRODUCCIÓ
Des de finals dels anys setanta els videojocs s’han anat integrant exitosament en la
nostra societat i en la nostra cultura, però què és un videojoc? Un videojoc és un espai
virtual on s’hi pot interactuar amb una sèrie de perifèrics i veure aquest espai en una
pantalla. Actualment es tenen diversos suports per jugar a un videojoc, per exemple amb
un ordinador o amb un telèfon mòbil.
L’objectiu d’aquest treball és explicar les parts, les alternatives, les decisions i els
coneixements que s’han d’exercir per crear un videojoc. Com aplicació pràctica d’això
es farà un videojoc d’exemple, on es podran veure clarament els processos generals i
particulars per realitzar aquesta tasca.
Abans de fer un videojoc s’han de prendre decisions. Per exemple com serà, per a quin
suport es crearà, ... Abans de fer cap decisió, s’ha d’analitzar les diverses opcions per
triar la que ens vagi millor, anomenant els seus avantatges i inconvenients. Primer de
tot, en el treball s’analitzarà per a quin suport pot estar disponible un videojoc (per a
ordinador, consola, telèfon mòbil, etc.) ja que depenent del suport per al qual es vagi a
fer el videojoc, la manera de crear-lo és diferent i per tant, aquesta ha de ser la primera
decisió a prendre.
També s’analitzarà les diverses opcions sobre com fer un videojoc, si utilitzant algun
programa o programant, i per tant, quins són els programes més coneguts i útils per
crear un videojoc, i per altra banda, quins són els llenguatges de programació
disponibles per al suport triat. S’analitzarà profundament els llenguatges de
programació disponibles ja que per a cada un es necessiten coneixements diferents i
alguns no són gaires recomanables per crear un videojoc a causa de la seva simplicitat,
complexitat o simplement que no estan pensats per al que ens interessa.
Es pot programar amb l’ajuda d’un programa que faciliti l’accés als fitxers, la correcció
del codi de programació o la execució del videojoc en proves. Aquests programes són
uns entorns, els quals no són necessaris, però són molt útils a l’hora de crear un gran
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller 4
projecte. S’haurà de decidir quin entorn s’utilitzarà depenent del tipus de projecte que es
realitzi, que en el cas d’aquest treball és crear un videojoc.
Un cop preses aquestes decisions i tenint tots els requisits del llenguatge de programació
triat, el treball es centrarà en com serà el videojoc. Per a això, s’analitzarà diferents tipus
de jocs i les característiques que ha de tenir un videojoc depenent de quin tipus sigui.
Aquesta primera part general s’acabarà comentant diversos problemes freqüents en la
creació d’un videojoc.
Finalment es centrarà en el joc particular decidint les seves especificacions, és a dir,
s’haurà de pensar tot el joc abans de crear-lo. Llavors s’explicarà tota la part del
desenvolupament d’un videojoc amb l’ajut del joc d’ordinador que es crearà com
aplicació pràctica. Durant el desenvolupament del joc, s’esmentaran possibles
problemes o dubtes que ens poden aparèixer. També poden aparèixer altres programes
durant el desenvolupament del joc que es puguin necessitar per coses puntuals
(transformar un arxiu en un de diferent extensió, etc.). Per acabar es comentaran les
diverses maneres de compilar i distribuir el videojoc.
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller 5
1. PART GENERAL
En aquesta part general es veuran els passos que s’han de seguir per fer qualsevol
videojoc. Es començarà per analitzar els diferents suports pels videojocs, veient les
característiques de cada suport i els avantatges i inconvenients que implica cada opció.
Després es veurà els llenguatges disponibles per crear un videojoc i els entorns més
útils. Amb el llenguatge de programació ja escollit s’anomenaran els requeriments per
programar, en el cas del joc de mostra en C++. També s’analitzarà els diferents gèneres
de videojocs i les característiques de cada gènere. Per acabar aquesta part general, es
veuran diversos problemes freqüents que es poden tenir a l’hora de crear un videojoc.
1.1. Suports per a videojocs
El primer de tot que s’ha de pensar quan es proposa crear un videojoc és decidir per a
quin suport és farà, ja que depenent del suport triat la manera de crear el videojoc
canviarà molt. Cada suport sol necessitar un llenguatge de programació diferent per
crear un videojoc. A més a més, la distribució d’un videojoc per a certs suports és
complexa i de pagament.
A continuació es veurà i s’analitzarà els tres suports més comuns a l’hora de crear un
videojoc:
• Els ordinadors
• Els telèfons mòbils
• Les consoles per videojocs
A part d’aquests tres suports per videojocs existeixen d’altres com les màquines
recreatives o les agendes electròniques en les que també es pot jugar. L’inconvenient a
l’hora de crear un videojoc per un d’aquests suports és que necessiten un llenguatge de
programació propi que només té l’empresa propietària del suport o en altres casos s’ha
de pagar per obtenir el codi del llenguatge necessari.
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller 6
1.1.1. Els ordinadors
Crear un videojoc per
ordinador, o podríem dir un joc
d’ordinador, és una opció
possible amb molts avantatges.
Aquesta opció té moltes
possibilitats diferents ja que no
està limitada a un únic
llenguatge de programació, sinó
que hi ha molts llenguatges per
fer un joc d’ordinador i la majoria són lliures, és a dir, no s’ha de pagar per utilitzar-los.
A més a més, existeixen molts programes i entorns que ajuden a crear un videojoc per
ordinador.
Qualsevol ordinador sempre tindrà uns perifèrics comuns, com per exemple el teclat o el
ratolí. Això fa que no s’hagi de crear un videojoc per a un ordinador en concret, sinó
que pot funcionar en qualsevol, sempre que compleixi uns requeriments mínims per a
cada joc.
Una característica molt bona dels ordinadors és que el seu sistema (o software) per
reproduir videojocs es pot actualitzar. D’aquesta manera podem jugar en un ordinador
antic sempre que li actualitzem el software corresponent.
En realitat, els ordinadors no són videoconsoles i això fa que es pugui fer més
complicada la feina ja que cap dels llenguatges de programació reproduïbles en
ordinadors està pensat específicament per crear videojocs, sinó que estan pensats per a
qualsevol aplicació i això fa que hi hagi codis que no siguin necessaris per fer un
videojoc, o que es necessitin més línies de codi per realitzar una funció que amb un
llenguatge exclusiu per a videojocs, on les funcions comunes en tots els videojocs ja
estarien programades. Per sort, existeixen llibreries de les quals s’utilitzarà una que
ajudarà a crear el nostre videojoc de la qual es parlarà més endavant.
L’ordinador és un suport essencial per la indústria dels videojocs ja que la majoria de la població moderna en té un com a mínim.
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller 7
Els ordinadors sempre tindran els millors gràfics pel simple fet que es poden actualitzar
tan el seu programari com canviar el hardware de l’aparell. A més a més, sempre se’ls
hi pot afegir més perifèrics.
La distribució del producte final sol ser una part complicada depenent de si vols
distribuir-lo per Internet o en DVD (opció més cara).
1.1.2. Els telèfons mòbils
Per altra banda, els jocs per telèfons mòbils s’han
popularitzat ràpidament gràcies a la incorporació
massiva dels telèfons intel·ligents al mercat (també
coneguts com smartphones). Aquests telèfons
mòbils tenen un sistema operatiu modern (per
exemple Windows o Android) pel que es poden crear
aplicacions i videojocs amb eines que faciliten la
seva creació.
La majoria d’aquests telèfons tenen una
característica en comú: la pantalla és tàctil. Això els
hi dóna un avantatge sobre els ordinadors, ja que els
jocs per als telèfons mòbils actuals poden utilitzar la
pantalla tàctil, al igual que la inclinació de l’aparell, com elements per interactuar amb
el joc; dues característiques que els ordinadors més comuns no tenen.
Els smartphones també poden actualitzar el seu sistema operatiu (igual que amb els
ordinadors), però no se’ls pot modificar cap component físic, i per tant, s’hauria de
comprar un telèfon nou. Això fa que els videojocs que es creen per telèfons mòbils
s’hagin d’adaptar al sistema operatiu, i a casi cada sèrie de telèfons intel·ligents, ja que
sense els components necessaris pel videojoc no s’executarà.
El videojocs clàssics van ser els primers en tornar a ser programats per poder jugar als smartphones.
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller 8
Llavors fer un videojoc per a qualsevol telèfon mòbil intel·ligent ja no és tan senzill, ja
que s’ha de conèixer el llenguatge de programació de cada sistema operatiu i les seves
versions, i les limitacions i característiques de cada telèfon.
A més a més, aquests aparells solen utilitzar un tipus de llenguatge de programació no
molt bo per crear videojocs. D’això ja es parlarà més endavant.
Finalment, la distribució dels jocs té més inconvenients que avantatges. L’avantatge
principal és que la distribució del videojoc la fa l’empresa propietària del sistema
operatiu corresponent, cosa que estalvia feina. Però malauradament aquesta distribució
és de pagament i si es vol que l’aplicació sigui gratuïta i tenir beneficis s’ha d’introduir
publicitat dins del joc.
1.1.3. Les consoles per videojocs
L’última opció de suport per a videojocs que es proposa són les consoles. Les consoles
per videojocs són específiques per executar videojocs i tenen característiques útils per
aquesta feina.
Les consoles per videojocs, com ara la
PlayStation o la Nintendo DS, tenen els
components físics necessaris per executar els
jocs més complexos que es dissenyen, per
això mai es bloquegen els videojocs en aquest
tipus de consoles.
El llenguatge de programació que utilitzen és
específic per crear videojocs, un gran avantatge, però per altra banda, és completament
diferent per a cada aparell. Això fa que s’hagi de conèixer el llenguatge específic i les
característiques de la videoconsola per la que es vol fer el videojoc.
Model negre de la PSP 3000. Algunes videoconsoles han tingut un gran èxit gràcies a que són portables i fàcils de manejar.
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller 9
L’inconvenient principal de crear un joc per a una videoconsola és que tot el procés
assumeix un cost molt elevat, ja que s’ha de pagar per obtenir les llibreries del
llenguatge de programació, no hi ha manuals gratuïts per aprendre a programar, i s’ha
de pagar a l’empresa propietària de la videoconsola per tal que validin si permeten
vendre el videojoc. A més a més s’ha de tenir en compte que el joc ha de tenir una certa
qualitat perquè permetin que es vengui.
L’única forma de distribuir el producte és en DVD o en el suport específic per la
videoconsola, fet que fa que la distribució del videojoc sigui caríssima. Només les grans
empreses creen jocs per a videoconsoles ja que poden assumir el cost del procés.
Aquesta és la opció menys desaconsellada sobretot si no s’és un professional com en el
cas d’un Treball de Recerca en fer videojocs i només recomanada a les empreses grans
que es dediquen exclusivament en fer videojocs. S’ha de tenir en compte que aquests
videojocs els fan un grup molt gran de programadors i dissenyadors experts.
1.1.4. Recomanació i decisió
Vistes aquestes tres opcions ara s’ha de triar per a quin suport es farà el videojoc, ja que
no es pot fer un sol videojoc que s’executi en tots els suports. S’hauria de fer el mateix
videojoc varies vegades.
Directament es descarta l’opció de crear un videojoc per a una videoconsola pel seu cost
elevat i pel temps que es necessita dedicar en crear un videojoc perquè sigui acceptat.
No es recomanable a no ser que es tingui una empresa de videojocs.
El suport recomanable a qualsevol persona interessada en crear un videojoc és
l’ordinador. Hi ha molts programes i diversos llenguatges de programació que es poden
fer servir per crear un joc d’ordinador i la majoria són gratuïts. Fer un videojoc per
ordinador és la millor manera per començar a aprendre a fer videojocs i té moltes
possibilitats diferents ja que té perifèrics bastant complexos que altres suports no tenen,
com ara el teclat i el ratolí.
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller 10
Per persones amb molts coneixements en la creació de videojocs en ordinador i amb
ganes de canviar de suport poden aventurar-se a crear un videojoc per telèfon mòbil.
Aquesta opció només és recomanable per a persones que ja tinguin força experiència en
la creació de videojocs.
En aquest punt del procés de crear un videojoc és quan s’ha de decidir quin suport
informàtic triar pel nostre joc.
El videojoc que es crearà com aplicació pràctica del treball serà per ordinador a causa
de les diverses possibilitats que ofereix aquesta opció, i d’ara endavant aquest treball es
centrarà en la creació d’un videojoc per ordinador o també conegut com a joc
d’ordinador.
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller 11
1.2. Llenguatges i entorns de programació
A continuació es parlarà dels llenguatges i entorns de programació a triar per realitzar
un joc d’ordinador.
1.2.1. Programes específics per jocs VS llenguatges de programació
Abans d’anar al propòsit del títol es fa una explicació més general sobre les diferents
maneres de fer un joc d’ordinador, introduint així els llenguatges de programació.
Ja se sap que es vol fer un joc d’ordinador, i ara s’ha de triar la manera de fer el nostre
videojoc. Es pot triar entre dues opcions ben clares:
• Utilitzar un programa especialitzat en la creació de videojocs
• Fer ús d’un llenguatge de programació genèric
Hi ha una gran quantitat de programes per crear jocs d’ordinador. Aquests programes
tenen una interfície intuïtiva de manera que sol ser bastant senzill el seu ús. D’aquesta
interfície se’n diu drag and drop (“Arrossega i deixa anar”).
D’aquests programes hi ha els especialitzats en dues dimensions, com ara el GameSalad
o el GameMaker, i els programes especialitzats en la creació de videojocs en tres
dimensions com per exemple el 3D Rad o Entidad 3D. El que fan aquests programes es
convertir el videojoc dissenyat amb el programa, en un codi de programa, per exemple
el programa Scratch converteix el joc creat en una aplicació en Java.
Tot i que pugui ser més atractiu utilitzar un programa especialitzat en la creació de
videojocs pel fet de què no faci falta tenir (grans) coneixements de programació,
aquestes eines són bastant limitades (fins i tot les de pagament), i és molt probable que a
l’hora de fer el videojoc amb aquests programes no es pugui fer alguna funció o
característica que s’ha pensat.
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller 12
La millor solució a aquest problema és saber
un llenguatge de programació útil per crear
videojocs. Aquesta opció permet fer realitat
qualsevol idea que es tingui pel videojoc, ja
que programant es pot fer qualsevol cosa.
Però és clar, no és fàcil conèixer un
llenguatge de programació amb profunditat i
saber programar qualsevol cosa; ni tampoc
aprendre a programar. La dificultat en fer un
videojoc programant no és només saber
programar, sinó pensar cada detall del videojoc, ja que tot el que es vulgui fer s’haurà de
programar.
Aquesta manera de crear un videojoc requereix un coneixement molt ampli en camps
com la matemàtica i la física, per exemple, ja que no hi ha un opció que apliqui la
gravetat als objectes o que mogui automàticament un personatge al prémer les tecles de
direcció. Tot això requereix tant conceptes de programació com d’altres camps.
Ara només s’ha de decidir si es vol utilitzar un programa especialitzat en la creació de
videojocs, o es vol fer el joc d’ordinador programant. Per a les persones que no han fet
mai cap videojoc i encara que sàpiguen programar se’ls recomana que facin el joc
mitjançant un programa per fer videojocs, ja que si estalviarà els problemes que té
programar, i a més a més, hi ha alguns programes que permeten introduir petits i
senzills codis al joc.
Per fer un videojoc programant s’ha de tenir un gran coneixement de programació, no
importa si no és l’adequat per fer un videojoc, ja que quan se sap un llenguatge amb
profunditat, es pot aprendre qualsevol altre llenguatge d’alt nivell fàcil i ràpidament.
Crear un videojoc d’aquesta manera és bastant entretingut però complicat, i per això
s’han de tenir moltes ganes de fer el joc. La resta del treball es centrarà en la creació
d’un joc d’ordinador mitjançant un llenguatge informàtic, ja que aquesta opció dóna un
gran ventall de possibilitats pel videojoc. Cal indicar que tots els videojocs actuals que
es comercialitzen es fan programant.
Creació del joc Tetris amb el programa Scratch. Encara que els programes tinguin eines limitades, els jocs bàsics poden ser creats tranquil·lament.
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller 13
Ara que se sap que es farà un joc d’ordinador fent ús d’un llenguatge de programació, és
el moment d’analitzar els diferents tipus de llenguatges de programació i veure quin té
les millors característiques i opcions per fer un joc d’ordinador. Cal recordar que el joc
que es vol fer ha de ser el millor possible. I per fi es pot anar al propòsit del títol
d’aquest apartat, o almenys a la primera part: els llenguatges de programació (per a
videojocs, per descomptat).
1.2.2. Llenguatges de programació
Un llenguatge de programació és un conjunt de codis que es poden combinar i executar
en un aparell electrònic i informàtic fent que aquest compleixi les accions que se li han
posat escrites (que s’han programat) en un llenguatge de programació admès per
l’aparell.
Una manera de classificar aquests llenguatges és segons la capacitat d’interacció directa
amb l’aparell. Aquests llenguatges són els de baix nivell i els d’alt nivell. Els
llenguatges de baix nivell interactuen directament amb el processador i la resta de
hardware de l’aparell. D’aquest tipus només existeixen dos: el llenguatge màquina
(zeros i uns) i el llenguatge Assemblador. Tot i ser els llenguatges que poden fer més
coses, els llenguatges de baix nivell ja no se solen utilitzar a causa de la seva gran
complexitat. D’altra banda es tenen els llenguatges d’alt nivell, que són aquells que
s’allunyen més dels zeros i els uns i intenten imitar el llenguatge humà, és a dir, aquests
llenguatges s’escriuen amb ordres semblants a quan parlem. En tots els llenguatges de
programació s’utilitza exclusivament l’anglès. El que fan aquests llenguatges és facilitar
la feina, ja que es programen amb codis fàcils d’entendre. Ara bé, aquests llenguatges
un cop compilats (o no), transformen el programa en llenguatge màquina ja que aquest
és l’únic llenguatge que els aparells entenen.
Hi ha llenguatges d’alt nivell que es diu que són de nivell mitjà ja que poden interactuar
un mica amb el hardware, però en realitat són d’alt nivell.
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller 14
Ara potser cal pensar que es el moment de triar quin nivell de llenguatge de
programació s’utilitzarà. Doncs no; per fer un videojoc, o en realitat qualsevol altre
cosa, s’utilitza un llenguatge d’alt nivell, ja que utilitzar tant codi en un llenguatge de
baix nivell acaba sent un codi incomprensible.
Tots els llenguatges de programació que es pugui conèixer són d’alt nivell: els
llenguatges de programació web, els llenguatges d’aplicacions informàtiques, els
utilitzats per crear sistemes operatius (en especial els dels mòbils), ...
Ara ja se sap que obligatòriament s’haurà d’utilitzar un llenguatge de programació d’alt
nivell, però quin? Aquest llenguatge no pot ser pas un llenguatge de programació web
com l’ HTML, però sí un per fer aplicacions i programes informàtics, ja que un videojoc
és una aplicació informàtica.
El joc que es vol crear ha de tenir un mínim
de complexitat, i per això s’ha d’analitzar els
llenguatges de programació que permetin
utilitzar la “programació orientada a
objectes” (abreujat POO). Aquest tipus te
programació permet al programador crear
objectes (informàtics) que tenen propietats i
accions. És molt semblant a la realitat, per
exemple: una televisió pot estar encesa o no,
per tant té la propietat d’encesa; i com accions
té les opcions d’encendre-la i d’apagar-la de
manera que canvia la propietat d’encesa a
vertadera si s’ha encès i a falsa si s’ha apagat. Doncs tot això també es pot fer
programant, i a més a més, permet no haver d’escriure varis cops el mateix codi, ja que
si en un llenguatge informàtic que no tingués POO es volgués fer un videojoc on
apareguessin “n” monstres iguals, s’hauria de copiar “n” vegades el codi d’un monstre.
Aquest tipus de programació permet crear objectes a partir de classes, per exemple es
podria crear una classe anomenada “fantasma” que tingués les propietats o atributs de si
La POO ens permet crear diversos objectes a partir d’una mateixa classe les quals es poden relacionar entre elles i amb altres objectes de diferents classes.
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller 15
està viu, les coordenades, i les accions (en programació és diu mètodes o funcions) de
moure, fer-se immortal, etc. A partir d’aquesta classe es podria crear els objectes de la
classe fantasma tantes vegades com es volgués sense repetir codis. Un altre avantatge és
que aquests llenguatges permeten crear classes a partir d’altres classes heretant els
atributs i funcions de la classe mare. Així per exemple, es pot programar una classe
“fantasma2” que tingui els mateixos atributs i les mateixes funcions que la classe
“fantasma” i que ha més a més tingui per exemple una funció per disparar.
Sabent tot això, és hora d’anar a enumerar els llenguatges de programació que es puguin
utilitzar. S’analitzarà els dos llenguatges més útils per crear un joc d’ordinador i més
coneguts, sobretot per la seva característica de tenir un sistema de POO molt bo: C++ i
Java.
El llenguatge C++ és considerat històricament el segon llenguatge orientat a objectes
(després del Simula67). Moltes vegades és pot trobar per Internet escrit com a C/C++ ja
que C++ és una ampliació del llenguatge C que incorpora la POO. Per tant C++ és una
molt bona opció per crear un joc d’ordinador. També hi ha una altre ampliació de C i
C++ que és C# que és més fàcil d’aprendre que el C++, però incorpora unes llibreries
especials de Microsoft les quals són de pagament. A més a més, el C# no se sol utilitzar
per fer videojocs ja que al ser un llenguatge més fàcil d’aprendre, és sinònim de tenir
menys opcions.
Per altra banda està el Java, un llenguatge de programació dissenyat a partir del C++.
Aquest llenguatge va ser creat des del principi com un llenguatge orientat a objectes. És
molt útil per crear aplicacions i sobretot ofereix la possibilitat d’incrustar alguns
programes (les applets de Java) en pàgines HTML. El Java és el llenguatge de
programació que té més llibreries disponibles. Finalment aquest llenguatge té una
característica que el fa molt especial, és un llenguatge multi-plataforma, això significa
que el nostre videojoc es podria executar en diferents plataformes com Windows, Linux,
Mac OS X, ... i també en diferents perifèrics com ordinadors, telèfons mòbils, ... sense
haver de tornar a programar-lo. El C++ també es pot executar en més d’un sistema
operatiu (menys que en Java) però només en ordinadors.
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller 16
Ara se sap que es té el C++, i el Java que és un llenguatge de programació multi-
plataforma ampliat del C++ i més senzill, segur, dinàmic, etc. Vist així sembla que el
Java és el millor llenguatge a utilitzar; o almenys ho pensava. La intenció inicial era fer
el joc d’ordinador amb Java al llegir les bones recomanacions del llenguatge per fer
aplicacions. El que passa és que Java és bo per fer aplicacions i programes que no
siguin videojocs. D’aquest aspecte és tan important parlar d’aquest aspecte que
s’explicarà en el següent apartat:
El problema de Java és que inicialment va ser pensat de manera que s’utilitzés
en molts perifèrics tant com en ordinadors com en impressores per exemple, i
necessita un intèrpret, ja que quan es compila un programa escrit en Java es crea
un “bytecode” (fitxer .class) que
pot córrer en qualsevol Màquina
Virtual Java. Això fa que mentre
s’està executant el programa,
s’està tornant a compilar. A causa
de no ser un llenguatge
completament compilat (és un
llenguatge interpretat i parcialment
compilat) alenteix els programes,
sobretot els videojocs.
Per què Java no és un bon llenguatge per fer videojocs?
Aquesta és una informació verificable per qualsevol programador de Java que
hagi programat amb gràfics, ja que és perfectament apreciable la lentitud amb
que s’executa el programa quan s’utilitzen molts gràfics.
Aleshores per fer el videojoc s’utilitzarà C++ que a més a més existeixen varies
llibreries molt útils per fer videojocs les quals es tractaran més endavant. Cal remarcar
que, la majoria de jocs d’ordinador que es comercialitzen (per exemple els de la saga
Call of Duty) estan programats en C++.
Missatge en francès “Java, patrocinador oficial dels gasteròpodes” (un tipus de mol·luscs). Durant uns quants anys el llenguatge Java ha estat considerat massa lent per a grans projectes.
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller 17
1.2.3. Entorns de programació per C++
Per programar en qualsevol llenguatge de programació es necessita un editor on
escriure. Aquest programa podria ser un tan senzill com el Bloc de notes, o un que
reconegui el llenguatge en el que s’està programant com el Notepad++. Però quan es
tracta de fer un projecte gran, el millor és utilitzar un entorn de programació o entorn de
treball, correctament dit, un entorn integrat de desenvolupament o IDE (integrated
development environment).
Els entorns de programació són programes que ajuden a l’hora de confeccionar un
projecte, per exemple un joc d’ordinador, ja que ajuden a classificar els diferents fitxers
del projecte (workspace), no només els de codi, sinó també els arxius multimèdia com
les imatges o l’àudio. També ajuden a l’hora de programar i mostren els errors en el
codi. Actualment tots porten compiladors dels llenguatges pensats per ser utilitzats en
l’entorn, i això fa que per compilar i executar tot el projecte només s’hagi de prémer un
botó. A més a més, permeten executar el programa en mode de proves mostrant els
valors actuals de les diferents variables o executant el programa fins a una línia
concreta.
Tot això és gràcies a que els
IDE es componen d’un editor
de text, un compilador, un
intèrpret (en els llenguatges
interpretats), un depurador
(troba errors) i a tenir unes
interfícies gràfiques d’usuari
fàcils d’utilitzar. A més a
més existeixen entorns
online que inclouen un client
online per executar els
programes.
Projecte en C++ obert en l’entorn de programació Code::Blocks (versió 1.0). En la majoria dels IDE es pot adaptar la interfície gràfica al gust de l’usuari, ampliant així el nombre de programadors que s’inclinen a fer ús d’aquest tipus d’eina.
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller 18
Hi ha molts entorns disponibles per programar en C++ i quin utilitzar depèn
exclusivament de la comoditat del programador amb l’entorn. Tres dels entorns de
programació més coneguts són:
• Microsoft Visual C++ (MSVC o VC++)
• Dev-C++
• Code::Blocks
El Microsoft Visual C++ inclou biblioteques de Windows i a més a més té un
compilador propi. Aquest entorn està programat en C++ cosa que fa que s’executi més
ràpid, i també està molt ben adaptat al sistema operatiu Windows. Per altre banda, el
MSVC és un entorn de pagament encara que disposa d’una versió Express gratuïta
suficientment bona per treballar a nivell no professional, com és el cas del videojoc
d’exemple del Treball de Recerca.
El Dev-C++ és l’entorn clàssic
del Windows que pot utilitzar
qualsevol compilador basat en
GCC (GNU Compiler Collection).
Aquest entorn està desenvolupat
en Delphi fet que fa que vagi més
lent que altres entorns. Té una
interfície d’usuari molt fàcil
d’entendre i utilitzar i està
disponible en castellà a part de ser
completament gratuït. El problema
d’aquest entorn és que des del
2005 el seu creador Bloodshed Software va deixar d’actualitzar-lo però com que
l’entorn és de llicència lliure un programador independent va continuar actualitzant-lo
no oficialment però amb afegits molt ben valorats.
A causa de la deixadesa de l’entorn anterior, es va decidir crear el Code::Blocks, un
entorn amb un aspecte molt modern, multi-plataforma, i a més a més està programat en
C++ i per això és un dels entorns que s’executa més ràpid. Tot i ser un entorn
L’entorn Dev-C++ accepta els compiladors de la col·lecció GNU que poden compilar diversos llenguatges de programació com Objective-C++, Java, Ada, o C++ entre d’altres.
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller 19
completament gratuït, no existeix cap versió en castellà i la interfície pot semblar molt
confusa.
Qualsevol dels tres entorns esmentats és ideal per crear el videojoc i per decidir en quin
quedar-se el millor és provar els tres i utilitzar el que sigui més còmode.
Finalment, per al videojoc que es crearà com aplicació pràctica d’aquest treball
s’utilitzarà inicialment l’entorn Dev-C++ encara que podria variar depenent de les
situacions que puguin aparèixer en el desenvolupament pràctic del videojoc.
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller 20
1.3. Requeriments per programar en C++
Arribats a aquest punt, s’ha d’instal·lar les eines necessàries per poder començar a
realitzar el nostre projecte i per tant per poder programar en C++.
1.3.1. Instal·lació de l’entorn Dev-C++
El primer de tot és instal·lar l’entorn triat per programar al Windows, en aquest cas el
Dev-C++. Per fer això es descarrega la versió 5.5.3 de l’entorn (des de la direcció web
http://orwelldevcpp.blogspot.com.es/2013/11/dev-c-553-released.html) ja que serà la
versió que s’utilitzarà per al videojoc d’exemple per aquest treball (última versió de
l’entorn disponible a http://orwelldevcpp.blogspot.com.es/). Es tria l’enllaç de
descarrega que posa setup i que porta incorporat el compilador MinGW32 versió 4.7.2.
Un cop descarregat l’instal·lador s’executa i es recomana realitzar la instal·lació en
mode complert (Full) però si es vol es pot instal·lar amb una altra configuració, però
com a mínim amb el mode Minimal (es necessari instal·lar el compilador).
És necessari tenir marcada la casella del compilador (marcada en vermell en la imatge) perquè si no s’hauria d’instal·lar-lo manualment per poder compilar el nostre projecte des de l’entorn.
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller 21
1.3.2. Explicació i instal·lació de la llibreria Allegro 5
Un cop instal·lat l’entorn a l’ordinador es necessitarà utilitzar una llibreria
especialitzada en la creació de videojocs mitjançant C++. Això és necessari ja que el
llenguatge C++ no inclou codis pel maneig senzill d’imatges i sons i d’esdeveniments,
per exemple, no es pot detectar si una tecla està premuda o no. Per aquest motiu és
necessària alguna llibreria que ens permeti manejar i mostrar imatges en pantalla,
detectar l’estat dels perifèrics, i dibuixar figures geomètriques en la pantalla entre
d’altres coses.
Existeixen diverses llibreries que realitzen algunes de les funcions esmentades, com
controlar l’estat del teclat, i d’altres per manejar imatges en la memòria (carregar
imatge, mostrar-la, escalar-la, etc.) però n’hi ha poques que tinguin totes les funcions
juntes. Entre d’elles hi ha les llibreries SDL i Allegro les quals s’utilitzen principalment
per crear videojocs en dues dimensions. Per començar el millor és utilitzar la llibreria
Allegro perquè és més fàcil de comprendre i utilitzar que la llibreria SDL, i a més a més
les dues tenen les mateixes funcions. Si el que es vol és crear un videojoc en tres
dimensions es poden utilitzar les llibreries DirectX, OpenGL o Unity 3D entre d’altres.
En el cas d’aquest treball com es vol fer
un videojoc senzill en dues dimensions
s’utilitzarà la llibreria Allegro, de codi
obert, de la qual s’utilitzarà la versió
5.0.10 que és la més estable. A més a
més aquesta llibreria és multi-
plataforma per la qual cosa pot ser
utilitzada en diversos sistemes operatius
i apart, els programes que la utilitzen
també es poden executar en varis
sistemes operatius.
A partir d’ara s’anomenarà la llibreria amb el nom d’Allegro 5 ja que té diferències
substancials amb les versions anteriors. Per instal·lar la llibreria Allegro 5 es descarrega
La llibreria Allegro 5 permet la creació de diversos gèneres de videojocs.
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller 22
l’arxiu comprimit des de http://cdn.allegro.cc/file/library/allegro/5.0.10/allegro-5.0.10-
mingw-4.7.0.zip que serà el adequat per l’entorn i el compilador o s’obté de la carpeta
“Allegro” del CD adjunt al treball. Es pot descarregar l’última versió d’Allegro a
https://www.allegro.cc/files/.
Un cop descarregat l’arxiu es
descomprimeix mitjançant un
programa de descompressió
d’arxius .zip com ara el WinRAR.
Es copien les tres carpetes (bin,
include i lib) de dins de la
carpeta creada al descomprimir
l’arxiu i s’enganxen dintre de la
carpeta del compilador
MinGW32 a C:\Archivos de
programa\Dev-Cpp\MinGW32 o on s’hagi instal·lat l’entorn i el compilador. Quan surti
un missatge per confirmar el reemplaçament de les carpetes s’escull Sí a tot.
Per acabar d’instal·lar la llibreria
Allegro 5 s’ha de definir una
opció per enllaçar la llibreria
amb el compilador. Per fer això
és s’executa l’entorn per primer
cop ja instal·lat i es va premen
Següent fins que s’obri el
programa i llavors es va a Eines
>> Opcions del compilador i de
la pestanya Compilador es
selecciona l’opció Afegeix això a
la línia d’ordres de l’enllaçador si no està seleccionada i just a sota ha de quedar escrit:
“-static-libstdc++ -static-libgcc -lallegro-5.0.10-monolith-md-debug” (sense cometes)
Aquesta serà l’opció que s’utilitzarà de moment però al final del projecte es realitzarà
una compilació estàtica la qual cosa s’explicarà més endavant.
Les carpetes bin, include i lib inclouen els arxius necessaris per treballar amb els codis d’Allegro 5 i s’han de copiar a dins de la carpeta del compilador MinGW32.
Per tal que el compilador relacioni el projecte amb la llibreria d’Allegro, s’ha d’enllaçar el compilador i la llibreria modificant la línia d’ordres de l’enllaçador. La llibreria monolith enllaça amb totes les llibreries d’Allegro 5 (àudio, imatges, text ...).
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller 23
1.3.3. Opcions a definir per programar un videojoc
Ja està casi tot per començar a programar però abans s’ha de definir unes opcions
perquè tot funcioni. Es crea un nou projecte (que serà el videojoc) anant a Fitxer >>
Nou >> Projecte... i a la pestanya Basic es tria Empty Project per començar amb un
projecte buit des de zero. S’assegura que està triat l’opció Projecte C++ i s’introdueix
el nom del projecte a la casella corresponent. Es prem D’acord i es guarda el projecte
dins d’una carpeta buida que s’ha de crear. Ara només s’ha d’anar a Projecte >>
Opcions del projecte i la pestanya Compilador. A la opció Nivell d’optimització (-Ox)
de la pestanya Genera
codi, es tria l’opció
Highest (fast) perquè
s’optimitzi el codi a l’hora
de compilar-lo, i a la opció
Sense finestra de consola
(-mwindows) de la
pestanya Enllaçador es tria
Yes perquè no es mostri la
finestra negre de consola.
Finalment es torna a la
pestanya General i a Tipus
es selecciona GUI Win32.
Es prem D’acord i es
guarda el projecte i ja es pot començar a programar en C++ amb Allegro 5.
El tipus d’aplicació que es vol crear per un videojoc és el GUI Win32 que permet treballar amb finestres (fins i tot en pantalla completa) enlloc del Símbol del sistema (línia d’ordres).
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller 24
1.4. Gèneres de videojocs
Arribats a aquest punt s’ha de decidir un primer aspecte sobre el videojoc que es vol
crear, el seu gènere.
Els gèneres de videojocs són una forma de classificació, que designen un conjunt de
videojocs que posseeixen una sèrie d’elements comuns. Al llarg de la història dels
videojocs aquells element que han compartit diversos videojocs han servit per
classificar com un gènere als que els han seguit en estil i forma, de la mateixa manera
que ha passat amb la música o el cinema.
Tot i que actualment la majoria de videojocs siguin una barreja de diferents gèneres de
videojocs, es poden classificar en tres grans grups:
• Els videojocs d’acció
• Els videojocs de simulació
• Els videojocs d’aventura
1.4.1. Videojocs d’acció
Un videojoc d'acció és un videojoc en què el jugador ha d'utilitzar la seva velocitat,
destresa i temps de reacció. El gènere d'acció és el més ampli i complet del món dels
videojocs, englobant molts subgèneres com els videojocs de lluita, de trets i els
videojocs beat 'em ups entre d’altres.
Molt sovint, els videojocs d'acció utilitzen la violència com la seva principal
característica d'interacció, més específicament el combat amb armes de foc o cos a cos.
Els videojocs de lluita, com indica el seu nom, recreen combats entre personatges
controlats tant per un jugador com per la computadora. El jugador veu als combatents
des d’una perspectiva lateral, com si es tractes d’un espectador.
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller 25
En els videojocs de trets en primera persona, coneguts també com FPS (First Person
Shooter), les accions bàsiques són moure al personatge i utilitzar una arma, una arma es
mostra a la pantalla en primer pla i el jugador pot interactuar amb aquesta. Aquesta
perspectiva té per objectiu donar la impressió de ser el personatge i així permetre una
forta identificació del jugador al videojoc. Els gràfics en tres dimensions augmenten
aquesta impressió.
Imatge del videojoc de trets en primera persona Call Of Duty: Black Ops 2.
D'altra banda, els videojocs de trets en tercera persona, coneguts també com TPS (Third
Person Shooter), es basen en l'alternança entre trets i baralla o interacció amb l'entorn,
però a diferència dels jocs de mira (primera persona), es juga amb un personatge vist
des del darrere i en ocasions, des d'una perspectiva isomètrica.
Els videojocs beat 'em up també anomenats "videojocs de lluita a progressió" són
videojocs similars als de lluita, amb la diferència que en aquest cas els jugadors han de
combatre amb un gran nombre d'individus mentre avancen al llarg de diversos nivells.
Un gènere similar a aquest és el shoot ‘em up que es basa en el continu ús d'una arma,
passant la major part del temps disparant.
En el gènere d’acció també es podrien incloure els videojocs originàriament de
màquines recreatives, el videojocs arcade. Aquests es caracteritzen per la simplicitat
d'acció ràpida de jugabilitat, això va obtenir la glòria en l'època de 1980. No requereix
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller 26
història, solament jocs llargs o repetitius. El principal objectiu d'aquest tipus de jocs en
general és aconseguir la major quantitat de punts.
Els videojocs de sigil són un gènere relativament recent. Aquests videojocs es basen en
el sigil i l'estratègia en lloc de buscar la confrontació directa amb l'enemic. Normalment
aquests videojocs apareixen com un subgènere dels videojocs de trets, encara que es pot
trobar videojocs com Commandos, que es pot classificar alhora com joc d'estratègia i
d'infiltració.
Imatge del videojoc d’acció Tom Clancy’s Splinter Cell: Chaos Theory. Aquest videojoc és la tercera entrega de la col·lecció Tom Clancy’s Splinter Cell, on el sigil és la base de tota la saga. Tot i això aquest videojoc també és considerat un joc de trets en tercera persona (TPS).
1.4.2. Videojocs de simulació
Un videojoc de simulació és un gènere de videojoc que conté una barreja d'habilitat,
atzar i estratègia per simular aspectes de la realitat, com poden ser les activitats
quotidianes de la vida real; viatjar, navegar, volar, dirigir, gestionar, etc.
Els videojocs de simulació musical giren entorn de la música, ja siguin de tipus
karaoke, de ball o en els que es toquen instruments musicals. La majoria d'aquests jocs
es caracteritzen per necessitar accessoris especials compatibles amb les consoles i per
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller 27
oferir l'opció multijugador, en què els jugadors intenten aconseguir el major nombre de
punts possible per mitjà de la seva actuació.
La simulació de construcció és un gènere molt popular en PC, on el joc li proporciona
al jugador totes les eines per construir un projecte, el qual ha de ser tan semblant a la
realitat com sigui possible, en el qual es consideren des despeses de construcció i
manteniment, fins a una línia de temps, física i clima que afecta totes les decisions que
prengui. La particularitat de poder experimentar, prendre decisions i afectar el
desenvolupament de la simulació, els fa tremendament addictius. Jocs des de simulació
de jardins, fins a
construccions de cases,
parcs i ciutats. Els més
populars sens dubte són Sim
City (on l'usuari pren el
paper d'alcalde i ha
d'administrar una ciutat),
Civilization (gestionar una
civilització completa, des
del neolític fins a
l'actualitat) o Age of Empires.
Els videojocs simuladors de vida s'enfoquen en controlar un personatge amb capacitats
i emocions humanes, i controlar tots els aspectes de la seva vida, des d'on viurà, que
estudiarà, fins amb qui es casarà. El realisme col·locat en aquests jocs i una línia de
temps que permet al personatge evolucionar, menjar, dormir, conviure amb altres
persones, envellir i fins i tot morir, fa que moltes persones juguin el que els agradaria
experimentar en la seva vida pròpia, però sense riscos.
També són considerats videojocs de simulació els videojocs d’esports i carreres, els
d’agilitat mental i els jocs educatius. Aquesta última opció (els jocs educatius) es dubte
de què sigui un gènere de videojoc, ja que el concepte no està molt desenvolupat.
Imatge del videojoc Age of Empires II: The Age of Kings basat en la simulació d’una civilització passant per diferents períodes històrics.
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller 28
1.4.3. Videojocs d’aventura
Els videojocs d'aventura són un gènere de videojocs caracteritzats per la investigació,
l’exploració, la solució de trencaclosques, la interacció amb personatges del videojoc, i
un enfocament en el relat en comptes de desafiaments basats en reflexos. És important
observar que aquest terme no depèn del tema que tracta el videojoc.
Els videojocs d’aventura van ser els
primers a sortir al mercat, però els d’aquell
moment no eren com els que es coneixen
avui en dia amb un munt de gràfics, sinó
que eren videojocs d’aventura de text o
conversacionals. En aquests videojocs el
jugador tecleja l’acció a realitzar i el
videojoc la interpreta i descriu textualment
la nova situació i de vegades acompanyat
amb una imatge.
Posteriorment va aparèixer els videojocs d’aventura gràfica els quals ja s’utilitzava el
ratolí i no era necessari la introducció d’ordres. A més a més, aquests ja incloïen gràfics
més avançats però no l’ús de les tecles de direcció.
Els videojocs de rol es caracteritzen per la interacció amb el personatge, una història
profunda i una evolució del personatge a mesura que la història avança. Per aconseguir
l'evolució generalment es fa que el jugador s'endinsi en una aventura on anirà coneixent
nous personatges, explorant el món per anar ajuntant armes, experiència, aliats i fins i
tot màgia.
Els RPG clàssics, inspirats en els jocs de tauler, realitzen les batalles per torns, és a dir,
el jugador usa el seu equip i habilitats apreses per a atacar mitjançant una sèrie d'ordres i
després ha de quedar estàtic i esperar a rebre l'atac de l'altre jugador o de la CPU (de la
pròpia màquina). El millor exemple d'això és Final Fantasy.
Mystery House per a l’ordinador Apple II va ser la primera aventura conversacional que va utilitzar gràfics en els començaments de l’era de la computació domèstica.
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller 29
Si bé en l'actualitat encara hi ha videojocs de rol clàssics, la majoria ara fan servir el
combat en temps real, és a dir, no hi ha pauses i els dos contrincants ataquen al mateix
temps.
En una altra subcategoria dels videojocs de rol s'han posat de moda els RPG en línia o
MMORPG (Massive Multiplayer Online RPG) on cada jugador crea un personatge i
mitjançant una connexió a
Internet, entra a un món on
milers de jugadors s'uneixen a
l’aventura, exploren,
intercanvien i evolucionen
junts. Ara per ara el joc més
conegut i jugat d'aquest
subgènere és World of
Warcraft, basat en el món
creat per Blizzard per als seus
jocs d'estratègia de la saga
Warcraft.
Per acabar, en els videojocs de plataformes el jugador controla a un personatge que ha
d'avançar per l'escenari evitant obstacles físics, ja sigui saltant, escalant o ajupint-se.
Aquest tipus de gènere pot estar dirigit, o cap a l'acció
(generalment quan l'usuari pot realitzar atacs contra
els enemics), o cap a l'aventura (quan l'usuari no pot
atacar, sinó que només es pot moure), per la qual cosa
no es fàcil classificar les plataformes com un joc
d'aventura o d'acció. Inicialment els personatges es
movien per nivells amb un desenvolupament
horitzontal, però amb l'arribada dels gràfics 3D aquest
desenvolupament s'ha ampliat cap a totes les
direccions possibles.
Imatge del videojoc World of Warcraft. Amb 7,7 milions de subscriptors, World of Warcraft és amb diferència el joc en línia per subscripció amb el major registre d'usuaris, tenint el Rècord Guiness per al MMORPG més popular.
Imatge del videojoc de plataformes de dues dimensions New Super Mario Bros. Un joc d’aventura que també inclou acció.
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller 30
1.4.4. Recomanació i decisió
Ara ja s’ha vist les diferents categories de videojocs d’ordinador i es pot escollir quina
triar pel videojoc que es vulgui crear. Per decidir quin tipus de videojoc es vol realitzar
s’ha de tenir en compte els coneixements dels creadors com el temps i ganes que se li
vol dedicar.
Si el que es vol es crear un videojoc amb un llenguatge de programació, que és el que
tracta aquest treball, fer qualsevol tipus de videojoc en tres dimensions requereix un
grau de coneixement en programació, matemàtiques, física i lògica extremadament gran
a part de què els videojocs 3D sempre es creen a partir de programes especialitzats com
Unity3D. D’aquesta manera es recomana descartar realitzar un videojoc de simulador i
es recomana realitzar un joc en dues dimensions que sigui d’acció i/o d’aventura.
Per qui no tinguin gaire coneixement i experiència en aquest camp de la informàtica es
podria realitzar un videojoc de tipus arcade com el Tetris o el Tres en Ratlla on no fa
falta gaires coneixements físics i matemàtics i tampoc requereixen un coneixement
professional del llenguatge de programació. Tot i així no s’ha d’oblidar que en
qualsevol videojoc és necessària la lògica per tal que funcioni, fins i tot els que es fan
utilitzant programes de creació de videojocs.
Qui tingui més coneixement i més ganes pot intentar crear un joc d’aventura gràfica
senzilla o fins i tot crear un videojoc de plataformes.
S’ha de triar el gènere de videojoc que es vol crear i fer-se la idea de com serà i quin
grau de dificultat requerirà. La decisió és a les mans de cadascú.
El videojoc que es farà de mostra per aquest treball serà un videojoc d’acció i aventura
en dues dimensions del tipus plataformes, que requerirà molt ús de les matemàtiques, la
física i la lògica i un grau alt de programació per saber combinar els aspectes anteriors.
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller 31
1.5. Advertències per crear un videojoc
Desenvolupar un videojoc mai ha estat una feina senzilla ni molt agradable. A més a
més és una ciència/art encara molt nova i com que la industria de la creació de videojocs
és encara molt recent, els programes i processos que s’utilitzen estan plens d’errors,
limitacions que no haurien d’existir i excepcions.
A l’hora de programar un videojoc més del 50% del temps invertit en el seu
desenvolupament tracta sobre solucionar problemes inesperats de programació o errors
en el motor del joc que s’utilitzi.
Per evitar al màxim els errors s’ha d’analitzar correctament el problema (crear el
videojoc) ja que si un problema està ben analitzat molt més fàcil de programar i molt
més ràpid de codificar i executar. Amb els jocs hi ha un problema afegit: el programa a
crear haurà d’executar tant les respostes a l’usuari com les sortides per pantalla molt
ràpidament (com a mínim a 24 actualitzacions per segon). Aquest fet és molt important
pel videojoc ja que d’això pot dependre que un joc sigui atractiu o no.
1.5.1. Les llicències dels recursos informàtics
Al crear un videojoc s’ha d’assegurar de respectar la llicència de les eines que
s’utilitzin. Una gran quantitat de software (com Unity) prohibeix l’ús comercial (vendre
un videojoc creat amb aquest programari) sense pagar una llicència cara. Aquí és on
realment pot ajudar el software de codi obert (com és el cas de la llibreria Allegro), ja
que permet l’ús comercial.
El mateix passa si s’utilitzen imatges o sons d’Internet. Sempre s’ha de tenir en compte
de respectar la llicència que tenen tots els arxius i codis que s’utilitzen pel programa i
que no són creats pel propi desenvolupador. A més a més, un joc pot estar inspirat en un
altre però sense copiar les idees del joc inspirador ni els noms dels personatges.
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller 32
1.5.2. Recomanacions a l’hora de programar
Quan es vol realitzar un programa (un videojoc és un programa) en qualsevol llenguatge
de programació hi ha certs errors que s’han d’evitar i recomanacions a seguir, sobretot
si es tracta d’un gran projecte com el videojoc que es farà com aplicació pràctica
d’aquest treball.
És important comentar les línies de codi (escrivint //el comentari o /*el comentari*/)
que s’escriuen per identificar-les ràpidament si després es repassa aquelles línies. Tot i
així és una pràctica molt freqüent els comentaris excessius per part d’alguns
programadors, cosa que pot generar confusió sobretot si es canvia una línia de codi i no
es canvia el comentari.
En programació, els números màgics són aquells que s’escriuen en un codi i que no se
sap que volen dir, és a dir, a què es refereix aquell número. Per evitar aquest problema
la solució no és introduir més comentaris sinó assignar els números a variables, i que
aquestes variables tinguin noms que ajudin a identificar que són; per exemple en lloc
d’escriure new Player(5) on es pot identificar que es crea el personatge del joc però no a
què es refereix el 5, és millor escriure primer max_vides = 5 i a continuació new
Player(max_vides). D’aquesta manera queda clar que el 5 es refereix al nombre màxim
de vides que pot tenir el jugador.
Una última recomanació abans de posar-se a programar en especial un videojoc és
evitar al màxim l’ús dels condicionals if (si) i else (si no). Per si mateix un videojoc
tindrà moltes sentències condicionals però un ús abusiu de les if pot generar molta
confusió de tal manera que es pugui arribar a tenir deu sentències if una dins de l’altre.
Per evitar això el millor és utilitzar bucles, com és el cas dels bucles while, do while, for
i switch. Per exemple, amb el switch es pot evitar un munt de comparacions de tipus if
... ... else if ... ... else if ... i així contínuament. Tot i això s’ha de tenir en compte de no
crear un bucle infinit del qual el programa no surti mai, ja que això pot provocar un
excés d’informació a la memòria. Per exemple: bool carregant = true; while(carregant)
{new Enemic();} carregant = false; El bucle while és infinit perquè carregant és
vertader. Això també provoca el col·lapse de la memòria ja que crea infinits enemics.
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller 33
2. PART ESPECÍFICA
En aquesta segona part del treball més específica es decidiran les especificacions del
joc, és a dir, es pensarà tot el joc abans de crear-lo. A continuació s’explicarà com
plantejar els algorismes que representin les idees plantejades pel videojoc ajudant-se
dels diagrames de flux i mostrant algunes línies de codi. Al llarg d’aquest apartat
s’aniran esmentant funcions de la llibreria Allegro 5 que realitzin els algorismes
desitjats. Per acabar es comentaran les diverses maneres de compilar i distribuir el
videojoc.
2.1. Especificacions del joc
Arribats aquí toca centrar-se en el nostre videojoc i definir com serà. Per fer això en
aquest apartat es veurà tres conceptes molt importants:
• La concepció de la idea del videojoc
• El disseny
• La planificació
El procés és similar a la creació de programari en general, encara que difereix en la gran
quantitat d'aportacions creatives (música, història, disseny de personatges, nivells, etc.)
necessàries.
2.1.1. La concepció
En aquest primer apartat només s’ha de plantejar les idees sobre el videojoc que es vol
crear, les decisions finals es prendran al següent apartat, el disseny del videojoc.
Com que per fer un bon videojoc no és possible posar-se directament a l’ordinador i
començar a programar de manera improvisada, abans s’ha de donar forma al videojoc
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller 34
escrivint els seus aspectes en un full. En aquesta etapa cal definir els aspectes
fonamentals que conformaran el videojoc, entre els quals es troben:
• Gènere: Dins de quin gènere o gèneres es desenvoluparà el joc.
• Gameplay: El que generarà diversió a l'hora de jugar.
• Storyboard: Algunes idees soltes sobre com ha de lluir el joc pel que fa a
personatges, ambientació, música, etc.
Del primer punt sobre els gèneres de videojocs ja s’ha parlat en l’apartat 1.4 i s’ha
decidit que es realitzarà un videojoc de plataformes. Com ja s’ha parlat en aquell
apartat, el videojoc també podria ser una mescla de diferents gèneres, que en aquest cas
s’hauria d’especificar les característiques que s’emprarien de cada gènere.
La jugabilitat (o bé en anglès Gameplay) és un terme emprat en el disseny i anàlisi de
jocs que descriu la qualitat del joc en termes de les seves regles de funcionament i del
seu disseny com a joc. Es refereix a totes les experiències d'un jugador durant la
interacció amb sistemes de jocs.
L’objectiu d’aquest segon aspecte és
decidir les característiques del joc
que el faran entretingut i atractiu de
manera que l’experiència del jugador
amb el videojoc tingui èxit i
produeixi ganes de jugar-hi més (no
es tracta d’aconseguir que el jugador
estigui tota l’estona jugant al
videojoc creat sinó que tingui una
bona opinió del joc i que el
recomani a més persones).
Per analitzar i caracteritzar l'experiència del jugador, la jugabilitat posseeix els següents
atributs que ajuden a analitzar-la:
Atributs de la jugabilitat
• Satisfacció: complaença del jugador davant el videojoc complet o en alguns
aspectes concrets d'aquest, com mecàniques, gràfics, sistema interactiu, història,
Satisfacció
Aprenentatge
Efectivitat
Immersió Motivació
Emoció
Socialització
Superfície d’acció de la jugabilitat d’un joc. Quan més gran sigui la superfície (de color blau) més bon joc serà. Aquesta superfície depèn de set atributs que es repassen a continuació.
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller 35
etc. La satisfacció és un atribut amb un alt grau de subjectivitat, no només per la
dificultat de mesurar, sinó perquè també influeixen bastant els gustos i
preferències del jugador. A més, aquest atribut es pot veure afectat, per exemple,
pel gènere o tipus de joc, l'aspecte estètic, la història o simplement l'atracció o
proximitat de la temàtica o estil del joc sobre el jugador. Per mesurar la
satisfacció necessitem partir d'un context de joc determinat: un jugador que juga
a un determinat joc amb uns dispositius específics, en unes determinades
condicions socials, en una plataforma de joc concreta, ...
• Aprenentatge: Facilitat per comprendre i dominar el sistema i la mecànica del
videojoc, és a dir: objectius, regles i formes d'interaccionar amb el videojoc.
L'aprenentatge mostra la capacitat del videojoc a presentar i transmetre el
sistema i la mecànica del joc al jugador i que aquest, fàcilment pugui arribar a
comprendre'ls, assimilar i dominar per poder interactuar de la manera més
correcta i precisa possible amb el videojoc. Es defineix la funció que representa
el coneixement del jugador sobre el joc al llarg del temps de joc com la "corba
d'aprenentatge".
• Efectivitat: Temps i recursos necessaris per oferir diversió al jugador mentre
aquest aconsegueix els objectius proposats en el videojoc i arriba a la meta final
d'aquest. L'efectivitat del joc mostra el grau d'utilització dels recursos per poder
embolicar al jugador en el joc i fer que es diverteixi, és a dir, que el joc pugui
complir els seus objectius: divertir i entretenir a tot jugador que ho juga. Un
videojoc efectiu és aquell que és capaç de captar l'atenció del jugador des del
primer instant, convencent-li que segueixi jugant al joc. Alhora, el joc amb alt
grau d'efectivitat ha entretenir, fins i tot portades moltes hores de joc.
• Immersió: Capacitat per creure’s el que es juga i integrar-se al món virtual
mostrat en el joc. La immersió és la característica del joc relacionada amb fer
que el jugador es vegi embolicat en el món virtual, tornant-se part d'aquest i
interactuant amb ell. En aquest moment el jugador es fa còmplice de la mentida
del món virtual, fent veritat i produint-se una inversió de creença, la qual
provoca que el jugador, encara que sàpiga que al que juga és fals, ho prengui
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller 36
com una cosa real i s'impliqui en això amb totes les seves habilitats per superar
el repte proposat, estant concentrat o embolicat en la tasca proposada pel
videojoc.
• Motivació: Característica del videojoc que mou a la persona a realitzar
determinades accions i persistir en elles per a la seva culminació. Per aconseguir
una bona motivació, el joc ha de disposar d'un conjunt de mecanismes que
generin una perseverança en l'acció per part del jugador per superar els reptes
del joc, és a dir, s'introdueixen factors que assegurin el manteniment d'un
comportament en l'apreciació del procés de joc.
• Emoció: Impuls involuntari originat com a resposta als estímuls del videojoc
que indueix sentiments i que desencadena conductes de reacció automàtica. Els
jocs generen diferents estímuls durant la dinàmica del joc per desencadenar
reaccions involuntàries automàtiques i diferents sentiments i emocions per part
del jugador per modificar la seva actitud i comportament quan juga: alegria,
pressió, frustració, por, intriga, curiositat, ... per construir un univers virtual
capaç de commoure, emocionar, fer somriure o plorar al jugador si cal.
• Socialització: Atributs i elements del joc que fomenten el factor social o
l'experiència en grup, la qual cosa provoca apreciar el videojoc de diferent
manera, gràcies a les relacions que s'entaulen amb altres jugadors o amb altres
personatges del joc i que complementen les accions a realitzar i els reptes a
resoldre en la dinàmica del videojoc. La socialització d'un joc permet a un
jugador tenir una experiència de joc totalment diferent quan juga un joc sol o en
companyia d'altres jugadors i fomenta noves relacions socials interactuant amb
ells, ja sigui de manera competitiva, col·laborativa o cooperativa. D'altra banda,
la socialització també és present en com es projecten les relacions socials que
tenim amb el grup en els personatges del videojoc, com pot ser el context en què
es realitza el joc, per obtenir informació, demanar ajuda, negociar en la
compra/petició d'objectes, la implicació d'altres personatges o si els beneficia
que el jugador compleixi els objectius del joc.
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller 37
Ara s’ha de plantejar les idees que faran que el videojoc de plataformes tingui una bona
jugabilitat, és a dir, compleixi el màxim possible els punts anteriors. A continuació
analitzem que s’ha de fer per complir els atributs de la jugabilitat i quines
característiques s’aplicaran al videojoc de mostra per tal de complir-los:
Aplicació dels atributs de la jugabilitat al videojoc
1. Per satisfer al jugador s’ha de pensar sobretot en el desenvolupament de la
història durant el joc, en especial per un joc de plataformes, ja que l’element clau
d’un bon videojoc de plataformes és la progressió en el joc amb diferents
escenaris i amb nous objectius i situacions que el jugador no preveia. Aquests
elements de progressió i situacions sobtades solen generar satisfacció del
jugador.
Pel que fa el videojoc que es farà com aplicació pràctica d’aquest treball es dividirà en
parts de manera que el jugador es vegi involucrat en diferents escenaris i amb situacions
més complicades segons vagi avançant en el joc. També s’inclourà algun element o
situació sorpresa com la presència sobtada de molts enemics alhora, un canvi d’escenari
sobtat i un element present en un únic nivell i complicat d’aconseguir que faci al
personatge immortal o li doni algun poder especial.
2. Per tal que el jugador se senti còmode amb el
joc cal que entengui que ha de fer i com ho
ha de fer per avançar en el joc. El videojoc
ha de transmetre al jugador les instruccions
per jugar, no només escrites, sinó també per
exemple que un element que danya al
personatge en el videojoc no sigui de color
verd sinó que sigui d’un color que el jugador
pugui intuir que no és alguna cosa bona. Tot
i que es poden incloure element sorpresa en
el videojoc, no significa que canviïn
l’objectiu principal del joc ni la manera de
jugar, de no ser així, el jugador estarà confús
ja que no entendrà la dinàmica del joc.
El temps d’aprenentatge d’un videojoc de plataformes és mínim ja que no fa falta tenir molts coneixements sobre un joc de plataformes ni llegir-se manuals per comprendre’l.
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller 38
El que es farà pel videojoc és que sigui el més normal possible, és a dir, que comparteixi
totes les característiques d’un joc de plataformes: moure’s, saltar, etc. D’aquesta manera
el videojoc serà molt fàcil de comprendre i no causarà confusió. Els videojocs de
plataformes es troben a una posició baixa de la "corba d'aprenentatge" de manera que el
joc és perfectament comprensible en poc temps.
3. Per tal que un joc sigui efectiu, ha de complir amb els objectius que els jugadors
esperen: divertir i entretenir. Un videojoc efectiu és aquell que és capaç de
captar l'atenció del jugador des del primer instant, convencent-li que segueixi
jugant al joc. Per a això, és recomanable que el joc tingui reptes que ajudin a
incentivar el jugador a seguir jugant i objectius secundaris que ajudin a que el
jugador es diverteixi. A més d'això, un joc és efectiu quan el grau de creença del
jugador davant els reptes i objectius proposats es realitza des del primer moment
i es van transformant fent més intensos quan el jugador aprofundeix en la
dinàmica del joc.
El que es farà en el videojoc de mostra és mantenir al jugador amb un objectiu i en
situacions difícils de tal manera que el jugador sempre estigui entretingut. Ara bé, és
necessari que el joc no sigui molt complicat perquè el jugador no es quedi encallat en un
nivell i deixi de el joc ja que no avança; un videojoc així no seria efectiu ja que no
diverteix i entreté al llarg de tot el joc.
4. La fi de tot joc és fer creure al jugador que no està davant d'un joc, sinó que en
forma part. Per aquest motiu, per millorar el procés d'immersió és recomanable
millorar el màxim possible la interacció entre el jugador i el videojoc, per
exemple, fent que els controls s'assimilin als estris que s'utilitzarien en la vida
real per resoldre aquests reptes. Un clar exemple el tenim en els simuladors de
conducció, on un volant ajuda a augmentar el realisme de l'acció molt més que
un teclat.
Per al videojoc de plataformes les tecles de direcció del teclat mouran al personatge i la
tecla d’espai realitzarà un atac. A més a més, la música és un element clau per immergir
al jugador en un videojoc i per tant es reproduiran diferents músiques segons la situació
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller 39
en el videojoc; per exemple si a un nivell apareixen fantasmes, la música tindrà un estil
de por per tal de fer creure al jugador que forma part del joc i que es troba realment en
aquella situació.
5. Per aconseguir una bona motivació, el joc ha de disposar d'un conjunt de
mecanismes que generin una perseverança en l'acció per part del jugador per
superar els reptes del joc, és a dir, s'introdueixen factors que assegurin el
manteniment d'un comportament en l'apreciació del procés de joc. A l'hora
d'aconseguir una major motivació del jugador cap al videojoc s'ha de focalitzar
el jugador en els reptes proposats, mostrar la rellevància dels objectius
(recompenses) a aconseguir pel repte proposat, i fomentar la confiança per part
del jugador per afrontar-los i el plaer per l'èxit de aconseguir-los.
El videojoc ha de disminuir els nivells de frustració perquè el jugador s'estimuli i
segueixi jugant. Encara que, igual que l'aprenentatge, en certs jocs, certs graus de
frustració s'usen com a mecanismes extres de motivació, obligant al jugador a superar-
se a si mateix i fer un esforç personal, automotivació, per no deixar-se "derrotar" pels
reptes proposats en el joc. Per fer això no s’introduiran situacions extremadament
difícils ni molt fàcils, simplement situacions complexes però que es puguin superar. La
progressió en el joc i les situacions complexes generen curiositat per saber que vindrà a
continuació i per això també és molt important que durant el joc s’introdueixin nous
elements per generar curiositat al jugador i així mantenir-lo motivat mentre juga.
6. Un joc que no és capaç d'emocionar és un joc fred i abocat al fracàs. Els jocs
generen diferents estímuls durant la dinàmica del joc per desencadenar reaccions
involuntàries automàtiques i diferents sentiments i emocions per part del jugador
per modificar la seva actitud i comportament quan juga. Un dels grans èxits dels
videojocs és que són capaços de provocar al jugador un conjunt d'emocions de
manera contínua en un curt espai de temps, algunes d'elles difícilment assolibles
en el món real, en el dia a dia, del jugador. Per tant l'objectiu és fer reaccionar el
jugador davant de diferents situacions i d'aquesta manera variar la seva conducta
durant el joc.
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller 40
El que es farà en el videojoc per emocionar al jugador és variar les seves emocions
durant el joc per tal de què en alguns moments tingui intriga i curiositat pel que passarà
i en d’altres estigui excitat o molt concentrat ja que es troba en una punt complicat o
únic en el joc. També es pot canviar l’estat d’ànim del jugador segons la música i els
gràfics del joc (escenari de nit per generar nervis i de dia per generar alegria).
7. La socialització d'un joc permet a un jugador tenir una experiència de joc
totalment diferent quan juga un joc sol o en companyia d'altres jugadors i
fomenta noves relacions socials interactuant amb ells, ja sigui de manera
competitiva, col·laborativa o cooperativa. Malauradament aquest atribut
relativament nou en els videojocs requereix més coneixements de programació i
molt de temps per fer aquesta opció possible en el joc que es vol crear, apart de
què és necessari un servidor en línia per tal de poder jugar entre diversos
ordinadors connectats a Internet. De totes maneres es podria realitzar un
videojoc multijugador on dues persones juguin des del mateix ordinador (una
persona controli el seu personatge amb les tecles de direcció i l’altre amb
lletres).
Degut sobretot als amplis coneixements de programació que s’han de tenir per fer un
videojoc en línia, el videojoc que es farà de mostra serà per únicament per a un sol
jugador i per tant no tindrà cap tipus de factor social.
A part dels atributs que té la jugabilitat, aquesta també té sis facetes diferents que són
les següents:
Facetes de la jugabilitat
• Jugabilitat intrínseca: És la jugabilitat mesurada en la pròpia naturalesa del joc
i com es projecta al jugador. Està lligada al disseny de la jugabilitat (els set
atributs anteriors) i a la "implementació" de la jugabilitat mecànica. S'analitzen
com es representen les regles, els objectius, el ritme i les mecàniques del
videojoc.
• Jugabilitat mecànica: És la jugabilitat associada a la qualitat del videojoc com
a sistema software. Està lligada a la mecànica del joc, posant l'accent en
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller 41
característiques com la fluïdesa de les escenes cinemàtiques, la correcta
il·luminació, el so, els moviments gràfics i el comportament dels personatges del
joc i de l'entorn, sense oblidar els sistemes de comunicació en videojocs
multijugador.
• Jugabilitat interactiva: És la faceta associada a tot el relacionat amb la
interacció amb l'usuari, el disseny de la interfície d'usuari, els mecanismes de
diàleg i els sistemes de control. Està fortament unida al interfície del joc.
• Jugabilitat artística: Associada a la qualitat i adequació artística i estètica de
tots els elements del videojoc i a la naturalesa d'aquest. Entre ells estaran la
qualitat gràfica i visual, els efectes sonors, la banda sonora i les melodies del joc,
la història i la forma de narració d'aquesta, així com l'ambientació realitzada de
tots aquests elements dins del videojoc.
• Jugabilitat intrapersonal: Jugabilitat personal o perceptiva. Aquesta visió té
com a objectiu la percepció que té el mateix usuari del videojoc i els sentiments
que a aquest li produeix. Aquesta faceta té un alt valor subjectiu.
• Jugabilitat interpersonal: Jugabilitat en grup. Mostra les sensacions o
percepcions dels usuaris que apareixen quan es juga en companyia ja sigui
col·laborativa, cooperativa o competitivament i la consciència de grup.
Relació a nivell interactiu entre les diferents facetes de la jugabilitat (en castellà).
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller 42
El que s’ha de fer per crear un bon videojoc és desenvolupar el màxim les sis facetes de
la jugabilitat i els set atributs esmentats anteriorment. D’aquesta manera es podrà dir
que aquest videojoc té una alta jugabilitat.
Arribats a aquest punt toca especificar més sobre el videojoc que es vol crear fent un
esborrany de les idees específiques del joc. En aquest esborrany gràfic o storyboard s’ha
de decidir pel que fa als personatges, l’ambientació o la música entre d’altres aspectes
per definir del joc.
El storyboard d’un videojoc
Primer de tot s’ha de visualitzar com serà el personatge principal, ja que en un joc de
plataformes sempre hi ha un personatge principal. Per fer això s’ha de pensar com anirà
vestit i quins instruments portarà a sobre.
El personatge principal
El personatge del videojoc de mostra representarà un humà primitiu i per tant tindrà una
estatura humana i vestirà amb poca roba. A més a més se li afegirà un complement per
donar cops. Es realitza llavors un esborrany en blanc i negre on es visualitzi la silueta
del personatge en dues o tres posicions diferents com es mostra a continuació:
Siluetes cap a la dreta del personatge principal
Personatge quiet Personatge corrent Personatge donant cop
Com a personatge d’un videojoc de plataformes aquest tindrà les característiques de
poder córrer/caminar (moure’s horitzontalment), saltar, ajupir-se i a més a més podrà
atacar amb una maça. Com la majoria d’aquest tipus de videojoc, aquest personatge
també atacarà al saltar sobre d’un enemic.
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller 43
Ara que ja s’ha començat a especificar el personatge principal se li podria assignar un
nom. Per pensar en el nom d’un personatge d’un videojoc que no simula un espai real es
bo pensar en noms originals o que tinguin alguna relació amb el personatge. Pel
personatge principal del videojoc de mostra se li assignarà el nom d’Inti, que en la
mitologia inca era el déu Sol.
No s’ha d’oblidar que en el procés del disseny del joc (següent apartat) el personatge a
millorar (pintant-lo en color) ha de seguir les característiques plantejades en la
concepció del joc, i per tant el personatge d’aquest videojoc haurà de vestir amb poca
roba de manera que sembli un personatge prehistòric.
Els altres personatges a pensar en un joc de plataformes
són principalment els enemics. Fem el mateix que amb el
personatge principal tenint en compte que els enemics
també han de seguir un estil prehistòric però més
simplificat ja que les accions dels enemics es definiran
quan es parli de la intel·ligència artificial.
Els enemics
També es poden incloure alguns enemics secundaris que volin realitzant un moviment
senzill i periòdic tota l’estona.
Ara que ja s’ha vist els personatges del joc toca centrar-se en l’ambient. Si els
personatges del videojoc que es farà de mostra segueixen un estil prehistòric, els
escenaris del joc han de simular un espai prehistòric. Aquest escenari és bastant senzill,
simplement ha de ser un espai natural amb plantes i animals. La música que acompanya
cada nivell ha de seguir un estil de naturalesa incloent sons d’animals. La música també
variarà segons la situació on es troba el jugador, per exemple depenent de si el
personatge està sent atacat dins d’una cova o si camina en un escenari de nit.
Escenari i ambientació del videojoc
Silueta cap a l’esquerra
de l’enemic quiet
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller 44
Hi ha un altre aspecte que ja es pot decidir que és el títol del videojoc. Aquest pot tenir
una relació amb el personatge del joc o amb algun altre factor però l’important és que
sigui un nom que atregui l’atenció per tal de què la gent vulgui jugar al videojoc per
veure a què es refereix el títol.
Títol del videojoc
Per el videojoc se li assignarà el nom de Tiverton, que també serà el nom de l’escenari
on se situa el joc. Aquest títol coincideix amb el nom d’un poble nord-americà però el
motiu de què s’assigni al videojoc és que recorda a un nom que fa pensar en algun lloc
màgic o especial, en unes terres misterioses, en les “terres de Tiverton”.
Arribats a aquest punt ja es té una idea de com serà el videojoc que es vol crear havent
decidit factors sobre l’ambient del joc, els personatges i la música.
Elements complementaris
Apart d’aquestes idees es pot
plantejar com serà el menú del joc
que es vol crear, que el correcte és
que seguís un estil similar al del joc
en sí.
També es pot realitzar un logotip d’identificació del creador.
Menú del joc Tiverton.
Logotip que es mostra a l’iniciar el videojoc Tiverton.
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller 45
2.1.2. El disseny
En aquesta fase es detallen tots els elements que compondran el joc, donant una idea
clara a tots els membres del grup desenvolupador sobre com són. Entre aquets elements
tenim:
• La història
• El guió
• L’art conceptual
• El so
• La mecànica de joc
• El disseny de programació
S’ha de tenir en compte que casi tots els videojocs són creats per un equip professional
de persones on cadascú està assignat a fer una funció: dibuixar, programar, composar la
música, decidir el guió del joc ...
El primer de tot en aquesta fase és desenvolupar la història del videojoc. S’ha de pensar
en una història realista i que atregui al jugador. Per un videojoc de plataformes no fa
falta pensar una història molt complexa ja que si és massa rebuscada perd l’atenció del
jugador.
La història
Pel que fa el videojoc Tiverton la història serà que el personatge Inti s’ha separat de la
seva família i s’ha perdut. Apart de les perilloses bèsties que romanen des de fa segles
aquestes terres, hi habiten uns sers en expansió incomprensius amb tot humà que se’ls
creua i ataquen desmesuradament. L’heroi haurà de creuar les tenebroses terres de
Tiverton superant tots els obstacles i enemics per retrobar-se amb el seu grup on estarà
segur. En conclusió, l’objectiu del videojoc serà retrobar-se amb la seva família i amb el
seu grup de companys havent de creuar Tiverton, i el desenvolupament que hi haurà
entre des de què es comença el joc fins assolir l’objectiu plantejat és el joc en sí, és a
dir, el que l’usuari del videojoc jugarà.
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller 46
En concepte, el guió d'un videojoc és molt similar als realitzats per a llibres i pel·lícules
(guió cinematogràfic). Amb l'excepció que un guió per a videojocs pot estar condicionat
per les accions del jugador derivant en múltiples arbres de situacions basades en
aquestes accions, complicant exponencialment el seu desenvolupament.
El guió
Per començar a crear el guió d’un videojoc és recomanable pensar una petita
introducció que justifiqui l’objectiu final del joc, per exemple que el dolent del joc hagi
segrestat a la princesa i l’heroi (personatge que controla el jugador) l’ha de rescatar. En
el cas del videojoc Tiverton començarà amb un clip on es mostri com el personatge
principal Inti es perd i ha de creuar unes perilloses terres per tornar amb la seva família.
A continuació es defineix el que passarà cronològicament durant el joc. Pel videojoc de
mostra es dividirà en tres parts amb ambients diferents (dia, nit i interior d’una cova) en
què cada part correspondrà a tres nivells diferents. La dificultat del joc anirà augmentant
progressivament introduint-hi més enemics i de més perillosos. Al final de cada part
(nivells 3, 6 i 9) el jugador haurà de lluitar amb un enemic superior molt més difícil
d’eliminar.
Al començar el joc des del inici o bé des d’una
part utilitzant un codi el jugador tindrà cinc
vides i en la primera part podrà ser atacat tres
cops abans de perdre una vida, quatre cops en
la segona part i cinc en l’última.
El jugador avançarà pels diferents escenaris i
al completar l’últim es mostrarà que l’Inti ha
trobat al seu grup i família.
Aquest guió seria un exemple d’un guió senzill d’un videojoc on la història i el guió no
són tan importants, ja que hi ha bastants videojocs de plataformes que no tenen cap
història ni guió, simplement són un conjunt de nivells per on el jugador avança amb el
personatge.
A diferencia del guió de cine, el guió d’un videojoc professional té en compte les decisions del jugador creant diferents situacions i sobretot diferents finals possibles del joc.
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller 47
En l'art conceptual s'estableix l'aspecte general del joc. En aquesta etapa un grup
d'artistes s'encarreguen de visualitzar o conceptualitzar personatges, escenaris, criatures,
objectes, etc. Aquests artistes es basen en les idees originals dels creadors i després
lliuren un seguit de propostes impreses o digitals de com lluirà el joc. Posteriorment el
director d'art s'encarregarà d'escollir entre les opcions que s'assemblin més a la idea
original. Algunes vegades els artistes conceptuals són presents durant tot el procés de
producció, però el normal és que només participin en les primeres etapes del procés.
L’art conceptual
Durant el procés de disseny d'un videojoc també cal fer una detallada descripció de tots
els elements sonors que el joc necessita per la seva realització. Veus, sons ambientals,
efectes sonors i música. Aquests elements sonors han de concordar amb els gràfics i la
situació del jugador en el videojoc, per exemple si el personatge és ferit el so que ha de
sonar ha de ser curt i greu ja que el jugador l’associarà amb una cosa negativa. D’altra
banda la música també ha de concordar amb l’escenari del nivell que s’està jugant, és a
dir, en el cas del videojoc de mostra quan sigui de dia sonarà una música més viva que
quan sigui de nit. En els videojocs professionals fins i tot canvia la música en un mateix
nivell segons la situació del personatge (estrés, recerca d’un objecte, atacant o sent
atacat, etc.).
El so
En els videojocs més avançats també es graven les veus dels personatges pel que és
necessari un equip de persones que gravin les veus, cosa que per el videojoc de mostra
no es farà. Finalment els sons ambientals com pot ser els d’un ocell o els d’un enemic
han de concordar amb el que s’està mostrant en la pantalla en aquell precís moment.
Saber escollir la música i els sons adequats per un videojoc és molt important pel seu
èxit ja que aquests sons són els elements principals per immergir el jugador en el joc.
Tot seguit s’especifica la mecànica del joc, és a dir, el funcionament general del joc. La
mecànica d’un joc depèn del gènere i defineix la forma en què els diferents ens virtuals
interactuen dins del joc. Dit d’una altra manera toca definir les regles del joc.
La mecànica de joc
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller 48
Per un videojoc de plataformes com el de mostra les regles són bastant clares: el jugador
ha de fer avançar el personatge per unes plataformes en menys d’un temps donat, si toca
amb un enemic és danyat i si cau per un forat mor directament. Doncs aquestes són les
regles més bàsiques del videojoc Tiverton on l’Inti pot moure’s per tot l’escenari fins
trobar la sortida i ha d’esquivar o eliminar saltant a sobre o atacant als enemics. Al
personatge principal del joc se li aplicarà les regles físiques de la gravetat perquè quan
salti torni a caure. L’última regle que tindrà aquest joc és que el jugador podrà
aconseguir monedes que per cada cent se li afegirà una vida. També podrà aconseguir
directament vides, cors i més temps per passar-se el nivell.
Per acabar el disseny del videojoc només ens queda especificar la manera en què serà
implementat en una màquina real mitjançant un cert llenguatge de programació i seguint
una determinada metodologia. Generalment en aquesta fase es generen diagrames que
descriuen el funcionament estàtic i dinàmic, la interacció amb els usuaris i els diferents
estats que travessarà el videojoc com a software.
El disseny de programació
La manera d’implementar el videojoc de mostra serà utilitzant el llenguatge C++ i
seguint el mètode tradicional de:
1. Inicialització
2. Bucle del joc
3. Finalització
Aquest és el mètode d’implementació que utilitzen tots els videojocs, ja si les variables,
els arxius multimèdia, etc. s’inicialitzessin mentre s’està jugant el joc es visualitzaria a
cops. A més a més hi ha llibreries i funcions que s’han d’inicialitzar abans d’utilitzar-
les. La finalització també és important ja que si no es realitza alguns sectors de la
memòria de l’ordinador utilitzats pel joc no s’alliberen i queden ocupades inútilment i
això pot causar errors. El bucle del joc és una sèrie d’instruccions que es repeteixen fins
que el jugador decideix sortir del joc i així trencar el bucle. En aquest bucle s’espera a
que es premi o es deixi anar una tecla (en el videojoc de mostra només s’utilitza el
teclat) i quan això passa es guarda en una variable l’estat actual d’aquesta tecla. Ara bé
també es crea un temporitzador que cada un cert temps actualitza l’estat del videojoc i a
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller 49
continuació si ha passat menys del temps establert entre cada actualització s’actualitzen
els gràfics del joc i es mostren en pantalla. D’això ja es parlarà més profundament en la
producció del projecte.
De tota la fase de disseny d’un videojoc professional és necessari generar un document
titulat “Document de Disseny del Joc”, que conté totes les especificacions d’art,
mecàniques i programació. Es pot trobar un índex detallat (en anglès) d’aquest
document als arxius
Document de Disseny de Joc
BaldwinGameDesignDocumentTemplate(.doc/.pdf) dins de la
carpeta “Documents” del CD (o a http://goo.gl/mMGJN7) escrit pel famós creador de
videojocs Mark Baldwin.
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller 50
2.1.3. La planificació
En aquesta fase s'identifiquen les tasques necessàries per a la creació del videojoc i es
reparteixen entre els diferents components de l'equip desenvolupador. També es fixen
terminis per a l'execució d'aquestes tasques i reunions clau.
S’ha de tenir en compte que la majoria
de videojocs els creen un equip de
professionals que es divideixen en
departaments. Si es vol crear un
videojoc de forma individual com és el
cas del videojoc de mostra el creador ha
d’assolir la funció de tots els
departaments que representen l’equip
desenvolupador.
La forma clàssica de plantejar el funcionament d’un videojoc és així:
Planificació lineal per crear un videojoc (QA significa assegurament de la qualitat).
Aquesta manera de treballar seria la "idealitzada": Cada departament fa la seva feina i
un cop està acabat el passa al següent departament. Potser es podia realitzar d'aquesta
forma fa molts anys, no obstant això a dia d'avui aquesta forma de treballar ja no
funciona a la indústria del videojoc.
Exemple d’estructuració d’un equip de producció d’un joc.
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller 51
Un videojoc és una cosa molt viva. No tot es fa bé a la primera; Creix, canvia, es
transforma, s'ajusta, es llença a les escombraries, es recull, es munta i desmunta. Per
aquest motiu es necessita un esquema de treball molt més flexible, on es pugui esborrar
sense por, on es puguin canviar coses sense por, on es pugui crear sense por.
Aquest altre esquema s'ajusta molt més a la forma de treballar per crear un bon
videojoc:
Planificació en cercles on treballen alhora diversos departaments.
Com es pot veure es treballa en cercles. El treball per tant torna una i altra vegada fins
que es poleix prou, sense por al canvi, buscant un producte de qualitat. El procés ha de
ser tan flexible que permeti créixer al joc fins i tot quan ja estigui absolutament tancat,
es deixen "portes" obertes per ajustar paràmetres del joc (per exemple costos dels
objectes, experiència necessària per pujar de nivell, etc.).
En el cas de què una sola persona no professional vulgui fer un videojoc haurà de
combinar totes les tasques a fer (haurà de fer alhora l’art i el desenvolupament del joc).
Aquesta última planificació es fonamenta en el procés tecnològic de creació i realització
d’un projecte, en què es comença amb les especificacions del projecte, després es fa el
seu disseny, a continuació s’executa o es construeix el desenvolupament del projecte
seguint el seu disseny i en el quart punt es realitzen les proves necessàries deixant
oberta la possibilitat de tornar a realitzar noves especificacions i així repetir el cicle.
Aquesta segona part (específica) del treball explica aquest procés aplicat a un videojoc.
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller 52
2.2. Desenvolupament del projecte
Tenint tot el videojoc ben definit i havent fet la planificació de les tasques corresponents
s’ha de dur a terme la realització del projecte seguint així el procés tecnològic i
l’esquema mostrat a la planificació (pàgina anterior). Aquesta part de desenvolupament
es dividirà en tres parts generals que són:
• La producció
• Les proves
• El manteniment
En aquesta part per tant s’explicarà des de com fer realitat tot el projecte plantejat fins el
manteniment del joc un cop ja s’ha distribuït.
2.2.1. La producció
Aquí es duen a terme totes les tasques especificades en la fase de planificació, tenint
com a guia fonamental el document de disseny. Això inclou entre altres coses la
codificació del programa, la creació de sprites, tiles i models 3d, la gravació de sons,
veus i música, la creació d'eines per accelerar el procés de desenvolupament, entre
d'altres.
Per realitzar la producció d’un videojoc el treball a realitzar es divideix en cinc
departaments diferents que s’encarreguen de:
• La programació
• La il·lustració
• La interfície
• L’animació i el modelat 3D
• El so
A continuació s’analitzarà cadascuna de les cinc tasques proposades.
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller 53
La majoria dels jocs es programen utilitzant el llenguatge C++ ja que és un llenguatge
d'alt nivell que permet un ràpid accés als components de hardware d'un ordinador o
d'una videoconsola que el fa més accessible.
La programació
La programació de videojocs és un procés que pertany a la creació d'un videojoc.
Aquest procés és efectuat per un programador de videojoc gràcies a la programació
informàtica. Gairebé sempre, la programació d'un videojoc es resumeix a repetir de tant
en tant les accions següents:
Procés de funcionament propi de tots els videojocs
1. Processar les interaccions d'un agent amb el seu entorn segons les entrades de
l'usuari.
2. Processar els fenòmens indirectament controlats per l'usuari.
3. Crear una imatge a partir d'aquestes informacions i mostrar a la pantalla (igual
per al so).
L'agent sol ser un personatge però també pot ser un cotxe, una nau, o qualsevol altra
cosa. L'entorn sol ser compost per una decoració estàtica i uns objectes interactius
(enemics, objectes de l'inventari, portes, entre d'altres). L'usuari realitza entrades al
programa per mitjà d'un perifèric com un joystick, un teclat o un ratolí. La gestió de les
interaccions consisteix a preveure les accions possibles sobre l'entorn, detectar si han
estat provocades, i processar respostes. Per exemple, per crear una interacció de com
"obrir la porta", cal decidir els processos que permetran el compliment (per exemple que
el jugador hagi de prémer un botó i hagi d'estar a prop de la porta), després, durant el
joc, cal detectar si les condicions estan complertes. Si això és així, es genera una
reacció: seguint l’exemple, mostrar a la pantalla la porta obrint-se.
Els fenòmens indirectament controlats per l'usuari són diversos i canvien segons el joc.
Es pot tractar de processar la intel·ligència artificial dels agents no controlats per
l'usuari, gestionar les col·lisions entre agents, i la física (en un joc físicament realista).
Aquestes dues primeres parts pertanyen a les regles d'interaccions d'un joc normalment
decidit per un dissenyador de videojoc i implementat per un programador.
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller 54
A mesura que el nivell gràfic creix, la creació d'una imatge i la seva projecció es fan
cada vegada més complexos. En el passat els escenaris dels videojocs eren gairebé
exclusivament en dues dimensions, ara ja són en la majoria dels casos en tres
dimensions. En tots els casos, la imatge és construïda a poc a poc en un espai de
memòria (el framebuffer) i no es pinta a la pantalla fins que el dibuix en conjunt s’hagi
acabat de crear.
La creació de la imatge que es mostra
La creació d'una imatge en dues dimensions sol començar pel dibuix dels objectes que
es troben més lluny, i va apropant-se cap al jugador. Per exemple:
1. Creació del fons (background) ajudant-se d' uns mosaics (tiles) dependents dels
sistemes de desplaçament (scrolling) o simplement d'un fons de pantalla (com
per als antics jocs d'aventura).
2. Afegiment d'imatges (sprites) utilitzant un sistema de retallada que permet
dibuixar formes complexes mentre que és imprescindible que les imatges siguin
rectangulars en la memòria.
La creació d'una imatge en tres dimensions és molt més complexa. En els videojocs les
imatges han de ser creades en temps real per garantir que la pantalla sigui actualitzada
amb una freqüència alta. La dificultat és de ser capaç de generar una imatge d'alta
qualitat en una estona molt curta mentre es processen els diversos elements del joc. Per
això, avui la programació de videojocs està més vinculada amb el maquinari, utilitzant
en profunditat les funcionalitats d'acceleració de les targetes gràfiques per optimitzar el
tractament dels objectes 3D i millorant el codi font.
La freqüència de repetició d'una operació canvia molt respecte a la plataforma
(ordinador, consola, mòbil, ... ). Es considera que cal almenys 24 imatges per segon per
donar la impressió de moviment en el cinema encara que aquest freqüència ha de ser
més elevada en els videojocs.
Totes les imatges d’un videojoc no necessiten ser tractades en cada actualització, només
les que es mostren en pantalla.
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller 55
Els grans estudis tenen diverses desenes de programadors, especialitzats en diferents
àrees. En la programació de videojoc els principals equips i/o disciplines que es poden
trobar són els següents:
Disciplines de programació de videojocs
• Programació del motor: Són els encarregats d'implementar la base sobre la
qual se sustenta el videojoc. Comunicació amb el sistema operatiu, gestió de
memòria, gestió de cadenes, gestió de recursos, etc. Són necessaris grans
coneixement de la plataforma per la qual es programa, algorísmia i complexitat,
optimització i gestió a baix nivell.
• Programació gràfica: La seva missió és gestionar les diferents API gràfiques
com DirectX i OpenGL. Coneixements d'aquestes API, i matemàtiques sobretot
àlgebra i geometria.
• Programació de física: S'encarrega d'emular els comportaments físics del
videojoc. Coneixements de matemàtica vectorial i física dinàmica i mecànica.
• Programació d'intel·ligència artificial (IA): És l'encarregada de fer els
enemics (o els aliats) intel·ligents. Coneixements de llenguatges de script,
matemàtiques i algoritmes d'IA com pathfinding, màquines d'estats finits o
xarxes neuronals.
• Programació de xarxa: S'encarrega de la part multijugador, servidors i tot el
que sigui connectar una màquina amb una altra.
• Programació de Gameplay: L'equip que s'encarrega de programar la lògica del
joc, les seves regles. Coneixements de llenguatges de script i ús de les parts
desenvolupades pels altres equips.
Aquestes són les principals àrees en què es divideixen els grans estudis podent variar en
molts d'ells, però aquestes són les principals disciplines de la programació de videojocs.
La base d’un videojoc es basa en un bucle, el game loop (com s’ha especificat en el
disseny de programació).
El game loop d’un videojoc
L’estructura d’un game loop senzill seria la següent:
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller 56
Aquesta és una estructura on mentre l’usuari no decideixi sortir del joc, es realitzaran sis
accions diferents de forma lineal. Aquest diagrama de flux deixa de funcionar per la
majoria de jocs ja que no controla les actualitzacions per segon (FPS) i depenent dels
gràfics que hagi de dibuixar el bucle es realitzarà amb menys o més temps el qual pot
provocar errors en la lògica del joc ja que no es controla el temps de realització dels
passos.
Per solucionar aquest problema, s’utilitza un altre tipus de game loop més complex que
és el següent:
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller 57
En aquest nou diagrama s’afegeixen noves accions a la inicialització (rectangle de color
blau): la creació d’una cua d’esdeveniments, la creació d’un esdeveniment de tipus
temporitzador que s’executarà cada 1/FPS segons, l’enllaç d’aquest amb la cua
d’esdeveniments i l’enllaç de les accions que l’usuari genera amb el teclat amb la cua.
Tot això és gràcies a la llibreria Allegro 5 que permet manejar esdeveniments. Dins del
game loop s’espera a què hi hagi un esdeveniment a la cua i es comprova si aquest
esdeveniment a sigut generat pel temporitzador o pel teclat. Si és generat pel teclat
actualitza les variables del joc que continguin l’estat de les tecles necessàries (si estan
premudes o no). En canvi si l’esdeveniment ha estat generat pel temporitzador
s’actualitza tota la lògica del joc i s’assigna el valor “vertader” a la variable anomenada
“redibuixa” (creada just abans d’entrar en el game loop i amb valor “vertader”). A
continuació si la variable redibuixa està en “vertader” i la cua d’esdeveniments està
buida (és molt important comprovar que la cua està buida per evitar que se li acumulin
esdeveniments i el videojoc es refresqui a cops), s’assigna el valor “fals” a la variable
“redibuixa” i es pinten els gràfics al framebuffer i es mostren en pantalla. Finalment es
torna a començar el bucle si el jugador no surt del videojoc.
Com s’ha pogut comprovar aquest segon game loop és molt més complex que el
primer, però és molt més eficient.
Un cop implementada l’estructura anterior en el videojoc, faltarà concretar dues
funcions principals:
Funcions a programar
1. Actualitzar totes les variables (posició, velocitat, estat de cada entitat...) de la
lògica del joc a partir del temps que ha passat entre la última actualització i
aquesta i a partir del valor de les variables que contenen l’estat de les tecles que
interessen -pel videojoc Tiverton les quatre tecles de direcció i l’espai (el valor
de la tecla Escape no es guarda)-.
2. Actualitzar tots els gràfics en el framebuffer.
Cada una d’aquestes funcions dependran del videojoc que s’estigui realitzant.
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller 58
En el cas del videojoc de mostra, l’actualització de la lògica seguirà els passos següents:
Actualització de les variables indirectes
1. Moure el personatge que controla l’usuari segons les tecles de direcció i la
gravetat o atacar si la tecla d’espai està premuda.
2. Moure els valors de la situació de la pantalla virtual.
3. Moure els enemic i el objectes voladors.
4. Resoldre les col·lisions entre elements i entre el personatge i els enemics.
Pel primer pas l’Inti es mourà (o no) horitzontalment cap a la dreta o l’esquerra
depenent de quines tecles estan premudes. Saltarà si està premuda la tecla de dalt o
s’abaixarà si la tecla de baix està premuda. A continuació se li aplicarà les fórmules
següents per simular la gravetat on vy és el component vertical de la velocitat, t el temps
que ha passat i y la posició horitzontal del personatge:
El moviment del personatge
vy = vy + 9,8 · t
y = y + vy · t
En el videojoc la gravetat es positiva perquè el sistema de
coordenades és com el que es mostra a l’esquerra.
Perquè una imatge baixi se li ha d’augmentar el valor de la y.
El pas segon que bé a continuació per el videojoc Tiverton és actualitzar la posició de la
pantalla virtual, ja que el joc farà scrolling movent-se així pel món virtual:
El scrolling en els videojocs de plataformes
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller 59
D’aquesta manera el que es fa és moure la pantalla virtual de manera que el personatge
que controla el jugador sempre es mostri en pantalla:
Si A és més petit que un valor determinat la pantalla virtual es mourà cap a l’esquerra i
en el cas de B es mourà cap a la dreta. El scrolling només se sol fer en horitzontal.
A continuació s’ha de moure els enemics els quals se’ls hi ha assignat un moviment
matemàtic (si són voladors) o horitzontal en el cas dels enemics que es mouen per terra.
Per aquest procés simplement s’ha de moure els elements comunicant-los el temps que
ha passat i així fer x = x0 + k · t pels terrestres i (x, y) = f(tsuma_ts_anteriors + t) pels
voladors que segueixen una funció matemàtica (paramètrica o polar) en el pla.
El moviment dels enemics
Finalment només falta resoldre les col·lisions principalment entre el personatge
controlat pel jugador i la resta d’elements per parar a l’Inti quan xoqui amb el terra i per
realitzar una acció determinada al topar amb un enemic o un objecte (una moneda ...).
Per comprovar una col·lisió entre dues entitats hi ha dues maneres generals depenent del
tipus de col·lisió que es vol comprovar:
Detecció de col·lisions
1. Comprovar si dos rectangles (representen dues entitats en el videojoc) es
superposen en el pla.
2. Comprovar si un punt en el pla està dins d’una circumferència.
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller 60
Pel primer cas s’utilitza un
algoritme complex (es pot trobar
“bool Maths::detectCollision(int cxi, int
cyi, int cxf, int cyf, int dxi, int dyi, int dxf,
int dyf)” a l’annex C) que diu si dos
rectangles d’unes dimensions
concretes i en unes posicions en el
pla donades es superposen o no.
Pel segon cas simplement es comprova la distància entre
el punt analitzat i el centre de la circumferència i si
aquesta distància és superior al radi de la circumferència
el punt no està dins d’aquesta, i en cas contrari sí. Per
trobar la distància entre dos punts A i B en el pla
simplement s’aplica la fórmula:
dist(A, B) = (Ax – Bx)2 + (Ay – By)2
Arribats a aquest punt depenent de les col·lisions detectades es realitzaran unes accions
determinades, per exemple si hi ha una col·lisió entre l’Inti i un enemic se li restarà un
punt d’armadura o si la col·lisió és amb una moneda se li sumarà al número de monedes
recollides i desapareixerà (la moneda) de l’escenari.
Dins d’aquest mateix bloc d’actualització de lògica es reprodueixen els sons pertanyents
segons la situació del joc (el jugador agafa una moneda, el temps per realitzar el nivell
s’està a punt d’acabar, etc.).
Ja només falta programar una acció, la d’actualitzar el framebuffer, és a dir construir la
imatge que es mostrarà en pantalla. Al realitzar un joc en tres dimensions no és gens
difícil ja que per realitzar una imatge plana d’un món en tres dimensions es necessiten
codis molt complexos. El videojoc Tiverton té una dificultat afegida a l’hora de mostrar
els gràfics en pantalla, constar d’una pantalla virtual que només mostra una part de
l’escenari.
Actualització i visualització dels gràfics
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller 61
Per realitzar aquest procés s’executa el codi del següent diagrama:
Amb aquest mètode es comprova un per un tots els gràfics i si està dins de la pantalla
virtual. En cas afirmatiu es dibuixarà en el framebuffer el gràfic en la seva posició
relativa a la pantalla virtual i a continuació s’examinarà el següent gràfic.
Un cop el framebuffer estigui acabat es mostrarà en pantalla i es netejarà (àrea en color
vermell).
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller 62
Els jocs 2D han de ser il·lustrats per artistes experimentats, que treballen tenint en
compte les limitacions tècniques del maquinari sobre el qual correrà el joc, això inclou:
quantitat de colors disponibles, mida dels sprites (tipus d’imatge), resolució final dels
sprites i formats a utilitzar. Els artistes 2D també són els encarregats d'elaborar les
animacions del joc.
La il·lustració
La il·lustració és una eina important per la creació de grans idees que més tard es
transformaran en grans videojocs, és una activitat complexa, perquè no implica només
saber de disseny, sinó també explicar històries, comunicar emocions a través de
dissenys, color i composició de les mateixes.
Per realitzar els sprites els il·lustradors s’han de basar en la idea establerta en el
storyboard i en l’art conceptual del disseny realitzant les il·lustracions a l’escala
correcte i amb els colors determinats anteriorment.
Els sprites ha realitzar són els de tots els personatges del videojoc, els objectes i els
botons de la interfície gràfica. Per dibuixar els escenaris s’utilitzen tiles ja que l’escenari
d’un videojoc de plataformes se sol repetir mentre s’avança en un mateix nivell.
Aquestes són alguns sprites del personatge principal del videojoc de mostra acabats:
Diferents sprites de l’Inti. La primera fila corrents, la segona atacant i la tercera saltant.
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller 63
A part dels sprites també s’han de dibuixar tots els elements de l’escenari col·locats en
una graella de caselles de la mateixa mida:
Sprite amb 186 tiles diferents pels escenaris del videojoc Tiverton.
En cas de no realitzar un videojoc professional i si no es té les habilitats per crear les
il·lustracions (com és el cas del videojoc de mostra), sempre es poden agafar de
llibreries o galeries d’imatges gratuïtes.
Com es pot comprovar les il·lustracions creades per videojocs solen ser un conjunt
d’imatges les quals han de ser tractades per separat dins del videojoc, on es mostraran la
secció corresponent segons la lògica del videojoc.
En un joc en dues dimensions no fa falta que les il·lustracions tinguin molta resolució,
d’aquesta manera les imatges ocuparan menys a la memòria i seran més fàcils de
manejar pel videojoc.
Totes les il·lustracions que s’utilitzen pel videojoc de mostra es poden trobar al CD
adjunt al treball.
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller 64
La interfície d’un videojoc és la forma en què es veuran els elements de la interfície
gràfica d'usuari i el HUD, mitjançant els quals l'usuari interactuarà amb el joc.
La interfície
La interfície gràfica d’usuari d’un videojoc de plataformes és principalment el menú
d’inici i els menús que apareixen entre els nivells i parts o quan el personatge mor.
Per al videojoc Tiverton s’han introduït sis menús diferents entre les partides depenent
de la situació del jugador en el joc. Aquests menús intermedis són els següents:
Joc en pausa Personatge mort Game Over
Nivell completat Puntuació del nivell acabat Joc completat
Tots els menús d’aquest joc funcionen amb les tecles de direcció amunt i avall, amb
l’espai per executar l’acció seleccionada i la tecla Escape per tornar al menú anterior
sense haver de seleccionar l’opció “enrere” en el menú principal.
Per el joc de mostra també s’ha fet un menú inicial pel qual el jugador pot navegar per
arribar a les diferents opcions com jugar des d’un punt determinat del joc, veure les
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller 65
instruccions o els crèdits o sortir del programa. Aquest menú es distribueix
principalment de la següent manera:
El menú del videojoc Tiverton consta d’un menú inicial amb les opcions de jugar, veure
les instruccions, veure els crèdits i sortir del joc. Dins de l’opció jugar hi ha diverses
opcions, a part de la opció de tornar al menú previ, que són “Nova partida” que
comença el joc a la primera part, i “Continuar” on dins d’aquesta s’ha d’introduir una
clau (proporcionada al jugador) per continuar el joc des de la segona o la tercera part.
Ja s’ha vist les interfícies gràfiques d’usuari que facilitin la navegació del jugador per
les diferents opcions del joc.
Apart del que s’acaba de veure, l’equip que s’encarrega de la interfície també ha de
realitzar el que s’anomena HUD.
En els videojocs es diu HUD (Heads-Up Display) que en tot moment es mostra en
pantalla durant la partida, generalment en forma d’icones i números. El HUD acostuma
a mostrar el número de vides, els punts, el nivell de salut i d’armadura, el mini-mapa,
etc. depenent del joc.
Avui en dia, tots els videojocs usen un tipus de HUD que s'adapta al joc en si.
Generalment, el HUD té un disseny diferent que va d'acord amb el joc. El HUD ha de
ser dissenyat per no entorpir el joc i brindar al jugador en tot moment la informació de
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller 66
joc necessària. Amb el pas del temps, s'ha comprovat que la millor zona per col·locar el
HUD és les cantonades o vores de la pantalla, el que permet al jugador accedir a la
informació necessària amb només moure un ull.
En el videojoc de mostra per aquest treball es mostra a la cantonada superior esquerra la
puntuació, just a sota el número de monedes, al mig de la vora superior es mostra el
temps restant per completar el nivell, a la cantonada superior dreta el número de vides
en icones i just a sota el número d’armadura o vegades que pots ser ferit abans de morir
també utilitzen icones.
HUD del videojoc Tiverton. A la segona fila de la cantonada superior dreta (marcat en vermell) es mostra en color l’armadura que li queda al personatge (en aquest cas un punt) i la suma dels icones emblanquinats i els de color mostren l’armadura màxima que l’Inti pot tenir en aquell nivell (en aquest cas màxim tres punts).
Arribats a aquest punt ja s’ha vist quins elements es poden incloure en un videojoc per
realitzar una interfície sofisticada.
En el procés de desenvolupament d’un videojoc en tres dimensions un equip d'artistes
professionals s’encarrega de l'animació i el modelatge en tres dimensions.
L’animació i el modelat 3D
Aquest equip d’artistes utilitza eines comercials de modelatge i animació tridimensional
com 3DS Max, Maya, XSI/Softimage, Blender (el qual no és comercial), ... per crear les
animacions en 3D.
Com ja s’ha explicat en la part general del treball crear un videojoc en tres dimensions
requereix molta experiència i professionalitat i és una tasca molt complicada. Com que
el videojoc de mostra només és en dues dimensions, no s’haurà de crear cap animació o
modelatge tridimensional.
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller 67
Per aquesta tasca els enginyers de so s'encarreguen de crear sons per a cada objecte o
personatge del joc establerts en el disseny del joc. Poden crear sons des de zero o
utilitzar sons de l'ambient i modificar-los segons les seves necessitats.
El so
Al igual que amb les imatges, també es poden buscar sons per Internet i utilitzar els sons
d’alguna llibreria gratuïta, com es fa pel videojoc Tiverton. Tot i així, sempre que sigui
possible, el millor és crear un mateix els sons pel videojoc.
S’ha de crear i utilitzar sons que no siguin molestos, sinó s’estaria introduint soroll en el
videojoc. A més a més, no es poden realitzar molts sons diferents degut a les
restriccions d’espai del disc, RAM, etc. La solució més lògica és utilitzar menys sons i
repetir-los. Això és el que es fa però s’ha de tenir en compte que un àudio repetitiu pot
arruïnar un joc i per tant s’ha de crear sons que no siguin molestos i saber-los introduir
correctament en el videojoc de manera que no es repeteixin constantment.
A part dels sons d’un videojoc també s’ha de compondre la música que l’acompanyarà.
La música de videojocs, en particular des de començaments del segle XXI, pot ser
considerada com un gènere musical per dret propi, principalment per tractar-se en la
seva major part de música programada, a diferència de la música gravada en estudi o
interpretada en directe.
La música haurà de concordar
amb les especificacions
realitzades en el disseny del
videojoc. Al igual que els sons
la música sol ser composada
per ordinador utilitzant
diversos programes.
Actualment la música i els sons d’un videojoc són guardats en arxius MP3 o en WAV. A
part d’aquests dos tipus d’arxius d’àudio també és molt comú utilitzar els arxius MIDI en
els videojocs ja que aquests ocupen molt poc i es creen a partir d’instruments musicals.
Els programes de creació de sons i edició de música són molt útils en la creació d’un videojoc professional.
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller 68
Per el videojoc Tiverton s’utilitzaran arxius WAV perquè és un tipus de format sense
pèrdua de dades al contrari que el MP3 que es basa en un algoritme de pèrdua per
aconseguir una menor mida d’arxiu. Tampoc s’utilitzaran arxius MIDI ja que fa falta el
software i els instruments corresponents per crear i després reproduir aquest tipus de
música dins del joc.
Tots els sons i músiques que s’utilitzen pel videojoc de mostra es poden trobar al CD
adjunt al treball.
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller 69
2.2.2. Les proves
Igual que en altres tipus de programari, els videojocs han de passar per una etapa on es
corregeixen els errors o bugs inherents al procés de programació i a diferència d'aquells,
els videojocs requereixen un refinament de la seva característica fonamental, la de
produir diversió de manera interactiva (jugabilitat). Generalment aquesta etapa es porta
a terme en dues fases:
• Proves alpha: Es duen a terme per un petit grup de persones, que amb
anterioritat estiguin involucrades en el desenvolupament, el que pot incloure
artistes, programadors, coordinadors, etc. El propòsit és corregir els defectes
més greus i millorar característiques de jugabilitat no contemplades en el
document de disseny.
• Proves beta: Aquestes proves es duen a terme per un equip extern de jugadors,
bé sigui que siguin contractats per a l'ocasió o que siguin un grup component del
projecte (grup QA), els quals fan software testing per tal d’informar
objectivament sobre la qualitat del producte. D'aquestes proves el videojoc ha de
sortir amb el mínim possible de defectes menors i cap defecte mitjà o crític.
D’aquesta manera també s’analitza si
s’assoleix l’objectiu de divertir al jugador
(sobretot en les proves beta) i si no com
millorar el videojoc, per exemple canviant
la música, afegint nivells, ... depenent d’on
hi hagi el problema que faci que el joc no
tingui la jugabilitat esperada.
Un cop fet tots els canvis necessaris, si el videojoc no té cap tipus de bug i assoleix
l’objectiu de divertir i entretenir al jugador ja es pot crear la versió (definitiva o no) que
es llançarà al mercat (apartat “2.3. Compilació i distribució del joc”).
Eliminar els bugs i glitches és molt important per tal de què el joc funcioni bé i no provoqui el rebuig del jugador.
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller 70
2.2.3. El manteniment
Quan un joc surt al mercat, la fase de manteniment per al videojoc comença.
En el passat, els jocs desenvolupats per a les consoles de videojocs gairebé no tenien
cap període de manteniment. El joc allotjaria per sempre tants errors i problemes que
quan es va posar al mercat. Aquesta era la norma per a les consoles ja que totes les
consoles tenien una
maquinaria idèntica o
gairebé idèntica i la
incompatibilitat no era
un problema. En aquest
cas, el manteniment
només es produiria en el
cas d'una seqüela o d'una
nova versió millorada
que tornés a utilitzar una
gran part del motor del
videojoc anterior.
Els videojocs de consola que es consideren 100% completats són els que són
manufacturats i que no es poden canviar. No obstant, amb la introducció de les consoles
per connectar en línia com la PlayStation 3 i la Xbox 360, una gran part dels videojocs
que es connecten en línia es poden arreglar possibles errors, com també l'afegiment de
noves característiques i novetats en el videojoc, molt semblant amb el que ja es feia amb
els videojocs d'ordinador. Els videojocs d'ordinador, d'altra banda, poden tenir
nombrosos conflictes amb el maquinari i les configuracions ja que cada ordinador pot
ser diferent, a diferència de les consoles de joc. Els desenvolupadors intenten aplicar les
configuracions que més es prevaleixen en general, malgrat això no poden garantir que
funcionin en tots els sistemes on el videojoc sigui executat. Una pràctica molt comuna
entre els desenvolupadors de jocs d'ordinador és la de publicar pedaços (patch) pels
seus videojocs (sovint en mesos o anys després). Aquests pedaços, abans s'enviaven als
usuaris a través de discos floppy, però ara generalment es descarreguen a través de la
Per el software en general, el seu manteniment és una activitat molt important degut a que acostuma a requerir més d’un 70% del cost del cicle de vida del producte.
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller 71
pàgina web dels desenvolupadors. Si esdevé com una segona publicació, la versió amb
pedaç es converteix en la nova.
Els programadors esperen un període per obtenir la major quantitat d'informes d'errors
com sigui possible. Una vegada que el desenvolupador creu que han obtingut
informació suficient, els programadors comencen a treballar en un pedaç. El pedaç pot
trigar setmanes o mesos en desenvolupar-se, però està destinat a solucionar la majoria
de bugs i problemes amb el joc publicat, o en casos estranys, arreglar els problemes no
desitjats causats pels pedaços anteriors. De tant en tant un pedaç pot incloure funcions
addicionals o continguts o fins i tot pot alterar el joc .
En el cas d'un joc en línia multijugador massiu (MMOG), com un MMORPG o
MMORTS, l'enviament del joc és la fase inicial de manteniment. Aquest tipus de jocs
en línia estan en manteniment continu mentre el món del joc es canvia contínuament i
s'afegeixen noves característiques. El personal de manteniment per a un MMOG
popular pot comptar per desenes, de vegades incloent als membres de l'equip de
programació original.
El famós MMORPG World of Warcraft llença nous pedaços cada mes per tal d’ampliar i millorar al màxim el joc i l’experiència del jugador.
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller 72
2.3. Compilació i distribució del joc
Un cop es té realitzat casi tot el que s’havia plantejat en el disseny del videojoc havent
fet les proves necessàries, toca crear el videojoc arreglat de manera que pugui ser
distribuït fàcilment. Per aconseguir el paquet (fitxer executable “.exe” i arxius adjunts si
és necessari) distribuïble del videojoc s’ha de realitzar una compilació del videojoc que
si pot ser només sigui necessari l’executable.
2.3.1. Compilació estàtica amb Allegro 5 utilitzant l’entorn Dev-C++
Per fer això el primer que s’ha de fer és una compilació estàtica per tal de què les
llibreries adjuntes es comprimeixin dins del fitxer executable i s’hagin de distribuir al
costat del executable. Aquest procés té els seus avantatges i inconvenients: la
compilació estàtica sol augmentar considerablement la mida del fitxer executable i si es
publica una nova versió de les llibreries que utilitza el videojoc s’ha de tornar a enllaçar
les llibreries. Per altra banda aquest procés permet una distribució més senzilla tant per
l’equip creador com pel jugador i de les llibreries només s’afegeix les funcions que són
utilitzades pel joc.
Per realitzar la compilació estàtica amb la llibreria Allegro 5 utilitzant l’entorn Dev-
C++, un cop acabat el videojoc segons s’havia plantejat en el disseny i havent realitzat
les instruccions de l’apartat “1.3. Requeriments per programar en C++”, es va a Eines
>> Opcions del compilador i de la pestanya Compilador es selecciona l’opció Afegeix
això a la línia d’ordres de l’enllaçador si no està seleccionada i just al requadre inferior
ha de quedar escrit:
“-static-libgcc -static-libstdc++” (sense cometes)
A continuació es va a Projecte >> Opcions del projecte i la pestanya Paràmetres. A
sota d’on posa Enllaçador s’afegeixen les següents línies:
"C:/Archivos de programa/Dev-Cpp/MinGW32/lib/liballegro-5.0.10-monolith-static-mt.a" "C:/Archivos de programa/Dev-Cpp/MinGW32/lib/libvorbisfile-1.3.2-static-mt.a" "C:/Archivos de programa/Dev-Cpp/MinGW32/lib/libvorbis-1.3.2-static-mt.a"
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller 73
"C:/Archivos de programa/Dev-Cpp/MinGW32/lib/libdumb-0.9.3-static-mt.a" "C:/Archivos de programa/Dev-Cpp/MinGW32/lib/libFLAC-1.2.1-static-mt.a" "C:/Archivos de programa/Dev-Cpp/MinGW32/lib/libfreetype-2.4.8-static-mt.a" "C:/Archivos de programa/Dev-Cpp/MinGW32/lib/libogg-1.2.1-static-mt.a" "C:/Archivos de programa/Dev-Cpp/MinGW32/lib/libzlib-1.2.5-static-mt.a" "C:/Archivos de programa/Dev-Cpp/MinGW32/lib/libopenal-1.14-static-mt.a" "C:/Archivos de programa/Dev-Cpp/MinGW32/lib/libgdiplus.a" "C:/Archivos de programa/Dev-Cpp/MinGW32/lib/libuuid.a" "C:/Archivos de programa/Dev-Cpp/MinGW32/lib/libkernel32.a" "C:/Archivos de programa/Dev-Cpp/MinGW32/lib/libwinmm.a" "C:/Archivos de programa/Dev-Cpp/MinGW32/lib/libpsapi.a" "C:/Archivos de programa/Dev-Cpp/MinGW32/lib/libopengl32.a" "C:/Archivos de programa/Dev-Cpp/MinGW32/lib/libglu32.a" "C:/Archivos de programa/Dev-Cpp/MinGW32/lib/libuser32.a" "C:/Archivos de programa/Dev-Cpp/MinGW32/lib/libcomdlg32.a" "C:/Archivos de programa/Dev-Cpp/MinGW32/lib/libgdi32.a" "C:/Archivos de programa/Dev-Cpp/MinGW32/lib/libshell32.a" "C:/Archivos de programa/Dev-Cpp/MinGW32/lib/libole32.a" "C:/Archivos de programa/Dev-Cpp/MinGW32/lib/libadvapi32.a" "C:/Archivos de programa/Dev-Cpp/MinGW32/lib/libws2_32.a" "C:/Archivos de programa/Dev-Cpp/MinGW32/lib/libshlwapi.a"
Es canvia "C:/Archivos de programa/Dev-Cpp/MinGW32” per on es trobi el compilador
MinGW32 en cas de què no sigui aquesta. Les llibreries a incloure i l’ordre en què s’inclouen és
molt important i si no s’incorporen exactament en l’ordre que es mostra a la llista anterior la
compilació fallarà.
Finalment s’afegeix la línia #define ALLEGRO_STATICLINK abans d’incloure les llibreries
d’Allegro 5 de tal manera que quedi de la següent forma (annex C pàgina XIX línia 19):
//Allegro 5 libraries #define ALLEGRO_STATICLINK #include <allegro5/allegro.h> #include <allegro5/allegro_native_dialog.h> #include <allegro5/allegro_audio.h> #include <allegro5/allegro_acodec.h> #include <allegro5/allegro_image.h> #include <allegro5/allegro_memfile.h> #include <allegro5/allegro_primitives.h> #include <allegro5/allegro_ttf.h>
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller 74
2.3.2. Incorporació d’arxius multimèdia al fitxer final
Ara estaria bé poder incloure tots els arxius multimèdia (imatges, música, etc.) a dins del fitxer
executable de manera que tot el videojoc i els elements necessaris estiguessin en un sol arxiu.
Aquest procés és bastant complex i depèn de l’equip programador del videojoc. Per el videojoc
Tiverton s’ha realitzat un programa anomenat makeUpdateMaps (veieu el seu codi a l’annex D i
el programa compilat al CD) que un cop s’executa crea arxius de C++ que incorporen en
hexadecimal tot el codi dels arxius multimèdia en hexadecimal (veure annex o CD per el codi).
Un cop executat aquest programa que crea els arxius “.cpp” (arxius de codi C++) s’afegeixen
des de l’entorn Dev-C++ al nostre videojoc prement amb el botó dret del ratolí sobre on apareix
el nom del nostre projecte (1) (al marge esquerra a la pestanya Projecte) i es selecciona l’opció
Afegeix al projecte i a partir de la finestra que s’obrirà es seleccionen tots els fitxers creats pel
programa makeUpdateMaps.
Havent realitzat totes les instruccions només s’ha de triar l’opció de Reconstrueix-ho tot (F12)
(2) i ja s’haurà creat l’arxiu executable que incorpora tot el videojoc.
Amb el videojoc final creat es pot distribuir amb un CD o si el videojoc és gratuït com
en el cas del videojoc de mostra es pot penjar el fitxer executable a Internet que és molt
més senzill i garanteix que més persones puguin jugar al joc d’ordinador creat.
S’ha de recordar que un cop es distribueix el videojoc no significa que ja no es pugui
seguir treballant en el mateix projecte, sinó que es poden crear noves versions del
videojoc o millores per garantir l’èxit del joc (apartat “2.2.3. El manteniment”).
1 2
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller 75
CONCLUSIONS
Amb aquest treball s’ha realitzat una visió general de cada pas per crear un videojoc
veient moltes opcions possibles, el qual permet tenir una idea més clara de com crear un
videojoc de principi a fi. No és pas un procés senzill i crear un bon videojoc passa per
moments en què els creadors es bloquegen i alguns decideixen abandonar el projecte.
Aquest treball és simplement el començament per aprendre a programar i crear
videojocs. S’ha de seguir aprenent sobretot perquè és una industria en constant
actualització i si es necessita ajuda hi ha moltes persones disposades a ajudar. La
creació d’un videojoc pot ser un procés avorrit, esgotador i frustrant, tanmateix el
creador no s’ha de donar per vençut sinó prendre’s un descans. Una de les coses més
molestes i vergonyoses és trobar errors crítics en el teu joc després de distribuir-lo. Per
evitar aquests errors com s’ha vist en el treball la solució és realitzar moltes proves.
Provar ajudarà a aprendre nous conceptes de programació, física, matemàtiques, etc.
La creació de videojocs és com una ciència o art i no s’aprèn amb un manual. La millor
manera de millorar poc a poc en aquest àmbit és practicant tot el que es pugui. A més a
més s’ha de recordar que és un àmbit on intervenen la lògica, les matemàtiques, la
física, i altres tipus de coneixements pels quals una sola persona no té perquè ser
excel·lent en tots els processos que hi ha per crear un videojoc, sinó que aquests
processos es poden dividir entre un grup de persones per així formar un bon videojoc.
I per què un treball sobre la creació de videojocs? Doncs perquè és un disciplina
didàctica de molts temes diferents i també es considera la millor forma de practicar la
programació. D’altra banda també s’ha de pensar que es tracta d’una indústria creixent
que en poc temps pot arribar a ser la feina diària de moltes persones. Un principiant en
aquesta matèria no ha d’esperar que el seu primer joc sigui un punt de referència
revolucionari, sinó un primer pas. En un segon joc, ha d’eliminar els possibles defectes
del primer joc i millorar els aspectes que els hi ha agradat als jugadors.
Abans d’acabar aquest treball, una última recomanació personal per qui es proposi fer
un videojoc o qualsevol altre gran projecte informàtic: fer còpies de seguretat!
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller 76
BIBLIOGRAFIA
A continuació es citen les diferents fonts utilitzades per l’elaboració del treball:
Llibres
DD.AA., Rules of Play: Game Design Fundamentals. Massachusetts, Estats Units, MIT
Press, 2004.
DD.AA., Technologies for Interactive Digital Storytelling and Entertainment. Berlín,
Alemanya, Springer, 2004.
D’Andrea, E., Desarrollo de Programación de Juegos: Curso de Iniciación. Barcelona,
Inforbook’s, 2009.
DEWHURST, S., C++ Gotchas: Avoiding Common Problems in Coding and Design.
Boston, Estats Units, Addison-Wesley Professional, 2002.
LACREU, J., Vocabulari d’informàtica. València, Generalitat Valenciana, Conselleria
d'Educació i Ciència, Universitat d'Alacant, UJI, Universitat Politècnica de València,
Universitat de València, 1993.
Articles de revistes
GONZÁLEZ, D., “Cómo crear un nivel de videojuego – 1ª parte”, PC Actual (número
212) 163-165.
GONZÁLEZ, D., “Cómo crear un nivel de videojuego – 2ª parte”, PC Actual (número
213) 172-173.
Pàgines web (per ordre temàtic)
VIQUIPÈDIA. Llenguatge de programació
< http://ca.wikipedia.org/wiki/Llenguatge_de_programaci%C3%B3 >
[Consulta: 4 d’agost 2013]
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller 77
VIQUIPÈDIA. Llenguatge de programació d’alt nivell
< http://ca.wikipedia.org/wiki/Llenguatge_de_programaci%C3%B3_d%27alt_nivell >
[Consulta: 5 d’agost 2013]
VIQUIPÈDIA. Programació orientada a objectes
< http://ca.wikipedia.org/wiki/Programaci%C3%B3_orientada_a_objectes >
[Consulta: 5 d’agost 2013]
VIQUIPÈDIA. C++
< http://ca.wikipedia.org/wiki/C%2B%2B > [Consulta: 6 d’agost 2013]
VIQUIPÈDIA. Java (llenguatge de programació)
< http://ca.wikipedia.org/wiki/Llenguatge_Java > [Consulta: 6 d’agost 2013]
PROGRAMACIONWEB.NET. Lo bueno, lo malo, y lo feo de java
< http://www.programacionweb.net/articulos/articulo/lo-bueno-lo-malo-y-lo-feo-de-
java/ > [Consulta: 6 d’agost 2013]
VIQUIPÈDIA. Entorno de desarrollo integrado
< http://es.wikipedia.org/wiki/Entorno_de_desarrollo_integrado >
[Consulta: 14 d’octubre 2013]
VIQUIPÈDIA. Visual C++
< http://es.wikipedia.org/wiki/Visual_C%2B%2B > [Consulta: 20 d’octubre 2013]
VIQUIPÈDIA. Dev-C++
< http://es.wikipedia.org/wiki/Dev-C%2B%2B > [Consulta: 20 d’octubre 2013]
VIQUIPÈDIA. GNU
< http://ca.wikipedia.org/wiki/GNU > [Consulta: 20 d’octubre 2013]
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller 78
BLOODSHED SOFTWARE. Dev-C++
< http://www.bloodshed.net/devcpp.html > [Consulta: 21 d’octubre 2013]
VIQUIPÈDIA. Code::Blocks
< http://es.wikipedia.org/wiki/Code::Blocks > [Consulta: 21 d’octubre 2013]
CODE::BLOCKS. Code::Blocks
< http://www.codeblocks.org/ > [Consulta: 21 d’octubre 2013]
Foros del Web. Dev-C++ o Code Blocks?
< http://www.forosdelweb.com/f96/dev-c-code-blocks-399353/ >
[Consulta: 4 de novembre 2013]
VIQUIPÈDIA . Allegro (biblioteca de programación)
< http://es.wikipedia.org/wiki/Allegro_(biblioteca_de_programaci%C3%B3n) >
[Consulta: 11 de novembre 2013]
ALLEGRO. A game programming library
< http://alleg.sourceforge.net/ > [Consulta: 11 de novembre 2013]
ALLEGRO.CC. Main
< https://www.allegro.cc/ > [Consulta: 11 de novembre 2013]
VIQUIPÈDIA. Género de videojuegos
< http://es.wikipedia.org/wiki/G%C3%A9nero_de_videojuegos >
[Consulta: 27 de novembre 2013]
VIQUIPÈDIA. Videojoc de plataformes
< http://ca.wikipedia.org/wiki/Videojoc_de_plataformes >
[Consulta: 2 de desembre 2013]
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller 79
ZE[H]N GAMES. DEV: Los problemas al desarrollar un videojuego (cuevas y
terrenos)
< http://www.zehngames.com/dev-los-problemas-al-desarrollar-un-videojuego-cuevas-
y-terrenos/ > [Consulta: 5 de gener 2014]
WIKIHOW. Cómo crear un videojuego desde cero
< http://es.wikihow.com/crear-un-videojuego-desde-cero > [Consulta: 5 de gener 2014]
VIQUIPÈDIA. Desarrollo de videojuegos
< http://es.wikipedia.org/wiki/Desarrollo_de_videojuegos >
[Consulta: 21, 24 i 26 de desembre 2013]
WIKISPACES. Jugabilidad y Experiencia del jugador
< http://jugabilidad.wikispaces.com/ > [Consulta: 21 i 22 de desembre 2013]
PUNTOGEEK. La curva de aprendizaje en los videojuegos
< http://www.puntogeek.com/2013/02/23/la-curva-de-aprendizaje-en-los-videojuegos/ >
[Consulta: 22 de desembre 2013]
MARK BALDWIN. Game Design Document Outline [DOC en línia]
< https://docs.google.com/viewer?url=www-
personal.engin.umd.umich.edu/~bmaxim/cis488/BaldwinGameDesignDocumentTempla
te.doc&embedded=true > [Consulta: 22 de desembre 2013]
PROJECTARY. Cómo crear un videojuego (o APP) desde cero #2: El proceso de
creación.
< http://projectary.wordpress.com/2013/02/16/como-crear-un-videojuego-o-app-desde-
cero-2/ > [Consulta: 23 de desembre 2013]
GENBETA DEV. Cómo empezar a programar videojuegos
< http://www.genbetadev.com/programacion-de-videojuegos/como-empezar-a-
programar-videojuegos > [Consulta: 23 de desembre 2013]
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller 80
CODINGMADEEASY. C++ Allegro 5 Made Easy [40 vídeos en línia]
< http://www.youtube.com/playlist?list=PL6B459AAE1642C8B4 > (total 8:01:58)
[Consulta: 23 de desembre 2013]
DEIVIDCOPTERO CHANN. Programar Pac-Man [6 vídeos en línia]
< http://www.youtube.com/playlist?list=SP9E48CC99A9EE4F6F > (total 2:40:19)
[Consulta: 24 de desembre 2013]
PROGRAMACIÓN EN LENGUAJE ENSAMBLADOR. Tiles y Sprites en
Ensamblador
< http://asm86.wordpress.com/2011/03/11/tiles-y-sprites-en-ensamblador/ >
[Consulta: 25 de desembre 2013]
IGDA COLOMBIA. Sonido y música para videojuegos: ¿Qué tienen de especial?
< http://igdacolombia.co/2013/02/sonido-y-musica-para-videojuegos-%C2%BFque-
tienen-de-especial/ > [Consulta: 26 de desembre 2013]
GAME AUDIO STUFF. Una página dedicada al audio para videojuegos.
< http://gameaudiostuff.com/ > [Consulta: 26 de desembre 2013]
NIUBIE. Audio En Videojuegos: Herramientas para Efectos de Sonido I
< http://www.niubie.com/2011/02/audio-en-videojuegos-herramientas-para-efectos-de-
sonido-i/ > [Consulta: 26 de desembre 2013]
LIBERTY UNIVERSITY. Testing and Maintenance in the Video Game Industry Today
[PDF en línia]
< http://digitalcommons.liberty.edu/cgi/viewcontent.cgi?article=1136&context=honors >
[Consulta: 27 de desembre 2013]
MUNDO KRAMER. Mantenimiento de software
< http://mundokramer.wordpress.com/2011/05/18/mantenimiento_de_software/ >
[Consulta: 28 de desembre 2013]
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller 81
ALLEGRO WIKI. Static and Dynamic Link
< http://wiki.allegro.cc/index.php?title=Static_and_Dynamic_Link >
[Consulta: 29 de desembre 2013]
ALLEGRO WIKI. Windows, Code::Blocks and Allegro 5
< http://wiki.allegro.cc/index.php?title=Windows,_Code::Blocks_and_Allegro_5 >
[Consulta: 29 i 30 de desembre 2013]
XKLIBUR DESIGN BUNKER. 5 consejos para diseñadores de videojuegos
principiantes
< http://www.xklibur.com/archives/2012/02/21/5-consejos-para-disenadores-de-
videojuegos-principiantes/ > [Consulta: 4 de gener 2014]
ARTÍCULOS CON CLASE. Crear el juego de la serpiente en Windows
< http://articulos.conclase.net/?tema=juegos&art=serpiente&pag=000 >
[Consulta: 4 de gener 2014]
INSTITUT D’ESTUDIS CATALANS. DIEC2
< http://dlc.iec.cat/ > [Consulta: del 1 al 5 de gener 2014 pel glossari]
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller I
ANNEX
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller II
ANNEX A: GLOSSARI
A continuació s’explicarà el significat de les paraules marcades en verd al llarg de tot el
treball que poden resultar desconegudes per un lector sense coneixements profunds
d’informàtica. Alguns d’aquests termes ja s’expliquen en el cos del treball, però aquí
s’amplien més.
Explicació de les següents paraules ordenades alfabèticament:
• Algorisme o Algoritme: Conjunt finit d'instruccions o passos que serveixen per a
executar una tasca o resoldre un problema. D'una manera més formal, un
algorisme és una seqüència finita
d'instruccions realitzables, no ambigües,
l'execució de les quals condueix a una
resolució d'un problema. Aquesta definició es
pot generalitzar des del punt de vista sistèmic,
si se suposa que l'algorisme pot ésser dissenyat
per rebre i aprofitar una determinada entrada,
donant com a resultat una sortida, que pot
resoldre un problema determinat. Alguns
exemples d'algorismes en les matemàtiques són l'algorisme de la divisió per a
calcular el quocient de dos nombres o l'algorisme d'Euclides per obtenir el
màxim comú divisor de dos enters positius.
• API o Application Programming Interface: Una interfície de programació
d'aplicacions és una interfície que especifica com diferents components de
programes informàtics haurien d'interactuar. Dit d'una altra manera, és un
conjunt d'indicacions, en quant a funcions i procediments, ofert per una
biblioteca informàtica o programoteca per ser utilitzat per un altre programa per
interactuar amb el programa en qüestió.
• Arbre: En informàtica, un arbre és una estructura de dades jeràrquica que conté
una col·lecció d'elements distribuïts en nodes enllaçats. Tots els nodes tenen
almenys un únic node anomenat pare o ascendent, excepte un únic node que no
Algorisme babilònic per calcular l’arrel quadrada d’un número.
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller III
té node pare que anomenen arrel i que és el punt de
partida de tot l'arbre. Al seu torn, cada node pot tenir
zero o més nodes anomenats fills o descendents. A més,
els nodes fills d'un determinat node tenen un ordre
determinat entre ells. Tots els nodes s’han de poder
abastar des del node arrel seguint els enllaços dels nodes fills.
• Assegurament de la qualitat o Quality Assurance: Conjunt d'activitats
planificades i sistemàtiques aplicades en un sistema de qualitat perquè els
requisits de qualitat d'un producte o servei siguin satisfets. Entre aquestes
activitats es troben la mesura sistemàtica, la comparació amb estàndards, el
seguiment dels processos, totes les activitats associades amb bucles de
realimentació d'informació. Aquestes activitats contribueixen a la prevenció
d'errors, la qual cosa es pot contrastar amb el Control de Qualitat, que se centra
en les sortides del procés.
• bug: Un error de programari (o bug) és el resultat d'una fallada durant el procés
de creació de programari. Aquesta fallada pot presentar-se en qualsevol de les
etapes del cicle de vida del programari encara que els més evidents es donen en
l'etapa de desenvolupament i programació. Alguns errors poden ser de disseny
(per exemple pressuposar que tots els usuaris tenen les mateixes habilitats
motrius, visuals i auditives) comportant que el programa de còmput en qüestió
no sigui utilitzable.
• Clip: Un videoclip, vídeo musical o clip de vídeo és un curtmetratge realitzat
principalment per a la seva difusió en vídeo, televisió i Internet, que ofereix una
representació visual d'una cançó, una composició musical, etc. Els videoclips se
solen realitzar amb multitud d'efectes visuals i electrònics.
• Codi: En la comunicació, un codi és una norma per a convertir un fragment
d'informació (per exemple una lletra, paraula o frase) a una altra forma de
representació, no necessàriament del mateix tipus.
Arbre simple desordenat.
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller IV
El procés de codificació, permet convertir la informació origen en unes dades
codificades, que s'emmagatzemen o s'envien a un receptor. El procés invers és el
de descodificació, on es converteix aquests codis en informació interpretable per
al destinatari. Un codec (de codificació/descodificació) és la implementació
d'aquesta norma (o algorisme) per a codificar i descodificar, i pot incloure a més
la compressió de les dades.
Un codi a més pot incloure mecanismes per a ocultar la informació que conté, de
manera que només els destinataris que sàpiguen com descodificar-lo, seran
capaces de reconstruir la informació original. Per exemple usant eines de
criptografia.
• Compilació estàtica: En el procés d'enllaçat durant la compilació les
biblioteques estàtiques (arxius amb codi d'objectes empaquetats) seran copiats i
relocalitzats (si cal) en el fitxer executable final, juntament amb la resta de
fitxers de codi d'objecte.
• Compilador: Programa d'ordinador que tradueix un llenguatge informàtic, com
el Visual Basic o el C, per exemple, a un altre llenguatge informàtic. La tasca
típica d'un compilador és la traducció d'un llenguatge d'alt nivell a un altre
(normalment Assemblador) de baix nivell. Cadascú del processadors que
existeixen tenen una versió pròpia d'un conjunt d'instruccions al qual tradueixen
els compiladors. Aquesta eina permet al programador desconèixer el llenguatge
que utilitza l'ordinador i escriure en un llenguatge més universal i més proper a
com pensa un humà.
• Compilar o Compilació: Acció que realitza un compilador.
• CPU: La unitat central de processament o CPU (per l'acrònim en anglès de
central processing unit), o simplement el processador o microprocessador, és el
component de l'ordinador i d'altres dispositius programables, que interpreta les
instruccions contingudes en els programes i processa les dades. Els CPU
proporcionen les característiques fonamentals de l'ordinador digital (la
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller V
programabilitat) i són un dels components necessaris trobats a les computadores
de qualsevol temps, junt amb l'emmagatzemament primari i els dispositius
d'entrada/sortida. Es coneix com a microprocessador la CPU que és
manufacturada amb circuits integrats.
• Delphi: Entorn de desenvolupament de programari dissenyat per a la
programació de propòsit general amb èmfasi en la programació visual, per a
aplicacions Microsoft Windows (32 i 64 bits), Mac OS X i iOS. Delphi s'utilitza
com a llenguatge de programació una versió moderna de Pascal anomenada
Object Pascal.
• Depurador: Programa que permet depurar o netejar els errors d'un altre
programa informàtic. El codi a ser examinat pot alternativament estar executant-
se en un simulador de conjunt d'instruccions (ISS), una tècnica que permet una
gran potència en la seva capacitat de detenir-se quan són oposades condicions
específiques però serà típicament una mica més lent que executant el codi
directament en el processador adequat. Alguns depuradors (en anglès debuggers)
ofereixen dues maneres d'operació: la simulació parcial o completa, per limitar
aquest impacte.
• Diagrama de flux: Representació gràfica d'un
algorisme. S'utilitza en disciplines com la
programació informàtica, l'economia, els
processos industrials i la psicologia cognitiva.
Aquests diagrames utilitzen símbols amb
significats ben definits que representen els
passos de l'algorisme, i representen el flux
d'execució mitjançant fletxes que connecten els
punts d'inici i de finalització.
• Disc floppy: Un disc flexible o disquet (floppy disk) és un dispositiu
d'emmagatzemament de dades format per una peça circular de material magnètic
que permet la gravació i la lectura de dades. És fi, flexible i tancat en una caixa
Diagrama de flux senzill amb els passos a seguir si un llum no funciona.
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller VI
fina quadrada o rectangular de plàstic. Durant la dècada del 2000, han estat
majoritàriament substituïts per discs òptics i pels dispositius de memòria flaix.
Han existit tres mides principals de disquets per a PC: 8 polzades, 5 ¼ polzades,
3½ polzades.
• Enllaçar: En informàtica, acció en què els fitxers objecte resultants de la
compilació, juntament amb llibreries ja existents i algun tros de codi afegit, són
agrupats de forma ordenada en un sol fitxer que constitueix l'executable.
• Entorn: Un entorn integrat de desenvolupament o IDE (acrònim en anglès), és
una eina informàtica per al desenvolupament de programari de manera còmoda i
ràpida. El principal avantatge és que facilita la tasca del programador mentre que
l'inconvenient més important és que pot provocar mals hàbits a l'hora de
programar o provocar errors que a priori començant de zero no es produirien.
• Game Over: "Game Over" de significat fi del joc, és un missatge tradicional en
els videojocs, que generalment assenyala que el joc ha acabat, ja sigui amb
resultat negatiu (és a dir, el jugador no ha pogut completar el joc), o en haver
conclòs exitosament la partida. Va ser utilitzat en primer lloc en les màquines de
pinball i, posteriorment, en jocs d'arcade. Des de llavors ha estat adoptat
àmpliament i ara és comunament associada amb els videojocs en general. No
obstant això, en els últims anys la frase ha estat substituïda en diverses ocasions
per missatges diferents, com ara "Estàs mort" (Resident Evil), "Caçat" (Grand
Theft Auto), o "Bona nit!" (Luigi 's Mansion).
• Gameplay: Veure jugabilitat.
• GCC: La GNU Compiler Collection és un conjunt de compiladors de llenguatges
de programació realitzat pel sistema GNU (GNU's Not Unix). Així doncs, és
programari lliure distribuït per la Free Software Foundation (FSF) sota la
llicència GNU General Public License (GPL), i és un dels components clau de
les eines de GNU. Aquest conjunt de compiladors és l'estàndard per a sistemes
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller VII
operatius de codi lliure similars a Unix (com Linux), i de certs sistemes operatius
propietaris derivats dels primers com podria ser el Mac OS X.
• glitch: En l'àmbit de la informàtica o els videojocs és un error que, en no afectar
negativament al rendiment, la jugabilitat o l'estabilitat del programa o del joc en
qüestió, no es pot considerar un bug, sinó més aviat una "funció no prevista". En
alguns videojocs es poden observar glitches visuals a causa de fitxers mal
codificats o danyats, que en ser llegits formen figures o imatges errònies.
• hardware: El maquinari (en anglès hardware) d'un ordinador és el conjunt de
les seves parts físiques. Es classifica principalment per situació (central o
perifèric) i funció (entrada, sortida, entrada-sortida o emmagatzematge).
• HTML: Acrònim d’Hyper Text Markup Language, en català, "llenguatge de
marcat d'hipertext", és un llenguatge de marcat que deriva de l'SGML dissenyat
per estructurar textos i relacionar-los en forma d'hipertext. Gràcies a Internet i
als navegadors web, s'ha convertit en un dels formats més populars que
existeixen per a la construcció de documents per a la web.
• HUD: En informàtica, principalment en els videojocs, es diu HUD (de l'anglès:
"Heads-Up Display") a la informació que en tot moment es mostra en pantalla
durant la partida, generalment en forma d'icones i números. El HUD sol mostrar
el nombre de vides, punts, nivell de salut i armadura, mini-mapa etc. depenent
del joc.
• IDE: Sigles en anglès de integrated development environment. Veure entorn.
• Intel·ligència artificial (IA): Part de la informàtica, dedicada al desenvolupament
d'algorismes que permet a una màquina (habitualment un ordinador) prendre
decisions intel·ligents o, si més no, comportar-se com si tingués una
intel·ligència semblant a la humana.
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller VIII
• Interfície gràfica d’usuari: GUI de l'anglès Graphic User Interface és la interfície
d'usuari que utilitza elements gràfics que permeten interactuar de forma molt
intuïtiva amb un sistema informàtic que no pas el sistema per la línia d’ordres.
• Intèrpret: A ciències de la computació, intèrpret o interpretador és un programa
informàtic capaç d'analitzar i executar altres programes, escrits en un llenguatge
de alt nivell. Els intèrprets es diferencien dels compilador és que mentre aquests
tradueixen un programa des de la seva descripció en un llenguatge de
programació al codi de màquina del sistema, els primers (els intèrprets) només
fan la traducció a mesura que sigui necessària, típicament, instrucció per
instrucció, i normalment no guarden el resultat d'aquesta traducció.
• Jugabilitat: Terme emprat en el disseny i anàlisi de jocs que descriu la qualitat
del joc en termes de les seves regles de funcionament i del seu disseny com a
joc. Es refereix a totes les experiències d'un jugador durant la interacció amb
sistemes de jocs. La definició estricta de jugabilitat seria allò que fa el jugador.
Una altra definició possible, donada pel famós dissenyador de videojocs Sid
Meier, seria aquesta: La jugabilitat és una sèrie de decisions interessants.
• Llenguatge de programació: Llenguatge informàtic utilitzat per controlar el
comportament d'una màquina, normalment un ordinador. Cada llenguatge té una
sèrie de regles sintàctiques i semàntiques estrictes que cal seguir per escriure un
programa informàtic, i que en descriuen l'estructura i el significat
respectivament. Aquestes regles permeten especificar tant la classe de dades
amb què treballarà el programa com les accions que realitzarà. Mentre que
alguns llenguatges es defineixen per una especificació formal (un document),
altres són definits oficiosament per una implementació concreta (un
compilador).
• Llenguatge multi-plataforma: En informàtica, multi-plataforma, és un atribut
conferit als programes informàtics o als mètodes de càlcul i als conceptes que
s'executen en múltiples plataformes informàtiques.
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller IX
• Llibreria: (correctament dit biblioteca informàtica) Conjunt de subprogrames
utilitzats per desenvolupar programari. Les biblioteques contenen codi i dades
que proporcionen serveis a programes independents, és a dir, passen a formar
part d'aquests. Això permet que el codi i les dades es comparteixin i es puguin
modificar de forma modular.
• MIDI: Acrònim de Musical Instrument Digital Interface (interfície digital
d'instruments musicals) és un estàndard tècnic de comunicació entre equips
musicals electrònics utilitzat en informàtica musical que permet l'intercanvi
d'informació entre diversos equips musicals connectats i també entre aquests i un
ordinador personal. Els fitxers que contenen informació midi tenen l'extensió
".mid" i generalment ocupen poc espai en memòria. La informació MIDI pot fer
referència a notes particulars, identificar bancs i sons) de sintetitzadors, valors
de diferents paràmetres de control (velocitat, modulació, tonalitat...), entre altres.
• MMORPG: Els MMORPG (Massively Multiplayer Online Role-Playing Games),
són, com indica el seu nom en anglès, videojocs de rol multijugador massius
jugats per Internet.
• MP3: Format d'àudio digital basat en la compressió amb pèrdues, desenvolupat
pel grup d'experts Media Picture Group (MPEG) i descrit per una norma ISO.
• Multimèdia: Sistema que utilitza més d'un mitjà de comunicació al mateix temps
en la presentació de la informació, com el text, la imatge, l'animació, el vídeo o
el so. Podem qualificar com a multimèdia, a més a més, els mitjans, electrònics
o d'altra mena, que permetin presentar i emmagatzemar contingut multimèdia.
• Ordre: A informàtica, una ordre és una directiva o instrucció que l'usuari
proporciona al sistema, des de la línia d'ordres o directament cridant al
programa, el qual generalment està contingut en un arxiu executable.
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller X
• pathfinding: Traçat per una aplicació
d'ordinador, del camí més curt entre dos punts.
Aquesta àrea de recerca està basada
principalment en el Algorisme de Dijkstra per
a la recerca de la ruta més curta.
• Pedaç: En informàtica, un pedaç (de l'anglès patch) és un petit tros de
programari dissenyat per actualitzar o arreglar els problemes d'un programa
informàtic. Això inclou arreglar errors del programa, reemplaçar gràfics o
millorar la utilitat o el rendiment. Tot i que estan dissenyats per arreglar
problemes, alguns pedaços mal dissenyats poden introduir nous problemes.
• Perifèric: Dispositiu que, tot i formar part de l'ordinador, es troba fora del
contenidor principal (anomenat "caixa" o "torre"). Actualment també es fa
referència com a perifèrics els dispositius que, tot i estar inclosos dins d'aquesta
caixa són elements complementaris al funcionament bàsic de l'ordinador. És el
cas d'alguns dispositius inclosos en ordinadors portàtils, com el monitors, el
teclat, el ratolí, càmeres web, etc.
• Perspectiva isomètrica: Cert nombre de videojoc es posa en acció als seus
personatges utilitzant un punt de vista en perspectiva isomètrica, o millor dit, en
l'argot usual, a "perspectiva 3/4". Des d'un angle pràctic, això permet desplaçar
els elements gràfics sense modificar la mida, limitació inevitable per ordinadors
amb baixa capacitat gràfica.
• Plataforma: 1. Estructura, ja sigui de programari o de maquinari, que permet a
un programari ésser executat. Les plataformes de programari més famoses són la
plataforma Java i la plataforma Microsoft .NET. La plataforma de maquinari
més famosa és la combinació de X86 amb els sistemes operatius Windows, Linux
o Mac OS X.
2. Els videojocs de plataformes, o simplement plataformes, són un gènere de
videojocs en el qual cal caminar, saltar-se o escalar sobre una sèrie de
Rutes equivalents entre A i B en un entorn 2D.
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller XI
plataformes i penya-segats, amb enemics, mentre es recullen objectes per a
poder completar el joc. Sol usar scroll horitzontal cap a esquerra o cap a la dreta.
És un gènere molt popular de videojocs creat en els primers anys 80 i que
continua mantenint bastant de popularitat en l'actualitat.
• Programació orientada a objectes o POO: L'orientació a objectes és un
paradigma de programació en què tot es basa en objectes. Un objecte és un tipus
abstracte de dades que encapsula (amaga) tant les dades necessàries com les
funcions per accedir-hi.
• RAM: De l'anglès Random Access Memory (Memòria d'Accés Aleatori), és un
tipus de memòria informàtica, caracteritzat per un accés directe en qualsevol
ordre (aleatori) en un temps constant, sense distinció de la posició on es trobi la
informació ni de la posició de l'anterior lectura. Actualment es produeixen
mitjançant circuits integrats. L'expressió "Memòria RAM" s'utilitza sovint per a
referir-se als mòduls de memòria.
• Requeriment: En enginyeria, un requisit (o requeriment) és una necessitat
singular documentada de què un determinat producte o servei ha de ser o fer. És
més comunament usat en un sentit formal en enginyeria de sistemes, enginyeria
del programari o enginyeria empresarial. És una declaració que identifica un
atribut necessari, capacitat, característica, o qualitat d'un sistema perquè tingui
valor i utilitat per a un usuari.
• RPG (Role Play Game): Un joc de rol és un joc que es basa en la descripció
d'una situació fictícia i on els jugadors poden canviar els esdeveniments de la
narració pel fet que controlen les accions conscients d'alguns dels personatges
del joc. Normalment es juga entre dues o més persones, una de les quals
assumeix el paper de director de joc mentre la resta assumeixen el control d'un
personatge. Tot i que es pot deixar a decisió del director les qüestions d'atzar, és
usual utilitzar sistemes estadístics per augmentar el realisme o imparcialitat de
les decisions preses pels jugadors.
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller XII
• script: En informàtica arxiu d'ordres, vulgarment referit amb el barbarisme script
(del llatí scriptum, escrit), és un programa normalment simple, que regularment
s'emmagatzema en un arxiu de text pla. Els scripts són gairebé sempre
interpretats, però no tot programa interpretat és considerat un script. El seu ús
habitual és realitzar diverses tasques com combinar components, interactuar amb
el sistema operatiu o amb l'usuari.
• Servidor: Sistema que proporciona serveis a altres sistemes informàtics
(anomenats clients) dins d'una xarxa informàtica, usant l'arquitectura client-
servidor. El terme pot fer referència a una màquina (per exemple un ordinador
que conté una web) o a un tipus de programari (com per exemple un programari
de base de dades).
• Sistema operatiu: Conjunt dels diferents programes que controlen el
funcionament d'un ordinador. Les seves funcions, entre d'altres, consisteixen a
gestionar les transferències d'informació internes, procurar la comunicació de
l'ordinador amb els operadors, controlar l'execució dels programes amb la
detecció dels errors, encadenar automàticament les feines, optimitzar els
recursos (memòria, unitat aritmètica, etc), carregar i descarregar automàticament
els programes en funció de l'espai de memòria i dels diferents perifèrics.
• smartphone: Un telèfon intel·ligent, també anomenat smartphone, és un telèfon
mòbil amb capacitats d'ordinador de butxaca que compta amb un sistema
operatiu capaç d'instal·lar aplicacions mòbils. Això li permet realitzar múltiples
funcions: accés a Internet, agenda electrònica, gestió del correu electrònic,
videojocs, xarxes socials, etc.
• software testing: Les proves de programari o proves de software és un procés o
investigació dut a terme per a proporcionar als responsables d'un producte o
servei informació sobre qualitat del producte o servei que s'està provant.
• software: El programari (software, en anglès) és el conjunt dels programes
informàtics, procediments i documentació que fan alguna tasca en un ordinador.
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller XIII
Comprèn el conjunt sistemàtic dels programes d’explotació i dels programes
informàtics que serveixen per a aplicacions determinades.
• sprite: Element gràfic que es pot desplaçar sobre la pantalla. En principi, un
sprite és parcialment transparent, i pot ser animat (és a dir, és format de diversos
mapes de bits que apareixen uns sobre els altres). El fons de la pantalla
constitueix generalment l'escenari i els sprites són els personatges i objectes que
se superposen al fons de la pantalla i que es desplacen. Un sprite també pot de
vegades passar darrere un element del fons de la pantalla.
• Storyboard: Representació il·lustrada d’una pel·lícula abans de la seva
realització. És un document tècnic format un conjunt de vinyetes o
d’il·lustracions mostrades en seqüència amb l’objectiu de servir de guia per
entendre una història, previsualitzar una animació o seguir l’estructura d’una
pel·lícula en la reproducció, acompanyades generalment del text dels diàlegs o
de la veu en off i d’altres anotacions tècniques relatives als efectes sonors o
visuals.
• Suport: Conjunt de maquinari i software que permet executar programes
determinats.
• tile: Part gràfica de cada videojoc que pot ser utilitzada per a completar parts
d'un fons per mitjà d'un tileset (conjunt de tiles). Cada tile és diferent i
bàsicament de la mateixa mida, en els videojocs els tiles estan col·locats en un
tileset. Cada tileset tindrà la combinació bàsica de certs llocs del joc, muntanyes,
llacs, boscos, etc.
• Versió: nom o número únic que se li assigna a
un software per indicar el seu nivell de
desenvolupament i d'actualització.
Generalment s'assigna dos nombres,
mayor.menor (en anglès: major.minor), que
van incrementant a mesura que el
El primer número de la versió designa la variant (línia d'evolució), i el segon la versió particular (revisió) al llarg d'aquesta variant.
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller XIV
desenvolupament del programari augmenti i es requereixi l'assignació d'un nou
nom o número únic. Encara que sigui menys habitual, també pot indicar un altre
número més, micro, i la fase de desenvolupament en què es troba el programari.
• WAV: (o WAVE, Waveform audio format) Format d'àudio digital normalment
sense compressió de dades, desenvolupat i propietat de Microsoft i d'IBM, que
s'utilitza per a emmagatzemar àudio en el PC, admet arxius mono i estèreo a
diverses resolucions i velocitats de mostreig, la seva extensió és “.wav”.
• workspace: En informàtica, espai (carpeta) on es guarden tots els arxius d’un
projecte.
Com s’ha pogut comprovar moltes de les paraules d’aquest glossari estan en anglès ja
que és la llengua oficial per el camp de la informàtica.
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller XV
ANNEX B: PROGRAMES UTILITZATS
Els instal·ladors de tots els programes (i les versions portables en alguns) es troben a la
carpeta “Programes” del CD adjunt al treball. Per la realització dels diagrames de flux
que apareixen a la part de “La programació” del apartat “2.2.1. La producció” s’ha
utilitzat l’editor de diagrames Dia gratuït i en castellà. Els tres diagrames de flux que
apareixen al treball es troben a la carpeta “Diagrames” del CD com a imatges de mapa
de bits (“.bmp”) i com a fitxers “.dia” propis del programa utilitzats per crear-los.
L’instal·lador d’aquest programa es pot descarregar l’última versió des de la pàgina
oficial del producte: http://dia-installer.de/; o des de Softonic: http://dia.softonic.com/.
Per la creació del videojoc s’ha utilitzat l’entorn de desenvolupament Dev-C++ que es
pot descarregar l’instal·lador de la versió utilitzada (5.5.3) a
http://orwelldevcpp.blogspot.com.es/2013/11/dev-c-553-released.html o l’última versió
disponible a http://orwelldevcpp.blogspot.com.es/ o des de Softonic: http://dev-
c.softonic.com/. L’instal·lador de la versió 5.5.3 es pot trobar al CD.
Per l’edició d’imatges s’ha utilitzat l’editor Microsoft Paint present a tots els ordinadors
amb sistema operatiu Windows. També s’ha utilitzat l’editor d’imatges GIMP que es pot
descarregar gratuïtament des de la pàgina oficial del producte http://www.gimp.org/ o
des de Softonic http://the-gimp.softonic.com/. L’instal·lador del GIMP està dins del CD.
Per l’edició del so i la música del videojoc s’ha utilitzat el programa Audacity el qual es
pot descarregar a http://audacity.sourceforge.net/?lang=es o des de Softonic
http://audacity.softonic.com/. L’instal·lador del programa Audacity també est`s dins del
CD adjunt al treball.
Encara que per aquest treball no s’hagi utilitzat alguns dels següents programes però si
se n’hagi parlat, l’entorn Code::Blocks es pot instal·lar des del CD o des d’Internet a
http://www.codeblocks.org/ o a http://code-blocks.softonic.com/. El tercer entorn, el
Microsoft Visual Studio Express 2013 (gratuït) es pot instal·lar descarregant
l’executable des de http://www.visualstudio.com/es-es/products/visual-studio-express-
vs.aspx o executant l’instal·lador que hi ha al CD.
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller XVI
ANNEX C: CODIS DEL VIDEOJOC “Tiverton”
A continuació es mostren només alguns codis del videojoc “Tiverton” degut a la gran
extensió que ocupa tot el projecte. Es poden trobar tots els codis en PDF al CD adjunt. tiverton.dev -> main.cpp 1: //Main program 2: #include "globals.h" 3: 4: #include "init.h" 5: #include "game_loop.h" 6: #include "shutdown.h" 7: #include "abort_game.h" 8:
9: int main(int argc, char* argv[]) 10: { 11: try { 12: init(); 13: game_loop(); 14: shutdown(); 15: }catch(...) { 16: abort_game(); 17: } 18:
19: return EXIT_SUCCESS; 20: } 21:
tiverton.dev -> init.cpp 1: #include "init.h" 2:
3: void restorePevResolution() 4: { 5: ChangeDisplaySettings(&predm, CDS_UPDATEREGISTRY); 6: } 7:
8: void init() 9: { 10: if(initz) return; 11:
12: if (!al_init()) abort_game(); 13: al_inhibit_screensaver(true); 14:
15: if (!al_install_keyboard()) abort_game(); 16:
17: if (!al_init_acodec_addon()) abort_game(); 18: if (!al_install_audio()) abort_game();
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller XVII
19: if (atexit(al_uninstall_audio) != 0) abort_game(); 20:
21: if (!al_init_image_addon()) abort_game(); 22: if (!al_init_primitives_addon()) abort_game(); 23:
24: al_init_font_addon(); 25: if (!al_init_ttf_addon()) abort_game(); 26:
27: const unsigned char FPS = 60; 28:
29: timer = al_create_timer(1.0 / FPS); 30: if (!timer) abort_game(); 31:
32: windowWidth = 1280; 33: windowHeight = 720; 34:
35: al_set_new_display_flags(ALLEGRO_NOFRAME); 36:
37: screenWidth = GetSystemMetrics(SM_CXSCREEN); 38: screenHeight = GetSystemMetrics(SM_CYSCREEN); 39:
40: memset(&predm, 0, sizeof(DEVMODE)); 41: predm.dmSize = sizeof(DEVMODE); 42: predm.dmPelsWidth = screenWidth; 43: predm.dmPelsHeight = screenHeight; 44: predm.dmFields = DM_BITSPERPEL|DM_PELSWIDTH|DM_PELSHEIGHT|DM_DISPLAYFREQUENCY; 45:
46: DEVMODE dm; 47: memset(&dm, 0, sizeof(DEVMODE)); 48: dm.dmSize=sizeof(DEVMODE); 49: dm.dmPelsWidth = windowWidth; 50: dm.dmPelsHeight = windowHeight; 51: dm.dmFields = DM_BITSPERPEL|DM_PELSWIDTH|DM_PELSHEIGHT|DM_DISPLAYFREQUENCY; 52:
53: VirtualLoad::updateMaps(); 54:
55: al_add_new_bitmap_flag(ALLEGRO_VIDEO_BITMAP); 56: al_add_new_bitmap_flag(ALLEGRO_MIN_LINEAR); 57: al_add_new_bitmap_flag(ALLEGRO_MAG_LINEAR); 58: al_set_new_bitmap_format(ALLEGRO_PIXEL_FORMAT_ANY_32_WITH_ALPHA); 59:
60: ALLEGRO_BITMAP *tempicon = al_load_bitmap("data/logo/icons/icon.png"); 61: if(!tempicon) abort_game(); 62:
63: if(screenWidth != windowWidth || screenHeight != windowHeight){ 64: bool finsihCheck = false; 65: for(int i = 0; i < al_get_num_display_modes() && !finsihCheck; i++){ 66: ALLEGRO_DISPLAY_MODE mode;
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller XVIII
67: if(al_get_display_mode(i, &mode)){ 68: if(mode.width == windowWidth && mode.height == windowHeight){ 69: if(atexit(restorePevResolution) == 0){ 70: ChangeDisplaySettings(&dm,
CDS_UPDATEREGISTRY); 71: screenWidth = GetSystemMetrics(SM_CXSCREEN); 72: screenHeight =
GetSystemMetrics(SM_CYSCREEN); 73: finsihCheck = true; 74: } 75: } 76: } 77: } 78: } 79: display = al_create_display(screenWidth, screenHeight); 80: if (!display) abort_game(); 81: al_set_window_title(display, "Tiverton"); 82: al_set_display_icon(display, tempicon); 83: al_hide_mouse_cursor(display); 84: al_destroy_bitmap(tempicon); 85:
86: buffer = al_create_bitmap(windowWidth, windowHeight); 87: if (!buffer) abort_game(); 88:
89: al_set_target_bitmap(buffer); 90: al_clear_to_color(al_map_rgb_f(0, 0, 0)); 91:
92: mylogo0 = al_load_bitmap("data/logo/staticlogos/logo0.png"); 93: if (!mylogo0) abort_game(); 94:
95: mylogo1 = al_load_bitmap("data/logo/staticlogos/logo1.png"); 96: if (!mylogo1) abort_game(); 97:
98: event_queue = al_create_event_queue(); 99: if (!event_queue) abort_game(); 100:
101: al_register_event_source(event_queue, al_get_keyboard_event_source()); 102: al_register_event_source(event_queue, al_get_timer_event_source(timer)); 103: al_register_event_source(event_queue, al_get_display_event_source(display)); 104:
105: voice = al_create_voice(44100, ALLEGRO_AUDIO_DEPTH_INT16, ALLEGRO_CHANNEL_CONF_2); 106: if(!voice) abort_game(); 107:
108: mixer = al_create_mixer(44100, ALLEGRO_AUDIO_DEPTH_FLOAT32, ALLEGRO_CHANNEL_CONF_2);
109: if(!mixer) abort_game(); 110:
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller XIX
111: if(!al_set_default_mixer(mixer)) abort_game(); 112:
113: if(!al_attach_mixer_to_voice(mixer, voice)) abort_game(); 114:
115: msouback = al_load_sample("data/menu/back.wav"); 116: if(!msouback) abort_game(); 117:
118: msoumove = al_load_sample("data/menu/move.wav"); 119: if(!msoumove) abort_game(); 120:
121: msouclick = al_load_sample("data/menu/click.wav"); 122: if(!msouclick) abort_game(); 123:
124: mymenu = new Menu(); 125: if(!mymenu) abort_game(); 126:
127: pcgame = new Game(); 128: if(!pcgame) abort_game(); 129: 130:
131: extratpass = 0.0; 132:
133: done = false; 134: initz = true; 135: } 136:
tiverton.dev -> includes.h 1: //C++ libraries 2: #include <cstdlib> 3: #include <cfloat> 4: #include <climits> 5: #include <cmath> 6: #include <vector> 7: #include <map> 8: #include <algorithm> 9: #include <string> 10: #include <sstream> 11: #include <ctime> 12: #include <cstdio> 13: 14: //Extended maths 15: #include "Maths.h" 16: #include "Func.h" 17: 18: //Allegro 5 libraries 19: #define ALLEGRO_STATICLINK 20: #include <allegro5/allegro.h> 21: #include <allegro5/allegro_native_dialog.h> 22: #include <allegro5/allegro_audio.h> 23: #include <allegro5/allegro_acodec.h> 24: #include <allegro5/allegro_image.h> 25: #include <allegro5/allegro_memfile.h> 26: #include <allegro5/allegro_primitives.h> 27: #include <allegro5/allegro_ttf.h>
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller XX
28: 29: //Display 30: #include "MyDisplay.h" 31: 32: //Load virtual files 33: #include "VirtualLoad.h" 34: 35: //Level code 36: #include "Level.h" 37: 38: //Configuring the use of C + + standard library 39: using namespace std; 40: 41: 42: //Enum keys statement 43: #ifndef ENUM_KEYS_G 44: #define ENUM_KEYS_G 45:
46: enum Keys { 47: KEY_SPACE, 48: KEY_LEFT, 49: KEY_RIGHT, 50: KEY_UP, 51: KEY_DOWN, 52: NUM_REG_KEYS
53: }; 54: 55: #endif 56: 57: 58: //Enum menu sounds statement 59: #ifndef ENUM_MSOU_G 60: #define ENUM_MSOU_G 61:
62: enum Msou { 63: CLICK, 64: MOVE, 65: BACK
66: }; 67: 68: #endif 69: 70: 71: #ifndef GENERALDATA_H 72: #define GENERALDATA_H 73:
74: typedef struct GeneralData { 75: unsigned char lifes; 76: unsigned char hearts; 77: unsigned short coins; 78: unsigned long lscore; 79: unsigned char rtime; 80: bool levelstoped; 81: bool dead; 82: } GeneralData; 83:
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller XXI
84: #endif 85: 86: 87: //Globalization 88: #ifndef GLOB_G 89: #define GLOB_G 90: 91: #include "Menu.h" 92: #include "Game.h" 93:
94: extern ALLEGRO_SAMPLE *msouback, *msoumove, *msouclick; 95: extern Menu* mymenu; 96: extern Game* pcgame; 97: extern double extratpass; 98: extern GeneralData GData; 99: extern bool done, initz; 100: extern vector<bool> key, notCheckKey; 101:
102: extern ALLEGRO_BITMAP *mylogo0, *mylogo1; 103:
104: extern ALLEGRO_TIMER* timer; 105: extern ALLEGRO_EVENT_QUEUE* event_queue; 106: extern ALLEGRO_BITMAP* buffer; 107: extern ALLEGRO_VOICE* voice; 108: extern ALLEGRO_MIXER* mixer; 109: extern ALLEGRO_DISPLAY* display; 110:
111: extern unsigned short screenWidth, screenHeight, windowWidth, windowHeight; 112: extern DEVMODE predm; 113:
114: extern void abort_game(); 115: extern void paint(); 116: extern void checkKeysWhenSwitchIn(); 117: 118: #endif 119:
tiverton.dev -> game_loop.cpp 1: #include "game_loop.h" 2:
3: void paint() 4: { 5: al_set_target_bitmap(al_get_backbuffer(display)); 6: al_draw_scaled_bitmap(buffer, 0, 0, windowWidth, windowHeight, 0, 0, screenWidth,
screenHeight, 0); 7: al_flip_display(); 8: al_set_target_bitmap(buffer); 9: al_clear_to_color(al_map_rgb(0, 0, 0)); 10: }
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller XXII
11: --------------- 96:
97: void game_loop(void) 98: { 99: if (!initz) abort_game(); 100: if (!al_is_system_installed()) abort_game(); 101: if (!al_is_keyboard_installed()) abort_game(); 102: if (!al_is_audio_installed()) abort_game(); 103:
104: paint(); 105: if(!logo()) abort_game(); 106:
107: do { 108: done = mymenu‐>playMenu(); 109:
110: if(!done){ 111: al_clear_to_color(al_map_rgb_f(0, 0, 0)); 112: paint(); 113: al_rest(0.2); 114:
115: al_start_timer(timer); 116: if (!al_get_timer_started(timer)) abort_game(); 117:
118: extratpass = 0.0; 119:
120: al_flush_event_queue(event_queue); 121: pcgame‐>enteringLoop(mymenu‐>getGamePart()); 122: al_flush_event_queue(event_queue); 123: } 124:
125: bool redraw = true; 126:
127: while (!done && pcgame‐>isPlaying()) { 128: ALLEGRO_EVENT event; 129: al_wait_for_event(event_queue, &event); 130:
131: switch (event.type) { 132: case ALLEGRO_EVENT_TIMER: ---------------
148: redraw = true; 149: pcgame‐>update_logic(‐extratpass); 150: extratpass = 0.0; 151: break; 152:
153: case ALLEGRO_EVENT_KEY_DOWN: 154: pcgame‐>get_user_input(event.keyboard.keycode, true); 155: break; 156:
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller XXIII
157: case ALLEGRO_EVENT_KEY_UP: ---------------
165: else pcgame‐>get_user_input(event.keyboard.keycode, false);
166: break; 167:
168: case ALLEGRO_EVENT_DISPLAY_SWITCH_OUT: 169: pcgame‐>in_game(false); 170: break; 171:
172: case ALLEGRO_EVENT_DISPLAY_SWITCH_IN: 173: checkKeysWhenSwitchIn(); 174: pcgame‐>in_game(true); 175: break; 176: } 177:
178: if (redraw && al_is_event_queue_empty(event_queue)) { 179: redraw = false; 180: pcgame‐>update_graphics(); 181: paint(); 182: } 183: } 184: al_stop_timer(timer); 185: if (al_get_timer_started(timer)) abort_game(); 186:
187: al_flush_event_queue(event_queue); 188: 189:
190: al_set_target_bitmap(buffer); 191: al_clear_to_color(al_map_rgb_f(0, 0, 0)); 192: paint(); 193: al_rest(done ? 0.1 : 0.2); 194: } while(!done); 195: } 196:
tiverton.dev -> Life.cpp 1: #include "Life.h" 2:
3: bool Life::slifeloaded = false; 4: vector<Life*> Life::staticLifes; 5: ALLEGRO_BITMAP *Life::life; 6: float Life::lifeRadius; 7:
8: void Life::loadLife(){ 9: if(slifeloaded) return; 10:
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller XXIV
11: life = al_load_bitmap("data/spritelib/intlife.png"); 12: if(!life) abort_game(); 13:
14: lifeRadius = (float)(((double)(al_get_bitmap_width(life) + al_get_bitmap_height(life)))/4.0);
15: 16:
17: slifeloaded = true; 18: } 19:
20: Life::Life(int _cx, int _cy){ 21: if(!slifeloaded) abort_game(); 22:
23: if(!pcgame‐>isRepeatingLvl()){ 24: cx = _cx; 25: cy = _cy; 26:
27: visible = true; 28: caught = false; 29:
30: alpha = 1.0; 31:
32: staticLifes.push_back(this); 33: } 34: } 35:
36: void Life::clean(){ 37: if(!pcgame‐>isRepeatingLvl()){ 38: for(int i = 0; i < staticLifes.size(); i++) delete staticLifes[i]; 39: staticLifes.clear(); 40: } 41: loadLife(); 42: } 43:
44: bool Life::checkThisCollision(){ 45: if(Player::circularCollision(cx, cy, (int)(lifeRadius ‐ 3))){ 46: caught = Level::addLife(); 47: } 48:
49: return caught; 50: } 51:
52: void Life::changeAlpha(float tpas){ 53: alpha ‐= 200.0 * (((1/(alpha*alpha))‐0.95)/16) * tpas; 54:
55: if(alpha <= 0.0){ 56: alpha = 0.0; 57: visible = false;
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller XXV
58: } 59: } 60:
61: bool Life::checkAllCollisions(float tpas){ 62: if(!slifeloaded) abort_game(); 63: bool oneCollision = false; 64: for(int i = 0; i < staticLifes.size(); i++){ 65: if(!GData.dead) if(!staticLifes[i]‐>caught &&
staticLifes[i]‐>checkThisCollision()) oneCollision = true;
66: if(staticLifes[i]‐>visible && staticLifes[i]‐>caught) staticLifes[i]‐ >changeAlpha(tpas);
67: if(!staticLifes[i]‐>visible){ 68: delete staticLifes[i]; 69: staticLifes.erase(staticLifes.begin() + (i‐‐)); 70: } 71: } 72: return oneCollision; 73: } 74:
75: void Life::tPaint(){ 76: if(!slifeloaded) abort_game(); 77: for(int i = 0; i < staticLifes.size(); i++){ 78: if(!staticLifes[i]‐>visible) continue; 79: MyDisplay::my_draw_tinted_bitmap(life,
al_map_rgba_f(1.0*staticLifes[i]‐>alpha, 1.0*staticLifes[i]‐>alpha, 1.0*staticLifes[i]‐>alpha, staticLifes[i]‐>alpha), (float)staticLifes[i]‐>cx ‐ lifeRadius, (float)staticLifes[i]‐>cy ‐ lifeRadius, 0);
80: } 81: } 82:
tiverton.dev -> Maths.cpp 1: #include "Maths.h" 2:
3: double Maths::distancePointToPoint(int ax, int ay, int bx, int by){ 4: return sqrt((bx ‐ ax) * (bx ‐ ax) + (by ‐ ay) * (by ‐ ay)); 5: } 6:
7: bool Maths::detectCollisionRectRect(int cxi, int cyi, int cxf, int cyf, int dxi, int dyi, int dxf, int dyf){ 8: vector<int> tempv(4); 9: if(!(cxi == dxi || cxi == dxf || cxf == dxi || cxf == dxf)){ 10: tempv[0] = cxi; 11: tempv[1] = cxf;
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller XXVI
12: tempv[2] = dxi; 13: tempv[3] = dxf; 14: sort(tempv.begin(), tempv.end()); 15: if((tempv[0] == cxi && tempv[1] == cxf) || (tempv[0] == dxi && tempv[1] == dxf))
return false; 16: } 17:
18: if(!(cyi == dyi || cyi == dyf || cyf == dyi || cyf == dyf)){ 19: tempv[0] = cyi; 20: tempv[1] = cyf; 21: tempv[2] = dyi; 22: tempv[3] = dyf; 23: sort(tempv.begin(), tempv.end()); 24: if((tempv[0] == cyi && tempv[1] == cyf) || (tempv[0] == dyi && tempv[1] == dyf))
return false; 25: } 26:
27: return true; 28: } 29:
30: bool Maths::getXPointCircleRectY(double & x1, double & x2, int y, int cx, int cy, int r){ 31: int dis = r*r‐(y‐cy)*(y‐cy); 32: if(dis < 0) return false; 33: x1 = x2 = cx; 34: x1 += sqrt(dis); 35: x2 ‐= sqrt(dis); 36: return true; 37: } 38:
39: bool Maths::getYPointCircleRectX(int x, double & y1, double & y2, int cx, int cy, int r){ 40: int dis = r*r‐(x‐cx)*(x‐cx); 41: if(dis < 0) return false; 42: y1 = y2 = cy; 43: y1 += sqrt(dis); 44: y2 ‐= sqrt(dis); 45: return true; 46: } 47:
48: bool Maths::detectCollisionRectCircle(int rxi, int ryi, int rxf, int ryf, int cx, int cy, int r){ 49: double a, b; 50: if(getXPointCircleRectY(a, b, ryi, cx, cy, r)){ 51: if(((int)a >= rxi && (int)a <= rxf) || ((int)b >= rxi && (int)b <= rxf)) return true; 52: } 53:
54: if(getXPointCircleRectY(a, b, ryf, cx, cy, r)){
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller XXVII
55: if(((int)a >= rxi && (int)a <= rxf) || ((int)b >= rxi && (int)b <= rxf)) return true; 56: } 57:
58: if(getYPointCircleRectX(rxi, a, b, cx, cy, r)){ 59: if(((int)a >= ryi && (int)a <= ryf) || ((int)b >= ryi && (int)b <= ryf)) return true; 60: } 61:
62: if(getYPointCircleRectX(rxf, a, b, cx, cy, r)){ 63: if(((int)a >= ryi && (int)a <= ryf) || ((int)b >= ryi && (int)b <= ryf)) return true; 64: } 65:
66: return false; 67: } 68:
69: bool Maths::detectCollisionRectXSegment(int rxi, int ryi, int rxf, int ryf, int xseg, int yixseg, int yfxseg){ 70: return ((xseg >= rxi && xseg <= rxf) && ((ryi >= yixseg && ryi <= yfxseg) || (ryf >=
yixseg && ryf <= yfxseg) || ((ryi < yixseg && ryi < yfxseg) && (ryf > yixseg && ryf > yfxseg))));
71: } 72:
73: bool Maths::detectCollisionRectYSegment(int rxi, int ryi, int rxf, int ryf, int yseg, int xiyseg, int xfyseg){ 74: return ((yseg >= ryi && yseg <= ryf) && ((rxi >= xiyseg && rxi <= xfyseg) || (rxf >=
xiyseg && rxf <= xfyseg) || ((rxi < xiyseg && rxi < xfyseg) && (rxf > xiyseg && rxf > xfyseg))));
75: } 76:
77: bool Maths::detectCollisionSegmXSegment(int poxi, int poyi, int poxf, int poyf, int xseg, int yixseg, int yfxseg){ 78: if(poxf < poxi){ 79: swap(poxi, poxf); 80: swap(poyi, poyf); 81: } 82: if(xseg < poxi || xseg > poxf) return false; 83: int a = poxf ‐ poxi; 84: if(a == 0) return (poxi == xseg && ((poyi >= yixseg && poyi <= yfxseg) || (poyf >=
yixseg && poyf <= yfxseg) || (poyf >= yixseg && poyi <= yixseg))); 85: int y = (int)(((double)((poyf ‐ poyi)*xseg + (poxf*poyi‐poxi*poyf)))/((double)a)); 86: return (y >= yixseg && y <= yfxseg); 87: } 88:
89: bool Maths::detectCollisionSegmYSegment(int poxi, int poyi, int poxf, int poyf, int yseg, int xiyseg, int xfyseg){ 90: int a = poyf ‐ poyi; 91: if(a == 0) return (poyi == yseg);
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller XXVIII
92: int x = (int)(((double)((poxf ‐ poxi)*yseg ‐ (poxf*poyi‐poxi*poyf)))/((double)a)); 93: return (x >= xiyseg && x <= xfyseg); 94: } 95:
Al CD hi ha tots els arxius de codi C++ (“.cpp”, “.h” i “.rc”) i aquests mateixos arxius
en PDF. A part del codi també hi és present tot el videojoc desenvolupat fins al moment
(imatges, música, etc.)
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller XXIX
ANNEX D: CODIS DEL PROGRAMA “makeUpdateMaps”
A continuació les línies de codi del fitxer “main.cpp” que formen el programa
“makeUpdateMaps”. Veieu l’apartat “2.3.2. Incorporació d’arxius multimèdia al fitxer
final” per veure l’ús d’aquest programa. Al CD es pot trobar aquest programa i un PDF. makeUpdateMaps.dev -> main.cpp 1: #include <cstdio> 2: #include <cstdlib> 3: #include <iostream> 4: #include <sstream> 5: #include <fstream> 6: #include <string.h> 7: 8: #include <sys/stat.h> 9: #include <dirent.h> 10:
11: using namespace std; 12:
13: int n = 0; 14:
15: void addUpdateMapN(string filename){ 16: string *str = new string(filename); 17: string extension = str‐>substr(str‐>find_last_of(".")); 18: delete str; 19: if(filename[0] == '.') filename = filename.substr(1); 20: if(filename[0] == '/') filename = filename.substr(1); 21:
22: for(int i = 0; i < extension.length(); i++) 23: extension[i] = tolower(extension[i]); 24:
25: const char *file_extension = extension.c_str(); 26: if(strcmp(file_extension, ".ttf") == 0 || strcmp(file_extension, ".wav") == 0 ||
strcmp(file_extension, ".flac") == 0 || strcmp(file_extension, ".ogg") == 0 || strcmp(file_extension, ".it") == 0 || strcmp(file_extension, ".mod") == 0 || strcmp(file_extension, ".s3m") == 0 || strcmp(file_extension, ".xm") == 0 || strcmp(file_extension, ".bmp") == 0 || strcmp(file_extension, ".pcx") == 0 || strcmp(file_extension, ".tga") == 0 || strcmp(file_extension, ".jpeg") == 0 || strcmp(file_extension, ".jpg") == 0 || strcmp(file_extension, ".png") == 0){
27: cout << "Creating element " << n << ": " << filename << endl; 28: ostringstream convert; 29: convert << (unsigned int)n; 30: string extfile = "updateMaps" + convert.str(); 31: string extfile2 = extfile + ".tmp"; 32: string extfile3 = extfile + ".cpp"; 33: string str = "bin2h "; 34: str += '"';
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller XXX
35: str += filename; 36: str += '"'; 37: str += " "; 38: str += '"'; 39: str += extfile2; 40: str += '"'; 41: str += " ‐id=data_" + convert.str() + " ‐ns=virtualdata"; 42: system(str.c_str()); 43: ofstream myfile; 44: ifstream mytfile; 45: mytfile.open(extfile2.c_str()); 46: myfile.open(extfile3.c_str()); 47: myfile << "#include " << '"' << "updateMaps.h" << '"' << "\n"; 48: while(getline(mytfile, str)) myfile << str << "\n"; 49: mytfile.close(); 50: remove(extfile2.c_str()); 51: myfile << "\nvoid updateMaps::" + extfile + "(map<string, unsigned char*> &
media_data, map<string, size_t> & media_data_size){\n"; 52: myfile << "\tunsigned char *data_pointer = virtualdata::data_" + convert.str() +
";\n"; 53: myfile << "\tstring fileid = string("; 54: myfile << '"' + filename + '"'; 55: myfile << ");\n"; 56: myfile << "\tmedia_data_size[fileid] = virtualdata::data_" + convert.str() +
"_len;\n"; 57: myfile << "\tmedia_data[fileid] = data_pointer;\n"; 58: myfile << "}" << endl << endl; 59: myfile.close(); 60: n++; 61: } 62: } 63:
64: void dirAddUpdateMap(string path){ 65: DIR* dir_point = opendir(path.c_str()); 66: dirent* entry; 67: while(entry = readdir(dir_point)){ 68: string fname = entry‐>d_name; 69: if(fname != "." && fname != ".."){ 70: struct stat s; 71: string entn = path + "/" + fname; 72: stat(entn.c_str(), &s); 73: (S_ISDIR(s.st_mode)) ? dirAddUpdateMap(path + "/" + fname) :
addUpdateMapN(path + "/" + fname); 74: }
Curs 2013 - 2014 Creació i desenvolupament d’un videojoc – Guillem Rueda Oller XXXI
75: } 76: } 77:
78: int main(int argc, char* argv[]){ 79: dirAddUpdateMap("."); 80: ofstream myfile, myhfile; 81:
82: myfile.open("updateMaps.cpp"); 83: myfile << "#include " << '"' << "updateMaps.h" << '"' << "\n\n"; 84: myfile << "void updateMaps::updateMapsAll(map<string, unsigned char*> & media_data,
map<string, size_t> & media_data_size){\n"; 85: myhfile.open("updateMaps.h"); 86: myhfile << "#ifndef UPDATEMAPS_H\n#define UPDATEMAPS_H\n\nclass
updateMaps;\n\n#include"; 87: myhfile << '"'; 88: myhfile << "includes.h"; 89: myhfile << '"'; 90: myhfile << "\n\nclass updateMaps {\n"; 91: for(int i = 0; i < n; i++){ 92: ostringstream convert; 93: convert << (unsigned int)i; 94: myfile << "\tupdateMaps" + convert.str() + "(media_data, media_data_size);\n"; 95: myhfile << "\tstatic void updateMaps" + convert.str() + "(map<string, unsigned
char*> & media_data, map<string, size_t> & media_data_size);\n"; 96: } 97: myhfile << "\tpublic:\n\t\tstatic void updateMapsAll(map<string, unsigned char*> &
media_data, map<string, size_t> & media_data_size);\n};\n\n#endif" << endl << endl; 98: myfile << ((n == 0) ? "\t\n" : "") << "}" << endl << endl; 99:
100: myfile.close(); 101: myhfile.close(); 102: return 0; 103: } 104: