Pisanie gier - estetyka kodu, wzorce projektowe

0

Witam Wszystkich ;)

Mam do Was małe pytanko dotyczące MonoGame i pisania gier w ogóle...

Chodzi mi o podział gry na składowe (np. Menu główne, Podsekcje menu, sama główna gra, itd). Jak tego dokonać ? Można zrobić sobie osobne klasy dla każdego z tych elementów, przy czym każda klasa ma swoją metodę Update, Draw itd, czy jednak trzeba grzebać się w jednej klasie głównej i w niej wszystko rysować/aktualizować ?

Przykładowy pseudokod:
StartProgramu();
MenuKlasa menu = MenuKlasa();
menu.Show();
Jeżeli wciśnięto przycisk graj -> menu.Close(); -> KlasaGry gra = new KlasaGry(); gra.Show();
Jeżeli przegrano -> gra.Close() -> KlasaGameOver.Show().... i tak dalej.

Czy jak inaczej ma to wyglądać ?

Pozdrawiam! ;)

1

Rok temu też miałem takie pytania. Polecam lekturę http://gameprogrammingpatterns.com/ albo coś w ten deseń. W necie aż tak dużo nie znajdziesz poradników odnośnie architektury kodu gry, ponieważ każdy bawi się jak chce (z tego co zdążyłem zaobserwować).
Polecam pochodzić po githubie i popatrzeć po prostu na indyki, w jaki sposób tam rozwiązali problemy architektury kodu w swoich grach.

Jeszcze dodam, że na początku 3 razy przepisywałem swój kod i myślę że jak pójdziesz tą drogą, to też tego nie unikniesz :P

2

Jeśli chodzi o pisanie gier, to podział w stylu oddzielenie renderowania od logiki jest zbyt małostkowy. Proponuję abyś zainstalował sobie Unity i podpatrzył jak to jest tam zrobione. Gry są dosyć złożoną aplikacją i w trakcie jej tworzenia często okazuje się że same podmoduły są na tyle skomplikowane że trzeba je rozdrabniać. Ogólnie większość popularnych architektur/frameworków idzie w stronę komponentów jak np. w Unity ale są też inne rozwiązania np. system ECS często stosowany w libgdx. Także luźne systemy eventowe są przydatne gdy musimy podczepiać luźno moduły i nimi zarządzać. Pod spodem oczywiście są wzorce i praktyki. De facto musisz zacząć od pisania tego co potrafisz i cierpliwie rozwijać swój warsztat:)

1 użytkowników online, w tym zalogowanych: 0, gości: 1