1 / 29

„Zastosowanie wzorców w programowaniu gier komputerowych”

„Zastosowanie wzorców w programowaniu gier komputerowych”. Szymon „ Veldrin ” Jabłoński. Agenda. Skąd pomysł na prezentację? Myśl przewodnia „Dobry” kod źródłowy Definicje O czym ten wykład nie będzie Wzorzec „Gra” Wzorzec „Gatunek” Wzorce projektowe. Skąd pomysł na prezentacje?.

rylee-rice
Download Presentation

„Zastosowanie wzorców w programowaniu gier komputerowych”

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. „Zastosowanie wzorców w programowaniu gier komputerowych” Szymon „Veldrin” Jabłoński

  2. Agenda • Skąd pomysł na prezentację? • Myśl przewodnia • „Dobry” kod źródłowy • Definicje • O czym ten wykład nie będzie • Wzorzec „Gra” • Wzorzec „Gatunek” • Wzorce projektowe

  3. Skąd pomysł na prezentacje? • Potrzeba regularnego powrotu do oczywistych oczywistości; • Przypadki produktów grywalnych/użytecznych tragicznie napisanych (projekty OSlib, Java MapEditor); • Mało materiałów na portalach np. GameDev; • Mało dyskusji na forach – temat wydaje się pomijany, błąd; • Częste sytuacje szukania „dziwnego” rozwiązania wzorcowego problemu • Próba przemyślenia i przedyskutowania tematu.

  4. Czemu tak się dzieje? • Gry tworzone są przez graczy – hobbystów; • Ludzie uczą się programować od podstaw tworząc gry; • Grywalny, „dobry” produkt nie musi być wcale dobrze napisany(pułapka); • Brak wspólnego języka w zespołach; • Zespoły mające dobre pomysły nie sięgają po programy middleware; • Nadmierne skupianie się na grafice – programowanie gier skupia się na programowaniu grafiki; • Wzorce są traktowane narzędzie do budowy systemów informatycznych, nie gier; • Zapomina się, że gra komputerowa to aplikacja, rządzi się takimi samymi prawami( + dużo więcej oczywiście);

  5. Myśl przewodnia prezentacji „Programista powinien skupić się na programowaniem gier, nie ich tworzeniem” • Zasoby zostawmy grafikom i animatorom; • Zasady i gameplay niech wymyślają designerzy; • Nie starajmy się tworzyć pięknych arcydzieł, tylko twórzmy jak najwięcej różnych gier, na różnych platformy w różnych językach. Indywidualnie/w grupach; • Ładne GUI, grafikę może zrobić gimnazjalista – my proponujmy lepsze pomysły rozwiązania programu.

  6. „Dobry” kod źródłowy • Kod się kompiluje; • Działa według założeń, rozwiązuje nasz problem; • Krótko mówiąc – działa. W tym momencie często przestaje nas interesować reszta aspektów; • „Dobre nawyki, zgodność ze sztuką programistyczną” • Trzymanie się przyjętej notacji; • Spójność logiczna kodu; • Udokumentowany; • Spójność stosowanego języka: jak angielski to angielski; • Zoptymalizowany ( ale nie na siłę!); • Pozbawiony Anty-wzorców(wykład w zeszłym semestrze); • Pokryty testami ( temat na prelekcję); • Przenośny, uniwersalny, prosty, łatwy w konserwacji i rozwijaniu, zgodny ze standardem i dobrymi nawykami języka; • Korzystający z wzorców projektowych ! • I wiele, wiele innych.

  7. Pytanie po co? Skoro mamy grywalny, fajny produkt bez „tracenia czasu na spełnienie tych wszystkich warunków – to po co to robić? • Faktycznie grywalny i fajny, albo i nie? • Zbliżamy się krawędzi możliwości sprzętu. Proste algorytmy na potężnych sprzętach; • Różnice choćby w grach komercyjnych(przykład ME2/Dragon’sAge); • Chcemy robić kasę na sprzedawaniu pół-produktów, czy sprzedawać coś dobrego(gry na konsole, a łatki na PC kilka lat temu), czy nowe gry na starcie wymagające po gb łatek; • Jeśli ktoś wybiera pierwszą opcję – może już iść do domu :)

  8. Wzorzec Wzorzec - to słowo, które może oznaczać wzór jednostki miary, wzór rzeczy, wyrobu albo zalecany wygląd lub zachowanie się osoby (wzór do naśladowania) lub zwierzęcia. Wzorzec to zwykle coś pozytywnego, godnego naśladowania a także cel do którego należy dążyć. • metrologii: • wzorzec jednostki miary, inaczej: etalon • wzorzec inkrementalny • w zoologii: • wzorzec rasy • wzorzec rasy psa • w technikach projektowych: • wzorzec projektowy- inaczej: wzorzec konstrukcyjny lub operacyjny • w literaturze: • Wzorzec- źródło mocy w Kronikach AmberuRogera Żelaznego

  9. Wzorzec projektowy Wzorzec projektowy (ang. design pattern) – w inżynierii oprogramowania , uniwersalne, sprawdzone w praktyce rozwiązanie często pojawiających się, powtarzalnych problemów projektowych.

  10. O czym ten wykład nie będzie • Nie będzie o wzorcach projektowych – bezpośrednio. • Zakładam, że osoby zajmujące się programowaniem spotkały się już takim terminem; • Za mało czasu na dokładne przedstawienie choćby kilku; • Jedynie krótkie informacje o co chodzi w danych wzorcu; • Zmuszenie do samodzielnej nauki – źródła będą dostępne;

  11. „Wzorzec Gra”

  12. Gra Gra – czynność o ustalonych zasadach, w której udział bierze zwykle kilka osób (rzadziej jedna). Od innych rozrywek grę oddziela istnienie ścisłego zbioru zasad gry, od innych skodyfikowanych czynności jej rozrywkowy charakter.

  13. Gra komputerowa Gra komputerowa - program komputerowysłużący do celów edukacyjnych lub rozrywkowych.

  14. Wzorzec „Gra” Co nam z tego wynika? • Gra to aplikacja – szczególny rodzaj aplikacji; • Gra posiada zasady; • Grę realizuje zespół ludzi o odmiennym wykształceniu - konieczność przyjęcia wspólnego języka. Do kogo skierowany wzorzec: projektanci , etap projektowania aplikacji.

  15. Wzorzec „Gra” Czym się charakteryzuje? • Specyficzne terminy, algorytmy ( teksturowanie, shadery, rendering, pętla czasu rzeczywistego); • Dokładnie mówiąc: charakterystyczny język, który musi być wspólny dla wszystkich; Co możemy z tego wyciągnąć? Jakie gotowe, dobre rozwiązania. • Co nam daje struktura pętli gry(potrzeba istnienia modułów renderowania, timerów, zarządzanie zasobami. • Operujemy pojęciami niezależnymi od platformy/języka – abstrakcyjny szkielet aplikacji. • Ustalenie podstawowych informacji o grze: jakie zasoby, ile wymiarów, jaka przestrzeń, dla kogo itp. • Decyzje od razu sugerują nam potrzebne klasy, nie rzadko ich powiązania. • Ileż daje sam fakt, że zaczynamy pisać „grę”.

  16. Wzorzec „Gatunek” Do kogo skierowany wzorzec: projektanci , designerzy, etap projektowania aplikacji. Gatunek charakteryzuje nam grę. Czy tylko? Co możemy wyciągnąć z faktu, pisania danego gatunku? • Przykładowo: RTS, jaka mapa (tile/hex), jednostki, budynki, hierarchie jednostek. • FPS: czy w takim przypadku specyfikujemy ceny i zasoby dla budynków. Raczej nie. • RPG: dialogi, zadania itp. • Musimy uwzględnić też mieszanie gatunków, jeżeli na to się decydujemy. • Krótko mówiąc: wybieramy gatunek/listę gatunków. Spisujemy rzeczowniki znajdujące się w opisie gatunku – otrzymujemy kolejne klasy/moduły/metody do implementacji. Określamy co potrzebujemy, a czego nie potrzebujemy.

  17. Wzorzec „Gatunek” Do kogo skierowany wzorzec: projektanci , designerzy, etap projektowania aplikacji. Gatunek charakteryzuje nam grę. Czy tylko? Co możemy wyciągnąć z faktu, pisania danego gatunku? • Przykładowo: RTS, jaka mapa (tile/hex), jednostki, budynki, hierarchie jednostek. • FPS: czy w takim przypadku specyfikujemy ceny i zasoby dla budynków. Raczej nie. • RPG: dialogi, zadania itp. • Musimy uwzględnić też mieszanie gatunków, jeżeli na to się decydujemy. • Krótko mówiąc: wybieramy gatunek/listę gatunków. Spisujemy rzeczowniki znajdujące się w opisie gatunku – otrzymujemy kolejne klasy/moduły/metody do implementacji. Określamy co potrzebujemy, a czego nie potrzebujemy.

  18. Wzorce projektowe Do kogo skierowany wzorzec: projektanci , programiści etap implementacji aplikacji. • Jak było wspominane: sprawdzone rozwiązania, częstych problemów. • Generalnie: niezbyt skomplikowane. • Uniwersalne, łatwość dopasowania do problemu. • Istnieją trzy kategorie podstawowe: kreacyjne, strukturalne, czynnościowe. • I wiele innych wymyślanych przez duże firmy tworzące frameworki itp.. Kilka uwag wstępnych: • Warto używać. • Nie stosować na siłę! To, że pasuje nie oznacza, że nie ma lepszego rozwiązania – ciągła nauka. • W procesie nauki – warto korzystać jak najwięcej. • Nauka po jednym. Przeczytać -> zaimplementować -> korzystać. • Jak można wykorzystać w grach – przykłady, to czego brakuje wszędzie.

  19. Singleton • Popularny wzorzec(książki o programowaniu gier), masa tutoriali, dobrze pokazuje idee wzorców; • Ogranicza możliwość tworzenia obiektów do jednej instancji; • Zapewnia globalny dostęp – alternatywa dla zmiennych globalnych; • Przykład zastosowania: teoretycznie wiele modułów „będzie miało” tylko jedną instancję; • Ale też po co? • Klasa Configuration, połączenie z fabryką obiektów. • Ważne, żeby zastosowanie było logiczne !

  20. Stan • Ulubiony wzorzec projektowy; • Pojawia się pojęcie automatu stanów – przydatne narzędzie; • Obowiązkowy dla gier, dla każdej można znaleźć zastosowanie, czy to Saper, czy FPS; • Przykład zastosowania: stan gry, stan obiektu, zastąpienie #define, enum (w Javie korzystanie z enum), podział pętli gry na stany gry (Play, Pause itp.); • Np. Stan Mario, poruszanie się, wielkość itp.. • Elegancja ! • Połączenie z wzorcem Obserwatora, Strategii;

  21. Strategia • Enkapsulacja algorytmów i możliwość ich wymiany w trakcie działania. • Przykład zastosowania to np. poziom trudności gry, poziom AI przeciwników itp. • Ciekawe połączenie z wzorcem Stanu – w zależności od stany/zmian stanu zmiana obiektu strategii danego obiektu np. zamiast #defineGo_Left, Go_Rightif(…) zmieniamy animacje, to userinput zmienia stan, który zmienia strategię, a kod aktualizacji postaci pozostaje update(dt), performStrategy(dt) np. • Co nam daje takie połączenie? Pewną elegancję rozwiązania, możliwość łatwego rozwoju no i również optymalizację. Nie sprawdzamy w jakim stanie jest postać, przy możliwych 1000 stanów mamy wiele ifów na sekundę.

  22. Fabryka obiektów • Istnieje kilka rodzajów fabryk, prosta fabryka, skalowalna, prototypów, abstrakcyjna. Różne metody ten sam cel. • Przykład zastosowania: tworzenie obiektów. Na podstawie pliku wczytywanie zasobów, budowanie poziomów gry, sklepy w grach itp. • Fabryka zwykła/skalowalna: wczytywanie zasobów w zależności od rodzaju(tekstura, dźwięk), budowanie sceny. • Fabryka prototypów: tworzenie co jakiś czas wielu jednostek do gry np. Star Wars RogueSquadron – myśliwce imperium; • Fabryka abstrakcyjna: każda postać otrzymuje inne obiekty. Przechowuje wskaźniki na abstrakcyjne klasy bazowe, rejestrujemy docelowe obiekty -> unikamy kolizji. Np. krasnolud dostanie swój topór/młot, a nie łuk przeznaczony dla elfa. • Często łączy się z singletonem(fabryka skalowana);

  23. Fasada • Opis: dostęp do zaawansowanego systemu poprzez dobrze udokumentowane publiczne API. • Przykład zastosowania: API bibliotek, silników itp. • Ograniczenie dostępu tylko do wymaganych modułów, enkapsulacja systemu;

  24. Adapter • Opis: opakowanie interfejsu klasy w nowy, połączenie dwóch klas o niekompatybilnych interfejsach; • Przykład zastosowania: opakowanie w klasy API, strukturalnych bibliotek graficznych, typów. Praca z cudzym brzydkim kodem -> opakowujemy w swój zgodny dla całego projektu interfejs.

  25. Kompozyt • Opis: kompozycja, jak przykładowy system plików. • Przykład zastosowania: drzewo sceny. Obiekty mogą też być kontenerami innych obiektów np. mapa z domkami, w domkach szafy, w szafach ubrania itp. • Inny przykład to kombinacje, makra. Połączenie z wzorcem Komenda.

  26. Wizytator • Opis: odseparowanie algorytmuod struktury obiektowejna której operuje • Przykład zastosowania: Obsługa eventów, kolizji. Obsługa zdarzeń na podstawie tego co się wydarzyło. • Elegancja! Brak setek ifów.

  27. Wnioski • Projektujmy. • Programujmy. • Mniej grania, więcej programowania :) • Wzorce nie oferują remedium na każdy problem, są jedynie propozycją; • Tak naprawdę stosujemy, często nie zdając sobie z tego sprawy: wzorzec Obserwatora czy Iteratora.

  28. „Dziękuję za uwagę”

More Related