Joc 2d i Intel·ligència Artificial - Videojocs (2016)

Apunte Catalán
Universidad Universidad Politécnica de Cataluña (UPC)
Grado Ingeniería Informática - 4º curso
Asignatura Videojocs
Año del apunte 2016
Páginas 6
Fecha de subida 19/03/2016
Descargas 2
Subido por

Descripción

Apunts de jocs 2d i intel·ligència artificial aplicada a videojocs.

Vista previa del texto

JOCS 2D PARALLAX Parlem de parallax scrolling quan tenim diverses capes que es mouen a velocitats diferents. El resultat que obtindrem serà de guanyar profunditat i la seva implementació consisteix, bàsicament, en adaptar la mida i la velocitat a la distància.
Pel que fa al scrolling, si el mapa és tot únic, carregarem només la part que es veu o està apunt de veure's.
PROJECCIONS En aquests tipus de jocs, treballarem amb tres tipus de projeccions: ortogonal, obliqua i isonomètrica. Els incovenients d'aquestes representacions són que poden arribar a representar escenes impossibles, per evitar-ho necessite, 3d.
Obliqua.
Pintem els tiles en un ordre específc: de darrere a endevant. Per decidir què dibuixar, fxem dos punts: la cantonada inferior dreta (ens serveix de base, com en la ortogonal) i la cantonada superior esquerra (tot afegint la diferència entre la mida de la base i la tile – els tiles ocupen més que la base).
Isonomètrica.
Tenint en compte que la càmara està 30º elevada i 45º rotada, el mapejat a pantalla funciona seguint els regles següents: 7 1. Les diagonals es corresponen amb els eixos de la pantalla.
- diagonalX = x – y, - diagonalY = x + y.
2. Les coordenades de pantalla pel tile (x,y) es calculen com: - considerant que la base del tile (0,0) es trobi al píxel (0,0), - pixelX = (x – y) * baseWidth / 2, - pixelY = (x + y) * baseHeight / 2 * baseHeight / 2.
3. Mapejat invers entre les coordenades de la pantalla i els tiles: - fent selecció -> optimitzant (seleccionar només el que es veu).
Es coneixen dos algorismes de pintat: en diamant o en zig-zag. A continuació veiem codis exemple.
DIAMANT ZIG-ZAG Tècniques avançades de combinació de capes: – – – CACHING: prerenderitzant les capes estàtiques i combinant les dinàmiques segons la profunditat (Z) de cada tile (OpenGL).
CULLING: si un tile queda per davant d'un altre (l'oculta), el segon no es pinta.
ELEVATION LAYERS: les capes adicionals es posen de forma que encaixin en altura, caldrà, però, desplaçar el mapejat dels tiles elevats.
SPRITES U n sprite és una sèrie d'imatges 2d que representa una entitat dinàmica del joc, com ara un personatge, projectils, vehicles, etc.
Animació d'sprites.
L'animació dels sprites s'aconsegueix actualitzant quin 8 frame (o imatge) es veu en cada moment segons el moviment, la IA, el motor físic, etc. Per fer aquestes actualitzacions correctament hem de considerar la velocitat del main loop – cada frame té associada una velocitat d'activitat.
A més, les animacions poden ser fxes (si l'sprite no es mou del seu lloc), tenir moviment extern (causat per la simulació física) o tenir un momviment associat (p.e.: caminant). En la darrera opció, l'animació pot ser simple (translació) o completa (translació, rotació i escalat).
Què passa si un sprite mor? – – Si mor perquè desapareix de la pantalla -> eliminar per alliberar memòria.
Si mor perquè ha sigut derrotat -> posar en estat de mort i eliminar gradualment.
Visualització.
Antigament es feia servir el sistema de blitting que consistia en copiar els blocs de memòria que contenien la imatge. Però amb OpenGL o DirectX dibuixem els rectangles texturats (per tant, necessitem les coordenades de textura).
Consideracions de la implentació: – – – Alguns frames potser estan en més d'una animació -> els hem d'aproftar.
Els frames poden trobar-se entremig de més d'una textura.
Un sprite pot tenir: posició genèrica, rotació arbitrària i escalat.
ILUMINACIÓ Treballant en OpenGL o DirectX...: Podrem modular el color de la textura amb el color dels vèrtexs del quadrat i això ens permetrà aplicar il·luminació bàsica -> COM? – Defnim els fonts de llum donant les seves coordenades de world space (x,y).
– Modulem el color del quadrat en funció de la distància del tile o l'sprite a la font.
A més, podem aconseguir una sèrie d'efectes com ara ombres, explosions, substitució de colors segons paletes, etc. A continuació parlem de com aconseguir ombres simples: – – si la llum és a dalt -> podem fer servir un sprite pels elements dinàmics i tenir les ombres preintegrades als tiles si hi ha elements més alts que la llum -> caldrà calcular les ombres (procès complex i difícil d'integrar amb el sistema anterior), una alternativa seria traçar les ombres, però la millor solució és un joc 3d amb lògica 2d.
9 TEXT La visualització de textos pot fer-se per mitjà d'arxius font o bé amb la conversió de fonts a bitmaps (textures). Les alternatives passen per crear les nostres pròpies fonts.
El primer cas és més senzill perquè tots els caràcters es tracten junts. La defnició dels caràcters va per segments i corbes de Bezier. Tractem amb fonts Serif o Sans Serif.
Pel que fa al segon cas, primer de tot, haurem de considerar si utilizem monospace (amplada fxa, més fàcil d'utilitzar) o proportional typeface (amplada variable). Un cop tinguem la textura i la posició dels caràcters, podem visualitzar-los fent un quadrat per caràcter i/o prerenderitzant-los a la textura que farem servir desprès.
GRAPHICAL USER INTERFACE (GUI) Normalment, els jocs necessiten interfícies gràfques (o GUIs), que consisteixen en botons, entrades de text, llistes d'elements, etc.
Quan treballem en les GUIs hem de tenir en compte dos components fonamentals: la gestió d'esdeveniments i la visualització dels elements --> llibreries (CEGUI).
INTEL·LIGÈNCIA ARTIFICIAL ALS VIDEOJOCS En la majoria de jocs, distingim entre personatges jugadors (players) i personatges no-jugadors (Non-Player Characters, NPC). Els segons, necessiten algun mecanisme per determinar el seu comportament --> IA --> oponents intel·ligents --> experiència més rica i diversa pel jugador.
Lluny dels conceptes avançats en investigació de IA, pels videojocs, la intel·ligència es redueix bàsicament a path-fnding, sistemes basats en regles i màquines d'estats fnits. Això és així, per diverses raons: 1. La recerca en IA és molt més cara i costosa, 2. La IA d'un videojoc ha de poder fer trampes (conèixer tot l'espai del joc, tenir habilitats que el jugador no té, resultats favorables en esdeveniments aleatoris, etc.), 3. La complexitat dels jocs pot arribar a ser molt elevada (món no discret, múltiples jugadors, regles complexes, etc.).
PATH-FINDING Els algorismes path-fnding implementen el conjunt de tècniques més senzilles de la IA per jocs.
Del que es tracta és que els NPC sàpiguen com arribar als seus objectius, esquivant obstacles o segons altres factors.
Per a poder buscar camins, primer ens cal representar el món del joc com un graf on els nodes seran els punts 2d ó 3d de l'espai i les arestes signifcaran el veïnatge entre dos punts (si, a més, associem costos a les arestes, això ens serà útil per a trobar camins de longituds determinades). Per generar aquest graf tenim dues opcions: 1. Divisió en cel·les convexes: - Per formes generals, consumim menys memòria - El graf codifcarà l'arquitectura del nivell 2. Discretització en una graella regular: - Graella rectangular (quadrada) o hexagonal - Menys precís per formes generals D'esquerra a dreta: graella regular quadrada, graella regular hexagonal i divisó en cel·les convexes.
10 Una primera opció és l'anomenada tècnica de traçat de contorns. Consisteix en avançar cap a l'objectiu en línia recta, i, si ens trobem un obstacle, reseguirem el seu contorn fns a esquivar-lo.
Tot i això, normalment ens interessarà trobar el camí més curt, és per això que, si el nivell és estàtic podem precalcular una taula amb els camins més curts (fent servir Dijkstra i emmagatzemant el primer pas del camí més curt per a tota casella diferent a la inicial). Aquest mètode té l'avantatge d'assegurar consultes molt ràpides, a més de poder-se combinar amb algorismes de cerca, però d'inconvenients tenim que si hi ha molts nodes a explorar el consum de memòria serà elevat i que requerim que el nivell sigui estàtic.
Algorisme A*.
A* fa servir un heurístic per considerar (a la vegada) la distància del camí mínim a l'origen i la distància euclidea al destí. El principi de funcionament es basa en seleccionar el proper node a considerar segons el que tingui mínima: f(N) = g(N) + h(N), on g(N) és el camí mínim des de l'origen a N, h(N) és el cost estimat de N al destí.
La funció heurística (h) és important que ens retorni una aproximació el més semblant possible al camí mínim de N al destí, o bé, una aproximació que sigui una mica menor, per garantir el bon funcionament de l'algorisme. Així doncs, per a aquesta funció, tenim tres canidadtes: – la distància euclidea – la distància Manhattan – la distància Chebychev Malgrat tot, l'algorisme A* ens seguirà donant complicacions quan tinguem altres NPCs en moviment o estiguem en nivells dinàmics --> Solucions: recalcular parts del camí, desviar al node més proper i defnir regles per quan el bloqueig és causat per altres NPCs (esperar, travessar o esquivar).
Més informació i exemples a: http://theory.stanford.edu/~amitp/GameProgramming/.
IA DETERMINISTA (per a objectes amb comportaments molt simples).
Parlem de IA determinista per referir-nos a comportaments preprogramats amb algorismes bàsics com ara...: – trajectòries fxes (p.e.: de projectils), – moviments aleatoris, – tracking, seguiment d'un objecte (normalment el jugador).
Tipus de tracking.
1. Seguiment directe.
(Jx, Jy): posició jugador (Mx, My): posició NPC MAX_VEL: velocitat màxima NPC Té l'inconvenient de ser massa precís i poc realista, entre d'altres, perquè no té en compte el moviment de l'objectiu.
11 2. Modelant la velocitat de forma gradual.
(Vx, Vy): velocitat jugador I, ara, si substituim (Jx, Jy) per la següent expressió, tindrem en compte el moviment de l'objectiu: (Jx + Vx * ∆t, Jy + Vy * ∆t).
PATRONS DE MOVIMENT I MÀQUINES D'ESTATS Els NPCs segueixen un llistat d'accions (patró de moviment), als quals podem posar extensions com condicions per passar a la següent acció de la llista o determinar el temps d'execució de cadascuna de les accions. A més, també podem defnir un seguir de patrons diferents i escollir quin usar a l'atzar o segons les circumstàncies actuals del joc (multipatrons). A continuació, veiem un exemple sense exencions de patró de moviment únic: (per a objectes amb comportaments complexes i NPCs que no interactuen amb el jugador).
Les màquines d'estats poden ajudar-nos a modelar aquests patrons. Amb màquina d'estats ens referim a automàtes fnits (model matemàtic de computació que es representa com un graf dirigit on els estats són els nodes i les transicions són les causes que provoquen el canvi d'estat, on l'efecte d'una entrada depèn de l'estat actual). Amb les màquines d'estats, tenim menys capacitat de computació que les màquines de Turing, però aconseguim memòria il·limitada.
A la fgura de l'esquerra, veiem un exemple de l'aplicació de màquines d'estats al comportament d'un NPC.
Cada estat representa un comportament i sap processar la informació del seu voltant per executar les possibles transicions.
L'execució d'aquesta màquina es fa durant el joc.
(per a NPCs que interactuen amb el jugador/a).
Tot i això, encara podem perfeccionar una mica més les màquines d'estats, però aleshores necessitarem memòria (fent-la servir com una entrada més), o bé usar màquines d'estats jeràrquiques (on es modelen els estats amb la seva pròpia màquina); una darrera opció són les no deterministes.
(per a NPCs principals o companys del jugador/a).
12 ...