110 likes | 204 Views
H álózati Bombermen. Belicza András Konzulens: Rajacsics Tamás BME-AAIT. Mi is a Bomberman. Fel ülnézeti 2D mászkálós játék Feladat: egy figura ir ányítása (bomberman) Pálya: beton és tégla fal, köztük mozoghatunk
E N D
Hálózati Bombermen Belicza András Konzulens: Rajacsics Tamás BME-AAIT
Mi is a Bomberman • Felülnézeti 2D mászkálós játék • Feladat: egy figura irányítása (bomberman) • Pálya: beton és tégla fal, köztük mozoghatunk • Bombákat rakhatunk le, melyek a játékosokat megölik, a téglafalakat rombolják • Tárgyak: felvehető objektumok, melyek tulajdonságainkat, képességeinket változtatják meg • Cél: megölni az ellenfeleinket
Konkurencia • Számos Bomberman játék létezik már. Említésre méltó: • Bomberman (Nintendo, ’89),Dyna blaster(’91): az ősök, nincs hálózati támogatás • Atomic Bomberman (’97): korlátozott IPX alapú hálózati támogatás, sok újítás (és „bug”) • Újításaim: • új játék koncepció • Erős hálózati támogatás
Tervezési szempontok • A kód teljes függetlensége a játékban használt hang és kép erőforrásoktól • Kiemelt hálózati támogatás • korlátlan számú játékos • minimális sávszélesség-igény • csomagküldési „delay” kezelése • Jól konfigurálható, skálázható
Implementációs szempontok • Az implementáció nyelve: Java2 5.0 • Biztonságos, könnyen kezelhető, jól dokumentálható, teljes körűen támogatott • Teljes hálózati támogatás • IP alapú hálózati támogatás • Server-kliens alapú program- és hálózati struktúra • Öncsatlakozás; pl. chat serveren keresztül
Alapelvek: Iteráció • A minimális hálózati forgalom céljából lokális játékszámítás és –karbantartás • A játékszámítás alapegysége az iteráció: • Egy iteráció kiszámításához csak az előző iteráció végén levő állapotot (a játék állása és a játékosok akcióinak sorozata) kell ismerni.
Alapelvek: szinkronizáció I. • A játékban résztvevő gépek szinkronizálása • Következő iteráció kezdődhet, ha NI jelet kapunk • Az NI jelet a szerver akkor küldi, ha minden kliens készen áll (és az iterációidőzítő is jelzett már) • Ha egy kliens NI jelet kap, kiszámítja a következő iterációt, és elküldi játékosai akció sorozatait (ez egyben a kész jel) • Ha mindenki elküldte akció sorozatait, a szerver NI jel formájában ezt minden kliensnek szétküldi (minimális iterációidő azért van)
Alapelvek: szinkronizáció II. • Véletlenek: a játék rengeteg véletlen eseményt és adatot használ. java.util.Random.seed() • Egy játék-csomóponton is több szál fut, melyeket ezek után már elég lokálisan szinkronizálni • Pl. a játéktér frissítése: a skálázhatóság érdekében az iteráció periódusidejétől függetlenül történhet, szinkronizálása az iterációk számítása és saját időzítője alapján
Alapelvek: hálózati delay kezelése • A „lag”-os játék legfőbb tényezője a hálózati csomagkésleltetés • Két iteráció közötti várakozási időt használjuk a delay lefedésére • Amikor elküldjük akcióinkat, azok a következő iterációban érvényesülnek majd • Következmény: pl. Ti=30 ms esetén a mozgás 30 ms-ot késik (nem érezhető, de szokható lenne), viszont közel 30 ms delay-t egyáltalán nem érzünk
Összefoglalás • Az ismertetett struktúrák és algoritmusok alkalmazásával a kívánt újítások és előnyök kézbentartható bonyolultsággal megvalósíthatóak • A téma később általánosítható valósidejű elosztott játékok és alkalmazások hálózati struktúrájának és adatforgalmánaktervezéséreés elemzésére
Köszönöm a figyelmet. Játék specifikáció és elkészült forráskódok: http://i.aut.bme.hu/onlab/BeliczaAndras/