Witam, pisze grę w php i zastanawiam się jak rozwiazać problem obliczeń..
Pewnie każdy z was grał lub widział gry takie jak ogame, plemiona, travian itd. Ja pisze podobna grę w której będą występować surowce, surowce te będą obliczane na podstawie aktualnego poziomu rozbudowania budynków. Wiem, że muszę uwzględnić wszystkie zdarzenie w grze, np. odjęcie surowców przy budowie, napadzie etc.
Ale zastanawiam się w jaki sposób je najlepiej obliczać. Myślałem nad tym, aby zapisywać w bazie datę ostatniego update'u tychże surowców co wynika z faktu, że miałyby być aktualizowane gdy następuje jakaś akcja ze strony gracza, bądź wymuszona przez inne zdarzenia (ataki, zmiana poziomu budynków). Jednak pierwszą rzeczą o której pomyślałem to: "Co jeśli gracz będzie odświeżał stronę w bardzo małych (ms) odstępach czasu?". Na liczbach całkowitych nie będę w stanie określić czy dodać mu już ten jeden surowiec czy jeszcze nie na podstawie kilku ms. Surowców może być bardzo duża ilość, dlatego odpada opcja zapisywania ich jako DOUBLE.
Można je zapisywać jako całkowite, a w osobnej kolumnie ich miejsca po przecinku, ale to zbyt dużo zabawy.
Drugą opcją mogłoby być zapisywanie ich zmiany tylko podczas większych zdarzeń, a nie samego refresh'u strony (dość rozsądna opcja).
Inną opcją może być napisane osobnego serwera w c++, który będzie operował na tej bazie i robił obliczenia. CRON wg. mnie odpada, bo to zbyt dużo obliczeń i wczytywanie wszystkiego za każdym razem z bazy to masakra dla serwera.
Wartym zastanowienia się tematem są zdarzenia, bo wyobraźmy sobie sytuację :
-> 12:00:00 - Logout
-> 12:36:21 - Atak i zrabowanie surowców
-> 12:47:33 - Budowa kopalni dobiegła końca, a więc zmiana produkcji / h
-> 12:56:11 - Powrót floty z łupem
-> 13:01:11 - Magazyn zapełniony
-> 13:13:01 - Budowa magazynu dobiegła końca (do tego czasu produkcja była wstrzymana)
-> 13:30:00 - Login
I teraz trzeba wszystko obliczyć i uwzględnić każde zdarzenie po czym podać aktualny stan surowców..
Zastanawiam się która opcja jest lepsza? Obliczenia podczas akcji ze strony gracza? (w międzyczasie wszystko pozostaje "zawieszone?"). Czy może napisanie serwera w C++ i aktualizacja na bieżąco?
Czy ktoś ma doświadczenia w pisaniu gier przeglądarkowych i mógłby mi posłużyć pomocnymi radami i pomysłami?