Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Gra internetowa - hierarchia klas
KOMPsognat
post
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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
dr_bonzo
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


Kilka przemyslen, moze cie gdzies doprowadza.
[przyjmuje do obliczen 4 pory roku, 3 klasy]

1. pora roku nie moze byc zapisana w klasie budynku, bo gdy zmieni sie pora roku ot bedziesz musial wymienic obiekt budynku (zniszczyc stary utworzyc nowy), czyli SpringCarthageBakery odpada.

2. jak bardzo sa podobne sa do siebie budynki? Wszystkie maja tylko atrybut Produkcja? czy roznia sie ? Produkcja Tego, Prod. Tamtego,inny budynek Tego nie produkuje?

3. jak bardzo roznia sie od siebie budynki roznych ras? To sa te same budydnki rozniace sie tylko wielkoscia produkcji? czy kazda rasa ma specyficzne budynki, o roznej produkcji?

4. jak bardzo rozne sa reguly modyfikujace produkcje? Dla danej pory roku i danej rasy modyfilkator dla wszystkich budynkow bedzie taki sam (4x3 klas) czy inny (4x3xilosc_rodzai_budynkow)?

5. przechowywanie modyfikatorow (dla pogody i rasy) w samym budynkow tez odpada: dodanie nowej rasy to wyedytowanie wszystkich klas budynkow

//
6. Wlasciwie wszytko zalezy od jednolitosci budynkow i jednolitosci wyznaczania modyfikatorow. Jesli budynki sa identyczne a modyfikatory wyrazaja sie "pojedynczym" prostym wzorem

i wtedy:
  1. <?php
  2. $modifier = $season->getProductionModifierFor( $player->race );
  3. $production = $building->getProduction( $modifier )
  4. ...
  5. function getProduction( $mod )
  6. {
  7. return $this->baseProduction * $mod
  8. }
  9.  
  10. // albo
  11.  
  12. return $mod->modifyProduction( $this->baseProduction )
  13. ?>


A jak to w samej bazie wyliczac? -- woooo, nie wiem
Go to the top of the page
+Quote Post

Posty w temacie
- KOMPsognat   Gra internetowa - hierarchia klas   3.02.2007, 13:20:54
- - NuLL   Cytatwyszłoby mi ponad 600 klas co jest niedopuszc...   3.02.2007, 15:03:03
- - KOMPsognat   Ech... złe słowo Ale nieelastyczne jak ...   3.02.2007, 15:23:48
- - dr_bonzo   Kilka przemyslen, moze cie gdzies doprowadza. [prz...   3.02.2007, 17:29:47
- - KOMPsognat   Ad.1. Czemu odpada? Mam powiedzmy porę roku pobran...   3.02.2007, 18:17:48
- - dr_bonzo   1-6. Sorry -- myslalem za bardzo OOP i o aplikacj...   3.02.2007, 19:45:05
- - KOMPsognat   Tak też od początku myślałem, ...   3.02.2007, 20:22:46
- - dr_bonzo   Dekorator to nie bedzie, bo w dekoratorze wszystki...   4.02.2007, 12:47:20
- - KOMPsognat   Ad.1. Równie dobrze można to nazwać Wint...   4.02.2007, 14:08:55
- - Secator   Swoją drogą w nie lepiej stosować czegoś w stylu: ...   6.02.2007, 02:16:45
- - KOMPsognat   Napisałem, że modyfikatory są zróżnicowane. Nie ma...   6.02.2007, 19:19:11
- - KG-   No i to jest wg mnie najlepsze rozwiązanie, bawien...   8.02.2007, 21:22:31
- - Secator   CytatNapisałem, że modyfikatory są zróżnicowane. N...   8.02.2007, 23:05:40
- - KOMPsognat   Hehe... akurat w tym przecież nie ma nic trud...   9.02.2007, 08:17:41
- - bacca   Miałem kiedyś taki problem. Jeśli mogę jakoś pomóc...   9.02.2007, 23:57:39
- - KOMPsognat   Chyba zostanę przy swoim pomyśle, gdyż nie będzie ...   10.02.2007, 08:00:00
- - bacca   Przeczytaj jeszcze raz punkt 3. i 4. Naprawde da s...   11.02.2007, 11:09:35
- - KOMPsognat   No to muszę przyznać, że Twój sposób drastycznie r...   11.02.2007, 12:33:17
- - Ace   heh... Nie po to sa bazy danych, zeby zapisywac po...   11.02.2007, 17:28:51
- - KOMPsognat   I łatwo zerżnąć komputer. Jeżeli mam wykonywać ok....   11.02.2007, 19:44:15
- - Ace   Przeczytaj dokladnie to co napisalem. Baza to po...   12.02.2007, 13:22:40
|- - KG-   Cytat(Ace @ 12.02.2007, 13:22:40 ) Pr...   28.02.2007, 14:23:48
- - KOMPsognat   Racja. Nie dopatrzyłem tego cache :] Nie musz...   13.02.2007, 19:26:35
- - dr_bonzo   CytatTeraz musisz połączyć się do 500 serwerów, wy...   28.02.2007, 14:57:51
- - Turgon   Szczerze powiem jak update się robi, to tak c...   28.02.2007, 15:17:26
- - KOMPsognat   No właśnie ten cennik będzie do...   28.02.2007, 20:39:46
- - Ace   Hehe, a powiedz mi jaka jest roznica miedyz wykona...   1.03.2007, 13:37:40
- - KG-   CytatTrzymanie wszystkiego w plikach textowych - u...   2.03.2007, 17:40:55
- - Ace   Czyli robiłeś testy i mówisz, że baza nie wytrzyma...   5.03.2007, 09:46:07
- - KG-   Wytrzyma czy nie wytrzyma to zbyt generalne poj...   7.03.2007, 14:33:19
- - Vogel   MySQL lepiej sobie odpuścić do takich projektów. P...   7.03.2007, 15:52:21
- - mike_mech   ~Vogel przerzuć się na wspomnianego przez siebie M...   7.03.2007, 18:00:18


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 8.10.2025 - 16:32