Team: BIGBIG*HIT
Členové: Michal Dobiáš, František Toman
Pokud se server nachází za routerem či jiným síťovým prvkem, může být způsobena nemožnost se k němu připojit. V takovém případě doporučujeme používat program Hamachi, jenž tento problém vyřeší.
2 Použité technologie
Pro vypracování této úlohy jsme se rozhodli využít jazyk C++ a dvě aplikační rozhraní, a to WinAPI jako manager oken a DirectX pro vykreslování grafických prezentací jednotlivých elementů hry.
WinAPI - neboli Windows API jest aplikační rozhraní pro vývoj aplikací pro platformu Windows.
DirectX - knihovny poskytující API pro přímou komunikaci s hardwarem. DirectX se skládá z mnoha částí (DirectGraphics - Direct3D, DXGI, ...; DirectSound, DirectInput, ...), my jsme využili část Direct3D. V případě, že bychom tuto aplikaci vyvýjeli pro DirectX verze nižší než 9, mohli bychom využít rozhraní pro vstupní zařízení DirectInput - to bylo po verzi 8 nahrazeno rozhraním XInput pro ovladače na XBox a zbytek standardně pomocí WinAPI zpráv WM_INPUT - ale rozhodli jsme se právě pro verzi DirectX 9 s využitím Direct3D.
3 Implementace
3 Implementace - síťová komunikace
Síťová komunikace probíhá standardně pomocí protokolu TCP/IP. Po tomto komunikačním kanálu se obě instance hry (serverová a klientská) dorozumívají a předávají si tahy obou hráčů. Komunikační metoda běží ve vlastním vlákně, aby bylo možné plynule překreslovat hrací plochu, aniž by se muselo čekat na příchozí zprávu od druhé strany.
Vícevláknovost je realizována pomocí knihovny pthread.dll, resp. její win verze pthreadVSE2.dll. Třída Vlákno je základem pro vytváření tříd, jejichž metody mohou běžet ve vlastním vlákně.
Spuštění vlastního vlákna se provádí metodou start(), kdy se zprostředkovan zavolá metoda main() přes metodu exec_thread() a vlastní činnost již zajišťuje zmiňovaná metoda main().
3 Implementace - vykreslování grafiky
Pro vykreslování grafických prvků hry jsme si zvolili knihovnu DirectX. Jednotlivé prvky jsou vykreslovány jako sprity , což jsou, jednoduše řečeno, 2D textury, které můžeme na obrazovce pozicovat, případně jim nastavovat rotaci.
Tyto sprity jsou po spuštění aplikace načteny z externích souborů ve formátu PNG (Portable Network Graphics - podporuje průhlednost) a při volání vykreslovacích funkcí jsou následně příslušné sprity zobrazeny. K vykreslování jsme použili D3DX, což je množina funkcí obsahující i funkce pro vykreslování spritů.
3 Implementace - jak aplikace funguje
Prvním bodem jest inicializace aplikace, která probíhá následovně:
- vytvoření okna aplikace,
- inicializace využívaných prvků DirectX,
- načtení textur z externích souborů,
- vytvoření instance modelu hry.
Při vytváření modelu hry se nejprve inicializuje šachovnice, do níž jsou uloženy ukazatele na jednotlivé instance figurek, které vytváří abstraktní továrna v závislosti na typu figurky.
Jakmile jsou inicializovány předchozí části je vytvořena instance připojení typu server či klient, následně jsou této instanci ukazatele na funkce, které jsou volány při příchozí zprávě. Instance připojení běží v samotném vlákně.
Po dokončení těchto částí začíná samotná hra. Uživatel v případě, že tahne figurkou na určitou pozici, odešle soupeřovi zprávu s informací odkud kam tahnul a je model soupeře zaktualizován.
Při ukončení aplikace jsou jednotlivé instance herních objektů uvolněny z paměti.
4 Použité nástroje
- Microsoft Visual Studio 2008
- DirectX SDK
5 Zdroje
- Microsoft MSDN - WinAPI: http://msdn.microsoft.com/en-us/library/aa383745(v=VS.85).aspx
- Microsoft MSDN - DirectX: http://msdn.microsoft.com/library/cc440756.aspx
- hodiny kuchání Googlu a GameDev.net
6 Závěr
Výstupem této práce je tedy počítačová verze deskové hry Šachy, kterou jsme naprogramovali pro platformu Windows s využitím technologií DirectX a WinAPI. Práce nám přinesla mnoho zkušeností s vývojem pro platformu Windows a dále zkušenost s grafickým aplikačním rozhraním DirectX. Výsledek beru jako velký přínos mezi praktickou zkušenost s těmito technologiemi.