5.2 KiB
Szkic gry: Zastosuj wzorce projektowe
Podsumowanie zadania
Wykorzystaj swoją nowo nabytą wiedzę o wzorcach projektowych, tworząc prosty prototyp gry! To zadanie pomoże Ci poćwiczyć zarówno wzorce architektoniczne (dziedziczenie lub kompozycję), jak i system komunikacji pub/sub, który poznałeś podczas lekcji.
Instrukcje
Stwórz prostą reprezentację gry, która demonstruje wzorce projektowe z tej lekcji. Twoja gra powinna być funkcjonalna, ale nie musi mieć skomplikowanej grafiki – skup się na podstawowej architekturze i wzorcach komunikacji.
Wymagania
Wybierz wzorzec architektury:
- Opcja A: Użyj dziedziczenia opartego na klasach (tak jak w przykładzie
GameObject→Movable→Hero) - Opcja B: Użyj kompozycji (tak jak w podejściu fabryki funkcji z mieszanymi zachowaniami)
Zaimplementuj komunikację:
- Dołącz klasę
EventEmitterdo wiadomości pub/sub - Skonfiguruj co najmniej 2-3 różne typy wiadomości (np.
PLAYER_MOVE,ENEMY_SPAWN,SCORE_UPDATE) - Połącz wejście użytkownika (klawiatura/mysz) z zdarzeniami gry poprzez system zdarzeń
Elementy gry do zawarcia:
- Co najmniej jedna postać sterowana przez gracza
- Co najmniej jeden inny obiekt gry (wróg, przedmiot do zbierania lub element środowiska)
- Podstawowa interakcja między obiektami (kolizja, zbieranie lub komunikacja)
Proponowane pomysły na grę
Proste gry do rozważenia:
- Gra w Węża – segmenty węża podążają za głową, jedzenie pojawia się losowo
- Wariacja Pong – paletka reaguje na wejście, piłka odbija się od ścian
- Gra Kolekcjonerska – gracz porusza się, zbierając przedmioty i unikając przeszkód
- Podstawy Tower Defense – wieże wykrywają i strzelają do poruszających się wrogów
Wytyczne dotyczące struktury kodu
// Przykładowa struktura początkowa
const Messages = {
// Zdefiniuj tutaj wiadomości swojej gry
};
class EventEmitter {
// Twoja implementacja systemu zdarzeń
}
// Wybierz podejście oparte na klasach LUB kompozycji
// Przykład oparty na klasach:
class GameObject { /* base properties */ }
class Player extends GameObject { /* player-specific behavior */ }
// LUB przykład kompozycji:
const gameObject = { /* base properties */ };
const movable = { /* movement behavior */ };
function createPlayer() { /* combine behaviors */ }
Testowanie twojej implementacji
Sprawdź, czy twój kod działa poprzez:
- Testowanie, czy obiekty się poruszają lub zmieniają po wywołaniu zdarzeń
- Potwierdzenie, że wiele obiektów może reagować na to samo zdarzenie
- Sprawdzenie, czy można dodać nowe zachowania bez modyfikowania istniejącego kodu
- Zapewnienie, że wejście z klawiatury/myszy prawidłowo wywołuje zdarzenia gry
Wytyczne dotyczące przesłania
Twoje zgłoszenie powinno zawierać:
- Plik(i) JavaScript z implementacją Twojej gry
- Plik HTML do uruchamiania i testowania gry (może być prosty)
- Komentarze wyjaśniające, który wzorzec wybrałeś i dlaczego
- Krótka dokumentacja Twoich typów wiadomości i ich funkcji
Kryteria oceny
| Kryterium | Wzorowy (3 punkty) | Wystarczający (2 punkty) | Wymaga poprawy (1 punkt) |
|---|---|---|---|
| Wzorzec architektury | Poprawna implementacja dziedziczenia LUB kompozycji z klarowną hierarchią klas/obiektów | Użycie wybranego wzorca z drobnymi problemami lub niespójnościami | Próba zastosowania wzorca, ale implementacja zawiera poważne błędy |
| Implementacja pub/sub | EventEmitter działa poprawnie z wieloma typami wiadomości i prawidłowym przepływem zdarzeń | Podstawowy system pub/sub działa z częściową obsługą zdarzeń | System zdarzeń istnieje, ale nie działa niezawodnie |
| Funkcjonalność gry | Co najmniej trzy interaktywne elementy komunikujące się za pomocą zdarzeń | Dwa interaktywne elementy z podstawową komunikacją zdarzeń | Jeden element reaguje na zdarzenia lub podstawowa interakcja |
| Jakość kodu | Czysty, dobrze skomentowany kod z logiczną organizacją i nowoczesnym JavaScriptem | Ogólnie zorganizowany kod z adekwatnymi komentarzami | Kod działa, ale brakuje organizacji lub jasnych komentarzy |
Punkty dodatkowe:
- Kreatywne mechaniki gry, które pokazują ciekawe zastosowania wzorców
- Wielorakie metody wejścia (zarówno zdarzenia z klawiatury, jak i myszy)
- Skalowalna architektura łatwa do rozbudowy o nowe funkcje
Zastrzeżenie:
Niniejszy dokument został przetłumaczony za pomocą usługi tłumaczenia AI Co-op Translator. Mimo że staramy się o dokładność, należy pamiętać, że automatyczne tłumaczenia mogą zawierać błędy lub niedokładności. Oryginalny dokument w języku źródłowym powinien być uznawany za źródło ostateczne. W przypadku informacji krytycznych zaleca się skorzystanie z profesjonalnego tłumaczenia dokonanego przez człowieka. Nie ponosimy odpowiedzialności za jakiekolwiek nieporozumienia lub błędne interpretacje wynikające z korzystania z tego tłumaczenia.