![]() |
![]() |
![]() ![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 1 182 Pomógł: 115 Dołączył: 4.03.2009 Skąd: Myszków Ostrzeżenie: (0%) ![]() ![]() |
Potrzebuję zaprojektować taki system, który umożliwi mi tworzenie questów w grze MMORPG (przez przeglądarkę, na symfony).
Macie jakieś ciekawe pomysły? Ja myślałem nad rozwiązaniem na bazie eventów, każda akcja w grze (zatopienie statku, przejęcie fortu, zdobycie przedmiotu...) wywołuje zdarzenie, które jest kierowane do systemu. Rejestrowałbym rozpoczęte przez gracza zadania w bazie, a każde takie zadanie podpinało by swoje event listenery jak w symfony. Gdy zdarzenie pasuje quest przechodzi na kolejny etap/kończy się z jakimś bonusem dla gracza. Etap questu też byłby zapisywany do bazy, i w zależności od etapu rejestrowane by były inne listenery. |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
podpinało by swoje event listenery jak w symfony. To, że event listener (a właściwie Event Dispatcher) jest w Symfony wcale nie znaczy, że ona to wynalazła. Taka architektura jest znana od dawien dawna a dopisywanie "jak w symfony" wprowadza wielu w błąd "przypisywania wynalazku". Gdy zdarzenie pasuje quest przechodzi na kolejny etap/kończy się z jakimś bonusem dla gracza. Etap questu też byłby zapisywany do bazy, i w zależności od etapu rejestrowane by były inne listenery. Eventowe podejście jest bardzo dobre. Tak samo jak i pomysł aby zdarzenia podpinać wtedy kiedy quest zostanie rozpoczęty. Gdybyś tylko rozwinął swoją myśl za pomocą kawałka kodu to moglibyśmy konkretniej porozmawiać. Ten post edytował wookieb 14.11.2010, 21:31:17 -------------------- |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 1 182 Pomógł: 115 Dołączył: 4.03.2009 Skąd: Myszków Ostrzeżenie: (0%) ![]() ![]() |
Wiem, tylko że najbliższa znana mi implementacja w PHP jest właśnie w symfony. Nawiasem mówiąc według dokumentacji ten akurat system zdarzeń jest wzorowany na Cocoa (z MacOSa).
Jutro postaram się coś wytworzyć, dzisiaj już stan umysłu mi nie pozwala ![]() |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 49 Pomógł: 1 Dołączył: 9.10.2008 Ostrzeżenie: (0%) ![]() ![]() |
Hmmmm zastanawiam się jak by to zrobić stricte obiektowo.
1. Model UserAction mógłby mieć pole $related_quests=array(). 2. Podczas wykonania akcji (funkcją UserAction::execute), sprawdzane byłoby, czy istnieje powiązanie między User::$id, a Quest::$id (przy czym Quest::$id pochodzi z UserAction::$related_quests 3. Jeśli znalazły się Questy związane z tą akcją, można utworzyć model UserQuest(Quest::$id), a w nim uruchomić UserQuest::Quest()::executeStage(User::$id, self::$stage+1). Wszystkie modele i operacje oczywiście musiałyby znaleźć stosowne odzwierciedlenie w bazie danych. PS. Statyczne odwołania ze względu na pokazanie co gdzie, nie do implementacji :D. Można by w ten sposób zrezygnować z Eventów i zaimplementować w dowolnym projekcie... Ale to raczej przemyślenia niż propozycja. |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 1 182 Pomógł: 115 Dołączył: 4.03.2009 Skąd: Myszków Ostrzeżenie: (0%) ![]() ![]() |
Przykładowo:
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 20.08.2025 - 07:32 |