Pierwszą ważną kwestią, na którą należy zwrócić uwagę, jest to, że nie ma jednej „dobrej” odpowiedzi na to pytanie.
Prawidłową odpowiedzią byłoby coś takiego: To bardzo zależy od rodzaju gry, platformy docelowej, ograniczeń (czasu) itp.
To powiedziawszy, istnieje kilka naprawdę dobrych artykułów, które pokażą, jak inni ludzie próbowali rozwiązać ten problem (ponieważ próbowałem znaleźć informacje na ten temat w przeszłości).
Jak wspomniano w komunistycznej kaczce, artykuł na temat twórczości Game Dev pomógł mi zrozumieć niektóre elementy architektury gry.
Mój obecny projekt to hybryda Quake3 / Doom3 i trochę biblioteki klas .NET :)
Mam dwie biblioteki (statyczne lub dynamiczne zależą od tego, jak chcesz zbudować / dostarczyć) Framework
i Library
.
Biblioteka zawiera wszystkie klasy pomocników, które są pomocne w produkcji oprogramowania do gier, ale nie są ograniczone do tego rodzaju produktu. tzn. ma implementację połączonej listy, która jest zoptymalizowana pod kątem kodu gry, ale może być używana przez wszystko, co wymaga obsługi połączonej listy.
Framework jest wnętrznością „silnika”, jeśli chcesz to tak nazwać. Wiele z nich wynika z filozofii projektowania Quake3 (tylko w sposób bardziej obiektowy). Zawiera CLI , zarządzanie taktowaniem, kod specyficzny dla systemu operacyjnego i ewentualnie warstwy sieciowe itp.
Te dwa elementy są następnie łączone z produkowaną aplikacją. Game
Jeśli chcesz, który zawiera kod gra konkretnego. W podobny sposób Quake3 ładuje biblioteki DLL w zależności od tego, który „mod” jest odtwarzany.
Aby dać ci wyobrażenie o strukturze, tutaj jest szybki podział folderów i zawartości dla każdej biblioteki:
- Struktura
- IO (klasy zarządzania plikami specjalistycznymi, klasy drukowania tekstu (np. Do CLI), logowanie itp.)
- Sieć
- Klient (klasy reprezentujące to, co Framework uważa za „osobę grającą / połączoną z grą”)
- Serwer (klasy do zarządzania połączeniami w ramach i zarządzania odtwarzaczem (graczami))
- Platforma (klasy obsługi klawiatury / myszy / kontrolerów, procedury specyficzne dla systemu operacyjnego, takie jak getTime ())
- System (klasy bardzo niskiego poziomu, takie jak klasa błędów ułatwiająca drukowanie komunikatów o błędach, klasy czasu i sam interfejs CLI).
- Renderer (nie wymaga wyjaśnień)
- itp.
- Biblioteka
- Kolekcje (klasy reprezentujące kolekcje danych, powiązane listy / tabele skrótów itp.)
- Matematyka (podstawowe klasy pomocnicze matematyki, takie jak wektory i macierze)
- itp.
HTH! Powinien dać ci kilka wskazówek ...