Problemy programowania gier mgr Mateusz Rynk
Od czego zacząd? pomysł na grę pomysł na wykonanie
Pomysł na grę Pomysł na fabułę Pomysł na główny cel gry
Narzędzia Środowisko programistyczne (Visual C# + XNA) Oprogramowanie do obróbki grafiki 2D i 3D oraz dźwięku Edytor poziomów Edytor skryptów
Środowisko programistyczne (Visual C# + XNA)
Oprogramowanie dodatkowe
Nic od zera biblioteki i silniki DirectX i OpenGL Silniki gier: Retribution Engine Unity Unreal Development Kit Wolfenstein 3D for the iphone Wolf4SDL Heretic and Hexen Hexen II: Hammer of Thyrion Micropolis Irrlicht Engine - Open Source 3D Game Engine Arianne RPG - Multiplayer Online Engine DUGL - The DOS Ultimate Game Library SxDL Game Development Toolkit SpriteCraft Freeware 2D Game Engine Microsoft MechCommander 2 Apolyton Civilization Call to Power II Xgame - X11 Game Programming Library Pygame Pure Power Tactical Engine: PPTactic Golden T Game Engine. SDL - Simple Directmedia Layer Allegro QuakeII.NET SCI Studio Quake III Arena, Quake III Team Arena, Quake II, Quake Doom Strategus Real-Time Strategy Game Engine Crystal Space free 3D Engine PLIB Portable Games Library ClanLib Game SDK Obsidian COLDET 3D Collision Detection Library Id Software's Wolfenstein 3D
RocketCommander
Budowa gry Silnik graficzny Silnik fizyczny Obsługa I/O Sztuczna Inteligencja Dane gry Skrypty Obsługa dźwięku
Silnik graficzny
Silnik fizyczny Samodzielna implementacja Wspomaganie sprzętowe NVIDIA PhysX Eksplozje wywołujące kurz i powstawanie gruzu Postacie o złożonej geometrii z bardziej realistycznym odwzorowaniem ruchu i interakcji Nowe, widowiskowe bronie z niewiarygodnymi efektami Ubrania i materiały, które rozdzierają się w naturalny sposób Gęsty dym i mgła, które opływają obiekty znajdujące się w ruchu
Moduł sztucznej inteligencji Dedukcja, wnioskowanie, rozwiązywanie problemów Planowanie Uczenie się Przetwarzanie języka naturalnego Analiza ruchu Percepcja Inteligencja Społeczna http://en.wikipedia.org/wiki/artificial_intelligence
Podstawowe zasady działania gry Uruchomienie gry Załadowanie danych Analiza danych pochodzących z urządzeo We/Wy Wyświetlanie obrazu, odtwarzanie dźwięku Zakooczenie programu
Pętla gry Wejście do pętli Sztuczna Inteligencja Obsługa wejścia Detekcja kolizji Fizyka: ruch Odtwarzanie dźwięku Rysowanie obrazu na ekranie
Wielowątkowośd w grze Sztuczna inteligencja Wątek 1 Częśd wspólna Wątek 2 Wątek 3
Przykładowy problem do rozwiązania Sprawid, żeby jednostki latające nie wpadały na siebie, ustępowały sobie miejsca i sprawiały wrażenie, że widzą swoje otoczenie.
Boidy Reynoldsa Określenie sąsiedztwa Realizacja Trzech Zasad Wykonanie ruchu
http://www.red3d.com/cwr/boids/ Boidy Reynoldsa - 3 zasady Wyrównanie Rozdzielnośd Spójnośd
Rozdzielnośd psumapozycji = [0,0,0]; licznośdsąsiedztwa = 0; dla każdego Boida w sąsiedztwie { psumapozycji = psumapozycji + Boid.pPosition; licznośdsąsiedztwa = licznośdsąsiedztwa + 1; } pśredniapozycja = psumapozycji / licznośdsąsiedztwa; vwektorkorygujący = pposition pśredniapozycja;
Wyrównanie pśredniaprędkośd = [0,0,0]; licznośdsąsiedztwa = 0; dla każdego Boida w sąsiedztwie { vsumaprędkości = Boid.vSpeed; licznośdsąsiedztwa = licznośdsąsiedztwa + 1; } pśredniaprędkośd = vsumaprędkości / licznośdsąsiedztwa; vwektorkorygujący = pśredniaprędkośd vspeed;
Spójnośd psumapozycji = [0,0,0]; licznośdsąsiedztwa = 0; dla każdego Boida w sąsiedztwie { psumapozycji = psumapozycji + Boid.pPosition; licznośdsąsiedztwa = licznośdsąsiedztwa + 1; } pśredniapozycja = psumapozycji / licznośdsąsiedztwa; fśredniaodległośdodsąsiada = Dystans(pŚredniaPozycja, pposition); vwektorkorygujący = [0,0,0]; dla każdego Boida w sąsiedztwie { fdystansodsąsiada = Dystans(pPosition, Boid.pPosition); vwektorkorygujący += ((Boid.pPosition - pposition) * (fdystansodsąsiada - fśredniaodległośdodsąsiada)) * (1.0f / fdystansodsąsiada); }