Prezentace aplikace PowerPoint

Transkript

Prezentace aplikace PowerPoint
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

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í)

Více

Optické přístupové sítě OAN na bázi EPON a jejich integrita

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, ...

Více

WDM-PON - Profiber

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 ...

Více

Treatment of myelodysplastic syndrome patients with erythropoietin

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. ...

Více

ČJ - AJ - NJ ve formátu PDF

Č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...

Více