Prezentace aplikace PowerPoint
Transkript
Marek Polák, 2. ročník IPSS Letní semestr 2013/2014 Pokročilé programování pro .NET I (NPRG038) Cíl • Vytvořit 2D hru pro jednoho a více hráčů • Vytvořit jednoduchou grafiku • Vymyslet principy hry • Naimplementovat principy • Hra by měla komunikovat po síti: • Zvolit vhodný model (klient-server či P2P) • Zvolit vhodný protokol (TCP či UDP) • V případě UDP rozumně potvrzovat přijetí Grafika a principy Past Hráč Nepřítel Projektil Líheň Překážka Typy kolizí: past + hráč = hráč je uvězněn past + nepřítel = nepřítel je uvězněn hráč + hráč = hráči se mohou odtlačit hráč + nepřítel = hráč zemře hráč + projektil = hráč zemře, projektil zanikne hráč + líheň = hráč neprojde skrz hráč + překážka = hráč neprojde skrz nepřítel + nepřítel = oba změní směr pohybu nepřítel + projektil = nepřítel zemře, projektil zanikne nepřítel + překážka = nepřítel změní směr pohybu projektil + překážka = projektil zanikne Kolize • Kolize se počítají v každém herním taktu • Pokud je průnik kolizních zón neprázdný, došlo ke kolizi • Kolizní zóny jednotlivých entit viz vpravo WebEntity Entity StaticEntity WallEntity ActiveEntity Entity • Každý typ herního objektu je reprezentován samostatnou třídou • Entity v serverové části hry spravuje EntityManager • Každá entita má svůj zjednodušený Remote protějšek v klientské části hry • Remote entity spravuje RemoteEntityManager EnemyEntity DynamicEntity ProjectileEntity PlayerEntity RemoteWebEntity RemoteStaticEntity RemoteWallEntity RemoteHoleEntity RemoteEntity RemoteEnemyEntity RemoteDynamicEntity RemoteProjectileEntity RemotePlayerEntity HoleEntity Herní mapa • Herní mapa je textový XML soubor, dá se snadno modifikovat <map> <!-- Příklad validního souboru herní mapy --> <settings> <name>minimap</name> <projectile size="16" velocity="400"/> <players size="64" velocity="200" rotation="3" /> <size height="4" width="4" /> <cooldowns death="3000" web="5000" projectile="1000" /> <block size="64" /> </settings> <player> <position x="1" y="1" /> <color value="blue" /> <orientation value="S" /> </player> <enemy> <position x="3" y="4" /> <color value="lime" /> <velocity value="100" /> </enemy> <wall> <position x="2" y="2" /> <position x="1" y="4" /> </wall> <hole> <position x="4" y="4" /> <spawn rate="500" /> <spawned> <velocity value="50" /> <color value="fuchsia" /> </spawned> </hole> </map> Síťování • Je potřeba spolehlivě provádět výpočty a udržovat hráče synchronizované • klient-server model je vhodnější • Záleží spíše na rychlosti odezvy než na spolehlivosti doručování • UDP protokol je vhodnější • Některé zprávy musí být bezpodmínečně doručeny • Je nutno implementovat vhodné potvrzování • Zprávy budou mít podobu textových řetězců v UTF-8 • Nejsnazší pro kontrolu Protokol Komunikace mezi serverem a klientem Typ zprávy NOTHING Popis zprávy Regulární výraz Poznámka Značí zprávu, která není validní. Nemůže být vytvořena ani odeslána. Zprávy, které odesílá server i klient REQUEST Značí požadavek potvrdit přijetí zprávy pomocí ACKNOWLEDGE. REQ [0-9]+ ‚message‘ Za REQ následuje kód zprávy, který má být potvrzen v ACKNOWLEDGE, message značí text libovolné jiné zprávy. ACKNOWLEDGE Potvrzuje přijetí REQUEST zprávy. ACK [0-9]+ Za ACK následuje kód REQUEST zprávy, která je potvrzována. HELLO Klient se pokouší provést handshake. Zprávy, které odesílá klient HELLO [a-zA-Z0-9]* Za HELLO může být cokoliv. KEYS Obsahuje změny ve stisknutých klávesách klienta. KEY [uUdDlLrRfFtT]* U, D, L, R značí pohyb nahoru, dolů, doleva, doprava, F je střelba, T je past. Velký znak značí stisknutí klávesy, malý uvolnění. Zprávy, které odesílá server OLLEH Značí kladnou odpověď serveru na HELLO klienta. OLLEH [a-zA-Z0-9]* Za OLLEH může být cokoliv. SETTINGS Obsahuje nastavení herní mapy. SET [0-9]+ [0-9]+ [0-9]+ [0-9]+ [0-9]+ [0-9]+ [a-zA-Z0-9]+ Čísla značí (v tomto pořadí) výšku a šířku mapy, délku strany herního bloku, projektilu a hráče, deathcooldown a jméno mapy. NEW Vytvoření nové entity na herní mapě. NEW (wall|web|hole|projectile|player|enemy) [0-9]+ [0-9]+ [0-9]+ [0-9]+ [0-9]+ (red|blue|green|yellow|cyan|fuchsia|lime|orange|white) Řetězec značí typ nové entity, čísla (v tomto pořadí) její ID, pozici (x a y) a rozměry (výšku a šířku). Pokud se jedná o hráče či nepřítele, následuje jeho barva. DELETE KILL SCORE Smazání entity z herní mapy. Smrt daného hráče. Změna skóre daného hráče. DEL [0-9]+ KIL [0-9]+ SCR [0-9]+ -?[0-9]+ Číslo značí ID entity. Číslo značí ID hráče. Čísla značí ID hráče a jeho nové skóre. MOVE Změna pozice dané dynamické entity. MOV [0-9]+ [0-9]+ [0-9]+ [0-9]+ Čísla značí ID dynamické entity, její novou pozici (x a y) a orientaci. GAME END Spouští hru na straně klienta. Ukončuje hru na straně klienta. GAM [a-zA-Z0-9]* END [a-zA-Z0-9]* Za GAM může být cokoliv. Za END může být cokoliv. Handshake • Handshake ověří, zda může být klient přijat • Připojí UDP klienty na klientské straně na odpovídající UDP klienty na straně serveru • V případě neobdržení odezvy opakuje pokus SERVER KLIENT Sender HELLO REQ x OLLEH Sender Receiver Handshaker 3000 ms Sender REQ x OLLEH Handshaker 3x Receiver ACK x Handshaker 2000 ms 3x 2000 ms Receiver Receiver ACK x ACK x Handshaker Sender Potvrzování • Pokud je třeba zajistit, aby klient obdržel zprávu, zašle ji server obalenou zprávou typu REQUEST s kódem • Klient po obdržení REQUEST zprávy zašle serveru ACKNOWLEDGE zprávu se stejným kódem • Server REQ zprávy pro každého klienta ukládá do slovníku, při obdržení ACK zprávy ji ze slovníku odebere • Po každé cca sekundě je REQ zpráva ze slovníku odeslána znovu, po pěti neúspěšných pokusech je klient označen jako neaktivní Ukázka • Mapa pro 2 hráče (červený a azurový) • Od začátku hry uplynuly 2 minuty, červený hráč vede • Jeden ze žlutých nepřátel je chycen v pasti • Azurový hráč vystřelil projektil
Podobné dokumenty
DotA Allstars v6.31 Seznam Předmětů. Navštivte www.dotaportal
Necronomicon bojovníci po jejich smrti dají 100 gold. Necronomicon
bojovníci NEM OU úto it na ancient jednotky (d vod u KOTL
Morphling zvýhodn ní)
Optické přístupové sítě OAN na bázi EPON a jejich integrita
GATE poskytuje mechanismus pro OLT, prostřednictvím něhož se určují časové úseky
pro komunikaci ONU/ONT jednotek. Na rozdíl od GPON, kde OLT specifikuje star a stop
time inkrementovanou po 1 byte, ...
WDM-PON - Profiber
OLT karta obsahuje širokopásmový zdroj světla (BLS), AWG a FP laserovou diodu
L-Band BLS je použit pro alokaci vlnové délky „blízkého konce“ OLT
L-Band přenáší modulovaná data ve směru Downstreamu
...
Treatment of myelodysplastic syndrome patients with erythropoietin
Do studie bylo zařazeno 110 anemických pacientů s MDS. Pacienti byli randomizováni do skupiny A
léčené transfúzemi a do skupiny B léčené EPO v dávce 150 U/kg denně podkožně společně
s transfúzemi. ...
ČJ - AJ - NJ ve formátu PDF
smokeless powder
black powder
double, two base powder
single, simple base powder
powder charge
powder grain
probable deviation
precession
antiaircraft machine gun
sectional density
piston spring
re...