„Zastosowanie wzorców w programowaniu gier komputerowych”

Slides:



Advertisements
Podobne prezentacje
Instrukcje - wprowadzenie
Advertisements

Zaawansowane metody programowania – Wykład V
Opis metodyki i procesu produkcji oprogramowania
Role w zespole projektowym
Badania operacyjne. Wykład 1
Grafika komputerowa Wykład 2 Wykorzystanie podstawowych usług bibliotecznych (API) w operacjach graficznych.
Architektura systemu Gra strategiczna „Strusia Jama”
Inżynieria Oprogramowania II
Propozycja metodyki nauczania inżynierii oprogramowania
W ZORCE P ROJEKTOWE … czyli ktoś już rozwiązał Twoje problemy!
Co UML może zrobić dla Twojego projektu?
PHP vs. ASP PHP – lider wydajności wśród języków skryptowych.
Biblioteki i przestrzenie nazw
1 Kryteria wyboru systemów: Przystępując do procesu wdrażania zintegrowanego systemu zarządzania, należy odpowiedzieć na następujące pytania związane z.
Wzorce projektowe w J2EE
Wstęp do programowania obiektowego
Projektowanie i programowanie obiektowe II - Wykład IV
wykonał Jarosław Orski promotor pracy: mgr Szymon Smaga
Dalsze elementy metodologii projektowania. Naszym celem jest...
Przegląd ważniejszych bibliotek używanych przy projekcie Quall.
Możliwości biblioteki logiczno-fizycznej opartej na systemie masa-sprężyna jako środowiska modelowania rzeczywistości wirtualnej. Przegląd zagadnień Seminarium.
Inżynieria Oprogramowania
Gry komputerowe Dla kogo i po co ?.
Podstawy programowania
Podstawy programowania II
Prezentacja aplikacji do zarządzania projektami Szkoła Główna Handlowa w Warszawie,
Instytut Tele- i Radiotechniczny WARSZAWA
Podstawy programowania
Witold Bołt m.
Witold Bołt. Agenda W czym tkwi problem..? Po co jest oprogramowanie? Kim jest użytkownik? Zbieranie danych Co to jest design Współpraca programista-projektant.
JAVA.
Projektowanie obiektowe
Projektowanie obiektowe
Algorytmy.
Farseer Physics Engine. Farseer Physics Engine jest silnikiem fizycznym napisanym dla platformy.NET. Został on zainspirowany przez silnik Box2D znany.
Rozwiązanie zadań do zaliczenia I0G1S4 // indeks
Podstawowe informacje o maturze dla gimnazjalistów.
ZAKŁAD SYSTEMÓW KOMPUTEROWYCH
Programowanie obiektowe – język C++
Rational Unified Process Implementacja Aleksandra Reiman, gr. I-52.
Zawansowane techniki programistyczne
ZWIĄZKI MIĘDZY KLASAMI KLASY ABSTRAKCYJNE OGRANICZENIA INTERFEJSY SZABLONY safa Michał Telus.
Na wysokościach myślenia jest sfera,
MS Excel - wspomaganie decyzji
III EKSPLORACJA DANYCH
Projektowanie stron WWW
Architektura współczesnych gier video Adam Sawicki asawicki.infoasawicki.info
Treści multimedialne - kodowanie, przetwarzanie, prezentacja Odtwarzanie treści multimedialnych Andrzej Majkowski 1 informatyka +
Programowanie strukturalne i obiektowe C++
Walidacja danych alina suchomska.
Proces tworzenia oprogramowania Proces tworzenia oprogramowania jest zbiorem czynności i związanych z nimi wyników, które prowadzą do powstania produktu.
Projektowanie obiektowe. Przykład: Punktem wyjścia w obiektowym tworzeniu systemu informacyjnego jest zawsze pewien model biznesowy. Przykład: Diagram.
Projekt modułu Nazwa całego projektu Nazwa modułu Imię i Nazwisko Inżynieria Oprogramowania II dzień, godzina rok akademicki W szablonie na niebiesko zamieszczone.
Zakres Wzorce projektowe - kreacyjne -Factory Method -Abstract Factory.
Lekcje z komputerem, 2006.
Wzorce Projektowe w JAVA
Platforma .Net.
Logical Framework Approach Metoda Macierzy Logicznej
Informatyka – szkoła gimnazjalna – Scholaris - © DC Edukacja Tworzenie stron WWW w programie Microsoft FrontPage Informatyka.
Struktura systemu operacyjnego
Dokumentacja programu komputerowego i etapy tworzenia programów.
Temat: Porównanie technologii php,c# oraz javascript na przykładzie webaplikacji typu społecznościowy agregator treści Autor: Wojciech Ślawski.
Jak formułować efektywne cele? Z. Korzeniewski przedstawia.
1 Mapan i Mapnik. Czyli kilka słów o przeglądarkach leśnej mapy numerycznej. Zespół Zadaniowy ds. Leśnej Mapy Numerycznej. Margonin r.
Wyższa Szkoła Informatyki i Zarządzania W Bielsku-Białej Kierunek informatyka Specjalność : Systemy informatyczne Praca dyplomowa inżynierska : System.
Innowacja z programowania realizowana w klasach 1-3
Programowanie Obiektowe – Wykład 2
Tworzenie stron WWW w programie Microsoft FrontPage
JavaBeans by Paweł Wąsala
Zapis prezentacji:

„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? 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.

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);

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.

„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.

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’s Age); 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 :)

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 Amberu Rogera Żelaznego

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.

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;

„Wzorzec Gra”

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.

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

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.

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ę”.

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.

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.

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.

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 !

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;

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 #define Go_Left, Go_Right if(…) zmieniamy animacje, to user input 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ę.

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 Rogue Squadron – 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);

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;

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.

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.

Wizytator Opis: odseparowanie algorytmu od struktury obiektowej na 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.

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.

„Dziękuję za uwagę”