Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Ogame - symulacja walk, obsługa czasu
Forum PHP.pl > Inne > Hydepark
My4tic
Właśnie ojciec siedział przy kompie i grał w OGame (www.ogame.pl) i tak zastanawiałem się jak jest zrobiona ta gra.

Chodzi mi o symulacje walk o okreslonym czasie.
Np. ktos wysyła flote, która uderza w jakąś tam planete za 45 min.

Czy to jest zrobione przez crona? Skrypt uruchamiający się w każdej sekundzie i sprawdzający czy przypadkiem któryś z userów nie atakuje innego? To chyba byloby strasznie obciążające serwer?

Mamy np.

[czas startu] + [czas lotu] = [czas ataku] > zapis do SQL

i cron uruchamiający sie co 1 sek. sprawdza czasy ataków i dalej symuluje walki.

Jeszcze zastanawia mnie czy czas wykonania takiego skryptu nie bylby większy od 1 sek. Przy kilku tysiącach userów jak to ma miejsce na OG to chyba tak.

Nie wiem czy jasno opisałem o co mi chodzi ale mam nadzieje ze sobie poradzicie tongue.gif

-- edit --

Jakby kogoś interesowało to przed chwilą znalazłem zlecenie w podobnych klimatach:
http://forum.php.pl/index.php?showforum=12
bela
Chyba łatwiej odpalić serwer aplikacji, niekoniecznie napisany w php, ale też tam można. Jest on odpalony z shella i chodzi na okrągło. Jest w nim pętla, w praktyce nieskończona dzięki której skrypt działa ciągle.
My4tic
Serwer aplikacji? Czyli pod samym php cięzko będzie coś takiego zrobić? Chyba troche nieoptymalnie...
bela
Czemu? Poszukaj projektu Hive. Był laurentem konkursu Zenda, w dodatku napisany przez Polaka.
My4tic
Dzięki. Na pewno poczytam o tym. Jakby ktoś miał jeszcze jakieś pomysły to będę wdzięczny winksmiley.jpg
hwao
Co wy... to jest ogame biggrin.gif

Poprostu jak ktos wywoluje akcje zwiazana z iloscia floty a do tej pory symulacja nie zostala przeprowadzona zostaje ona wygenerowan i dane zostaje zupdejtowane

IMHO
mike
Uważam podobnie jak ~hwao.
Szczeże ątpię żeby tam jaieś serwery chodziły.

Po prosu zawsze keidy jest żądanie pokazania jakiejś operacji wszystkie algorytmy sę puszczane w ruch i widac tylko ich wyniki.

Sam właśnie pisze podobna grę i takie rozwiązania będe stosował.
My4tic
Proszę jaśniej biggrin.gif Chyba nie rozumiem... przecież to gra online. Flota leci ileś tam czasu... 'obrońca' sie może zalogować i w tym czasie wysłać flote. Gdy 'agresor' doleci to juz tam nic nie będzie - czyli symulacja musi być prowadzona w czasie kiedy flota uderza. Czyli skrypt symulujący walke musi być uruchomiony w czasie uderzenia więc jakoś ten czas musi być sprawdzany?
ActivePlayer
http://forum.php.pl/index.php?showtopic=30...ndpost&p=177338
tu juz ktos cos o tym pisal... ale nie czytalem dokladnie
mike
Powiedzmy leci sobie flota. Zainteresowani wynikami są Obońca i Agresor.

Jeśli czas jaki potrzebny jest na dolecenie jeszcze sięnie skończył a nastąpiło żądanie wyników, to pokazana jest informacjia kiedy doleci (data dolotu - data obecna). Nie ważne kto prosi o wyniki.

Jesli natomiast czas się skończył to wcale serwer nie musi wykonać algorytmów walki dopóki ktoś o nie nie poprosi.
Jesli ktoś to zrobi (nieważne czy Agresor czy Obrońca) to serwer wykonuje algorytmy i pokazuje wynik (który jest też zapisywany).
Jeśli o wyniki poprosi kolejny to już widzi wyniki wygenerowane.

Do tego nic nie musi chodzić cały czas.

Po co ma chodzić serwer, który będzie wykonywał algorytmy w chwili kiedy nikt nie prosi o wyniki tych obliczeń?
My4tic
Hmmm... słusznie :-) Chyba już poźno bo dopiero teraz złapałem o co chodzi :-) Dzięki.
Kas
Ale przecież Obrońca może w czasie lecenia floty wroga np. rozbudowac obronę i efekt stracia będzie inny, prawda?
Radarek
No pewnie ze bedzie inny, bo przeciez "symulacja" walki zostanie przeprowadzona przy pierwszym rzadaniu wyniku (zalogowaniu), ale juz po dotarciu floty do celu. Czyli dopoki flota leci mozesz sobie spokojnie budowac obrone i bedzie to uwzglednione podczas symulacji walki.
SHiP
No tak tylko załużmy że jest taka sytuacja

mike_mech wysyła do mnie 100 cieżkich myśliwców zostało 5 minut do ich wyladowania na mojej planecie. Ja buduje 200 dzialek i wylogowuje sie... Ani ja ani mike_mech nie gramy przez kilka dni. następnie wchodze loguje sie, generuje mi sie walka tyle że juz z działkami które napewno nie zdążyły by sie wybudować w 5 minut ;] I mike_mech dostaje w dupe tongue.gif


Problem dotyczy również resztek po walce w przestrzeni

EDIT:

Moim zdaniem obnliczanie wyników starć nie zależy tylko od agresora i obrońcy a od każdego gracza. Po prostu za kazdym razem sprawdzane jest czy nie ma w bazie zadnej walki która powinna sie wygenerować. Jesli jest to jest generowana...
Radarek
Niekoniecznie. Przeciez skrypt symulujacy ma dostep do tego kiedy zaczales budowac dzialka obronne i o ktorej walka miala sie rozpoczac. Wtedy tych dzialek nie bierze do symulacji.
DeyV
Niestety - nie może to wyglądać w sposób przedstawiony przez mike_mech'a

W tym konkretnym przypadku dlatego, ponieważ zainteresowanych jest więcej, niż tylko ageresor i obrońca.

Są jeszcze sepy winksmiley.jpg które czekają na złom...

Chyba że odpowiednie sprawdzanie podpięte byloby zarówwno pod odpowiednie zachowania agresora i obrońcy, ale - dodatkowo - również pod akcję podglądu galaktyki każdego, kto wejdzie do odpowiedniego układu.

Jeśli jednak poszlibyśmy tym tropem - musielibyśmy odpalać całą kolejkę zdarzeń związanych z danymi osobami i planetami w okreslonym ukladzie.
Troszkę to skomplikowane by było...
Puciek
@DeyV: skomplikowane ale jednak wydajniejsze niz kron tongue.gif
mike
Cytat(DeyV @ 2006-01-18 23:03:34)
Są jeszcze sepy winksmiley.jpg które czekają na złom... (...)

No tak całkowicie zapomniałem o reszcie :roll2:
Dawno już w to nie grałem.

Jednak cron.
Radarek
Albo jakis programik, ktory robi za symulator wszystkich czynnosci, na okraglo uruchomiony, jak jest cos do zasymulowania to robi to, a wynik zapisuje do bazy, jak nie ma to czeka.
mike
Cytat(Radarek @ 2006-01-19 01:44:29)
Albo jakis programik, ktory robi za symulator wszystkich czynnosci, na okraglo uruchomiony, jak jest cos do zasymulowania to robi to, a wynik zapisuje do bazy, jak nie ma to czeka.

Skrypt w creon'ie :?: tongue.gif
hwao
Co Wy gadacie, tu przeciez wcale nie trzeba cron'a.

To da sie napisac poprostu jak ktos potrzebuje tych danych to sa parsowane 1 raz i tyle... myslicie ze skad bylo tyle bugow?

taki cron obciazyl by tak baze ze nie wiem czy by to w ogole dzialalo winksmiley.jpg

btw: myslicie czemu ze przegladanie galaktyki tyle trwa?
Radarek
Cytat(mike_mech @ 2006-01-19 07:27:49)
Cytat(Radarek @ 2006-01-19 01:44:29)
Albo jakis programik, ktory robi za symulator wszystkich czynnosci, na okraglo uruchomiony, jak jest cos do zasymulowania to robi to, a wynik zapisuje do bazy, jak nie ma to czeka.

Skrypt w creon'ie :?: tongue.gif

Niekoniecznie smile.gif. Rozumiem, ze cronowy skrypt musialby byc uruchamiany co jakis czas (1min?), a program o ktorym mowie moglby byc uruchamiany raz, dzialalby caly czas (przez co nie tracilby czasu na uruchamianie). Mnie i tak wydaje sie, ze nie ma wykonywanych symulacji, tylko podczas rzadania dostepu do danych, ktore wymagaja zasymulowania tego co stalo sie w przeszlosci jest to robione.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.