Commando játék Önálló Laboratórium beszámoló
Fehér Antal N8ZEOU
[email protected] 2009-12-18
Tartalomjegyzék Címlap
1
Tartalomjegyzék
2
Bevezetés
3
Specifikáció
4
Fejlesztői környezet
5
Objektumok
6
Funkciók megvalósítása
8
Tesztek
11
Képek a játékból
12
Összegzés, fejlesztési lehetőségek
14
Irodalomjegyzék
15
Bevezetés A mérnöki világban a 3 dimenziós megjelenítés rengeteg területen hasznos és néhány helyen szinte elengedhetetlen. Modellezni ebben a világban és a modellek ezek megjelenítése igen szerteágazó és sokszínű. Ennek egy speciálisabb esete a játékok készítése. A valós világ leképezése, átalakítsa interakciók képzése általában tisztán szórakoztató céllal, de előfordulhatnak olyan szimulációs megoldások is, amikor igenis hasznos dolgot valósít meg a program és segít elsajátítani olyan rutinokat, amiket majd egy valós szerkezettel kell később megvalósítani. Témámként egy egyszerűbb kis FPS (first person shooter) játékot alkottam, ahol egy belső kameranézettel mozoghatok egy pályán és hajthatok végre akciókat.
Specifikáció A játék alapvető objektumai tankok, a játékos a környezet különböző elemei. A játékos célja, hogy az ellenséges tankokat likvidálja és túlélje a pályát. Az irányított karakter szabadon mozoghat a pályának azon részein, ahol nincsenek más objektumok, és az ellenséges tankok is ugyanezzel a szabadsággal élnek. A játékosnak 2 lehetősége van egy ellenséges objektumot ártalmatlanná tenni: a kezdőfelszerelésként kapott bombák egyikével felrobbanthatja, vagy akár el is foglalhatja azt. Egy elfoglalt tankot lehet irányítani, és a megváltozott tulajdonságokkal tovább mozogva a pályán folytatódik a küldetés. Egy tank képes lőni, ha észleli a játékost, akkor elkezdi becélozni és amint elérte a csöve a célt tüzel, ami a játékos halálát, vagyis a játék végét jelenti.
Feladatul tűztem ki egy olyan szimuláció létrehozását, ami a valós viselkedés megközelítésével próbálja lemodellezni a világot és ehhez igazítani az interakciókat.
A kezelőfelületet minél egyszerűbbé tenni, a megszokott gombok használatával.
Fejlesztői környezet A munka első fázisa a megfelelő környezet kiválasztása volt. A piacon található több jól támogatott hasonló célokra fejlesztett grafikus interface amivel a feladatot megoldhattam. A két legelterjedtebb ezek közül az OpenGL és a DirectX. A DirectX-hez készült egy rá épülő extra szolgáltatásokkal ellátott játékokra specializált kiegészítés XNA néven. Mindkét verzióval találkoztam már korábban, de jelentősebb tapasztalatom egyikkel sem volt. Választásomba az segített, hogy amikor elkezdtem kutatni tananyagok után, akkor találtam egy jól használható videókból álló gyűjteményt, aminek elsajátításával végül XNA környezetben készítettem el a programomat. Továbbá újdonság volt még számomra egy 3D-s modell szerkesztő program használata, amivel előállítottam (módosítottam) a világot alkotó objektumok térhálóit és textúráit.
Objektumok Megjelenítésre a kezdésként felsorolt 3 objektumtípusból (játékos, tankok, világ) csupán csak az utóbbi 2 került. Ezeknek kellett egy minél szebb és használhatóbb modelljét illesztenem a játékomba. Keresgélve az interneten találtam közel megfelelő modelleket, amiket kisebb átalakítással már is beilleszthettem a világba. Tank: követelménynek állítottam fel, hogy egy tanknak kinéző (formailag és színben) objektum legyen és külön hálóval reprezentálja az alapját és a csővel együtt a tetejét, hogy azután ezt külön mozgatva lehessen mozgatni, ezáltal célra vinni. Az alábbi modellt választottam:
Világ: követelményként állítottam fel, hogy a játék szempontjából könnyen kezelhető legyen, vagyis könnyel szeparálhatóak legyenek a bejárható és az egyéb dolgokkal benépesített tiltott területek. Továbbá a lehetőségekhez mérten szép és kidolgozott környezet legyen. Választásom egy sugárutakkal tűzdelt városmodellre esett. A város látképéről a későbbiekben lesznek még képek, itt egy felülnézeti térképet mutatnék be:
Funkciók megvalósítása 1. Ellenséges tankok mozgatás Követelmény az volt ezzel kapcsolatban, hogy olyan terülteteken mozgassam a tankokat, ahol nincsen más objektum a pályán. Az egyszerű felépítésű térképnek köszönhetően erre egy kézenfekvő megoldás volt az utcák széleinek eltárolása, majd ezek alapján kiadódtak azok az objektumok, ahova tiltott a beléptetés, ezért azokra a pontokra nem került pályatervezés, hanem egy statikus utcai járőrözést állítottam be mozgásnak. Élet hűbbé téve a mozgásokat, a fordulópontokon a tankok lassítottak forduláshoz, majd az újraindításnál egyenletesen gyorsulva szerezik vissza a haladási sebességüket
2. Ellenséges tankok önálló tüzelése Követelmény ezen téren, hogy csak látható célpontra lőjön és emellett szükséges feltétel még a célba találáshoz, hogy az ágyúcső a célpont irányába álljon. Első feladat a láthatóság megállapítása. Nem szükséges sugárkövető algoritmus készítése, mivel a térkép adottságaiból egy egyszerű összehasonlítással meg lehet állapítani, hogy a játékos azonos utcán tartózkodik-e a tankkal, vagy sem. Ez pedig szükséges és elégséges feltétele a láthatóságnak. Másodszorra a célpont irányának az ágyúcsővel való összehasonlítása a feladat. Miután megtudtuk, hogy a célpont látható-e a tank számára, egyszerű koordinátaösszehasonlításokkal vizsgáltam, hogy a cső előtt van-e a játékos. Harmadszorra, hogy a cső elé kerül a játékos, akkor a játéknak vége számára, meg kell állítani a további mozgásokat és jelezni a játék végét.
3. Tank elpusztítása Elpusztítási lehetőségnek egy bomba elhelyezését választottam, ami csak bizonyos feltételek mellett történhet meg. Elsődleges feltétel, hogy éljünk amikor ezt megtesszük, de ezzel itt nem kell foglalkozni, mert a halállal együtt a játék is megáll, ezáltal csak azt kell figyelni, hogy elég közel vagyunk ahhoz, hogy rátehessük a robbanóanyagot az ellenségre. Mivel ez a távolság olyan kicsi, hogy semmilyen pályaelem nem férhet el a játékos és a tank között, ezért elég csak a koordináták vizsgálata. A pozíciók különbségének hosszát hasonlítottam össze a határértékkel, ami esetünkben 3 pályaegységnyi távolság. Amennyiben ezen belülről próbálkoztunk a tank elpusztításával, úgy a szerkezet az ellenségre kerül és egyel kevesebbel kell már csak szembeszállni. Amennyiben nincs több ellenséges tank, úgy további küldetés hiányában megnyertük a játékot.
4. Tank elfoglalása Elfoglalva egy tankot, azt ártalmatlanná tesszük és a sajátunknak tudhatunk. Az elfoglalásnak is hasonló követelményei vannak, mint az elpusztításnak, csak az itt megválasztott távolságkövetelményt egy kicsit kisebbnek választottam a feladat nehezítésének érdekében. Egy tankot elfoglalva azt annak belső nézetéből láthatjuk, és az irányítás is innentől kezdve nem a megszokott gyalogos mozgás, hanem tank specifikusan két botkormánnyal annak megfelelő mozgásokat tudunk elérni. Amennyiben mind2 kart azonos irányba mozgatjuk, úgy az egység egyenesen halad a karok irányának függvényében, míg ha csak egyet mozgatunk, az olyan, mintha csak az egyik lánctalp mozogna, vagyis, kicsit forog, kicsit megy a tank. Viszont a 2 kar ellentétes mozgatása esetén csak egyhelyben forog.
5. Irányítás Irányításnak a billentyűzetet választottam egyedüli beavatkozónak. Annak érdekében, hogy egyszerre több billentyű lenyomását is tudjam kezelni, teljes billentyűzetállapotot olvasok be minden alkalommal és abból nyerem ki a szükséges információkat. Külsőnézetes irányítás esetén az ilyen játékokban már jól megszokott gombokkal irányítom a játékos: Haladások: -
előre: W hátra: S balra: Q jobbra: E
forgatások: -
balra: A jobbra: D
akciók: -
bomba elhelyezése: Space tank elfoglalása: Enter
Ezen felül más irányítást csináltam abban az esetben, amikor a tank belsejében vagyunk, ilyenkor csak a 2 botkormányt tudom használni, a bal oldalit a Q, A billentyűkkel tudom kimozdítani középállásból, míg a jobb oldalit az E, D billentyűkkel.
Tesztek Tesztelési módszerként a különböző megvalósított funkciókat külön-külön vizsgáltam a játék futtatásával és úgy irányítottam a karaktert, hogy a megadott funkciónak kelljen működésbe lépni. Az alábbiakat vizsgáltam meg: -
karakter mozgása a pályán tankon kívül karakter mozgása a pályán tankban tank mozgásának figyelése (fedezékből) tank célzásának vizsgálata (beleállni) játék végének lekezelése győzte és vesztett helyzetben
A végső verzióban minden egyes funkció a kívánt módon működött.
Képek a játékból
Összegzés, fejlesztési lehetőségek A projekt befejezésével sikeresen megalkottam egy alapvető funkciókat megvalósító működőképes programot. Tapasztalatot szereztem azzal kapcsolatban, hogy milyen dolgozni olyan témakörben, amit nem az órán tanítottak meg, hanem nekem kellett megkeresni és magamtól megtanulni a hozzá szükséges információkat. Megismertem új programok kezelését és más struktúrájú felhasználását a grafikus megjelenítésnek. A megvalósított alap funkciókat továbbfejlesztve és újakkal kiegészítve akár még egy élvezhető játékot is össze lehetne hozni az általam lefektetett alapokból, de itt nem az volt a cél, hanem hogy alkossak valami egyénit és tanuljak minél több új dolgot. Az egész projektre visszagondolva élveztem az alkotó tevékenységet, jól döntöttem pályaválasztásnál.
Irodalomjegyzék [1]
Háromdimenziós grafika, animáció és játékfejlesztés SZIRMAY-KALOS LÁSZLÓ, ANTAL GYÖRGY, CSONKA FERENC Computerbooks, 2006
[2] XNA környezet: http://creators.xna.com/en-US/education/gettingstarted
[3] Az objektumok forrása: http://www.turbosquid.com/