![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 20 Pomógł: 0 Dołączył: 23.10.2006 Ostrzeżenie: (0%) ![]() ![]() |
Witam!
Wiem, że jest już jeden temat o tym samym zagadnieniu, lecz dyskusja tam jest według mnie bez sensu. Do rzeczy: piszę aktualnie dość zaawansowaną grę i chciałbym, żeby była jak najbardziej elastyczna. W grze jest kilka ras (każda ma inne ceny budynków, produkcję itp... ) oraz niektóre parametry są zależne od pory roku (jak na przykład produkcja). Wydaje się, że wystarczy zastosować dekorator, lecz sprawa jest trochę bardziej skomplikowana. Różne pory roku w mniejszym lub większym stopniu modyfikują parametry u różnych ras. Na chwilę obecną było mnóstwo różnych klas w stylu WinterCarthageBakery, SpringCarthageBakery... więc w finalnej wersji wyszłoby mi ponad 600 klas co jest niedopuszczalne i nieelastyczne. Kolejnym pomysłem było coś takiego: Każda klasa budynku dla danej rasy dziedziczyłaby po jakiejś klasie abstrakcyjnej w której zaimplementowany byłby mechanizm wyboru odpowiedniej zmiennej z danymi (tzn. czy zimową czy może letnią tablicę z kosztami). W ten sposób ograniczyłbym liczbę klas do ok. 150, lecz rozwiązanie znowu nie jest zbyt elastyczne. Może macie jakiś propozycje, jak zbudować elastyczniejszy system? Może trzymać ceny w bazie danych i cache'ować tylko te dla danej pory roku? Czekam na wszystkie opinie na ten temat. Ten post edytował KOMPsognat 10.02.2007, 19:34:20 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 20 Pomógł: 0 Dołączył: 23.10.2006 Ostrzeżenie: (0%) ![]() ![]() |
Tak też od początku myślałem, ale wpadała mi do głowy jeszcze taka myśl. Brały by udział trzy klasy: budynek (np. Bakery), plemię (np. Carthage) oraz sezon (czyli np. Winter). I teraz widzę to tak:
1. Konstruktor budynku oczekuje nacji gracza 2. Następnie tworzy egzemplarz klasy nacji i pobiera z nich tylko interesującą tablicę (w tym wypadku Bakery) z modyfikatorami parametrów budynku 3. Podczas tworzenia klasy Carthage ta wywołuje konstruktor klasy Winter która zwraca modyfikatory dla danego budynku danej nacji. 4. Klasa Carthage zwraca już dane po "konfrontacji" z danymi z klasy Winter. 4. Gdy klasa Bakery otrzyma wszystkie dane to zwraca ostateczny koszt budynku. Wymyśliłem to na szybko jadąc w tramwaju, ale może coś się z tego się urodzi coś sensownego. Bardzo prosiłbym o opinie na ten temat. Aha. Nie przejmujcie się chwilowo modyfikacją parametrów tych poszczególnych klas... Jako tako również mam to obmyślane. ---------- Edit: ---------- Kolejne przemyślenia: Całkiem przez przypadek wyszedł mi z tego co wyżej napisałem najzwyczajniejszy dekorator:
1. Klasa Bakery zwracałaby podstawową cenę. 2. Klasa Carthage sprawdza jaki to budynek i wybiera odpowiednie modyfikatory:
3. Na podobnej zasadzie działa klasa Winter, zwracając kolejną tablicę po modyfikacjach. Ten post edytował KOMPsognat 4.02.2007, 08:25:03 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 8.10.2025 - 02:30 |