110 likes | 207 Views
Create a classic Bomberman game with strong network support. Implement new concepts and ensure full network capabilities. Design and implementation focus on scalability and synchronized gameplay. Utilize Java for secure, documented coding. Detailed specifications and source code available.
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/