Możliwa duplikat:
Gdzie mogę znaleźć dobre (dobrze zorganizowane) przykłady kodu gry?
Zakodowałem kilka gier w C ++, a teraz tworzę własny silnik gry i edytor.
Mam wątpliwości co do projektu i chcę znaleźć świetne przykłady do naśladowania.
Co według Ciebie jest najlepiej zaprojektowane?
Musi być zorientowany obiektowo. Język programowania nie ma znaczenia, ale wolę w następującej kolejności: C ++, C #, Java lub inny podobny.
ZMIENIONO: Aby wyjaśnić więcej, nie jestem zainteresowany kodem specyficznym dla gry. Chcę silników do gier ogólnego zastosowania.
ZMIENIONO: W tym artykule wyjaśniono, co to jest silnik gry: silnik gry na wikipedii, a oto lista znanych silników do gier: lista silników gier na wikipedii
open-source
source-code
Dani
źródło
źródło
Odpowiedzi:
Myślę, że najlepszym sposobem na zbudowanie silnika gry jest rozpoczęcie od tego, co już znasz dość dobrze i dodanie tych funkcji, które są nużące lub powtarzalne.
Na przykład dużo robię z Pythonem / pygame (która jest opakowaniem SDL) Bardzo podoba mi się system, ale przeszkadzały mi trzy rzeczy:
mogłem łatwo dodać do swoich gier.
Relatywnie łatwe było utworzenie obiektowego opakowania wokół tych funkcji. Spójrz na rozdział 10 i dokumentację Game Engine dostępną tutaj: http://aharrisbooks.net/pythonGame/
(Zostało to napisane jako część książki, ale zapraszamy do silnika gry, nawet jeśli nie chcesz książki).
Rozdział 10 wyjaśnia motywację i techniki budowy podstawowego silnika gry 2D. Możesz cieszyć się nim, gdy budujesz swój własny. Rzeczywisty język nie jest tak ważny (z wyjątkiem oczywiście, że potrzebujesz języka OOP do obsługi OOP.) Jeśli już używasz SDL z C ++, możesz zacząć od dostosowania mojego silnika do C ++ / SDL.
źródło
Czcigodny projekt silnika Quake (ID tech) przetrwał próbę czasu i jest prawdopodobnie najbardziej udanym projektem silnika gry wszechczasów. Wszystko oprócz renderera zostało w dużej mierze niezmienione od późnych lat 90. i nadal jest używane w nowoczesnych grach, takich jak ETQW.
Pełny kod źródłowy dla czterech iteracji tego silnika (Quake 1 do 3 oraz Wolf ET) jest dostępny na licencji GPL. Prawdopodobnie istnieje ponad sto aktywnie rozwijanych, wspieranych przez społeczność silników gier opartych na Quake, które utrzymują je w dzisiejszych czasach. Na szczególną uwagę zasługuje XreaL ze względu na fantastyczny renderer i ioQuake3 za wierną konserwację Quake 3 zoptymalizowanego pod kątem nowoczesnego sprzętu. Ponadto, w przypadku nowszych „oficjalnych” wersji silnika, dostępna jest również logika gry (nie cały silnik).
Nawet jeśli nie skończysz używać tego silnika gry, warto go zbadać ze względu na dobrze przemyślaną architekturę separacji klient-serwer i oddzielenie logiki gry od szczegółów niskiego poziomu.
źródło
Biblioteka renderowania Ogre3D jest bardzo zbliżona do kodu silnika i ze wszystkich kont, które słyszałem, jest bardzo dobrze zaprojektowana i bardzo dobra.
http://www.ogre3d.org/
źródło
Mówiąc o silniku gry, myślę, że myślisz o czymkolwiek, co nie jest silnikiem renderowania, silnikiem dźwięku, silnikiem fizyki, silnikiem wejściowym itp.
Być może myślisz o architekturze gry, sztucznej inteligencji lub wzorcu / systemach projektowych itp., Które są wykorzystywane do strukturyzacji oprogramowania w celu zarządzania danymi i innymi komponentami w celu stworzenia jakiejś sceny / scenerii / iluzji, tworząc w ten sposób możliwy do zarządzania zestaw reguł popraw, aby stworzyć rzeczywistą „grę wideo”.
To jest faktyczna górna warstwa gry wideo, a nawet starałem się o niej trochę dowiedzieć, jest rozległa, skomplikowana i wymaga dużej wiedzy na wszystkie inne tematy. Wyobraź sobie, że chcesz odtworzyć alternatywną rzeczywistość z niczego, śledzić każde obliczenie i obliczać każde zdarzenie, a także generować dokładne dane z nich w dowolnym momencie: dla każdego rodzaju gry istnieje pewien podzbiór silnika gry, a ja nie Sądzę, że faktycznie można stworzyć ogólny silnik, który jest matematycznie wystarczająco szybki. Nawet w grze, w której sterujesz jedną postacią, wciąż istnieje wiele rzeczy, które mogą się różnić i nadal mogą wymagać zmiany całej architektury.
Branża gier nie jest tak dobrze obsługiwana przez open-source jak inne dziedziny informatyki, tylko dlatego, że rozrywka ma różne rodzaje licencji, które obejmują licencje artystyczne: produkt do gry jest opłacany tylko przez klienta, a AFAIK, jest tylko kilka silników, które wydają się wystarczająco dobre do pracy dla Ciebie: Hord3d, NeoAxis, blendelf, Panda3D. Ale nie mogę cię zapewnić, że będą równie łatwe w użyciu, jak narzędzia takie jak Unity, Torque, C4 i inne; należy pamiętać, że silnik gry, z rendererem graficznym, wydaje mi się najtrudniejszym rodzajem oprogramowania, jakie można znaleźć w tworzeniu gier.
źródło
Dla mnie używanie Pythona z Pygame jest dobrym rozwiązaniem. Być może Python jest nieco powolny, ale na dzisiejszych komputerach i jeśli spróbujesz zoptymalizować grę, nie ma to znaczenia. Pygame ma bardzo dobrą dokumentację na stronie oryginalnej gry. Ale najpierw weź początek samouczka, aby nauczyć się podstaw. Do optymalizacji prędkości (konwersja obrazów, ...) potrzebne będą inne przykłady, które można łatwo znaleźć.
źródło