• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Jak działają gry typu Shakes&Fidget?

Object Storage Arubacloud
0 głosów
378 wizyt
pytanie zadane 17 lipca 2019 w PHP przez Riddick Bywalec (2,600 p.)
Interesuje mnie jaki mechanizm stoi za odgrywaniem walki w grach typu shakes and fidget. Chodzi o moment kiedy kończysz misję i rozpoczyna się walka, i ta walka trwa nawet kiedy nie jesteś online. Chodzi mi o to czy taki mechanizm jest wogóle możliwy do zrobienia za pomocą php. To wygląda tak jakby co sekundę na serwerze był przeprowadzany jakiś proces. Pomyślałem, że można by to zrobić za pomocą crona ale nie jest to możliwe bo minimalna wartość crona to interwał co 1 minute. Za pomocą NodeJS byłoby to banalne bo mamy pełną kontrolę nad serwerem i działa to asynchronicznie a w przypadku php nie mam zielonego pojęcia jak coś takiego zaaplikować. No ale przecież te gry są właśnie na php a mimo to działają i nie zawiesza to serwera. Przecież w każdej sekundzie trzeba wykonać w takiej grze setki zapytań do bazy danych. Jak to możliwe?
komentarz 17 lipca 2019 przez niezalogowany
Równie dobrze walka może być realizowana odrazu po wybraniu zadania i dopiero wynik wyświetlany po jakimś czasie.

1 odpowiedź

+1 głos
odpowiedź 17 lipca 2019 przez AbecadloSpadlo123 Początkujący (480 p.)
przywrócone 18 lipca 2019 przez Eryk Andrzejewski
 
Najlepsza
To sa najprostsze gierki i nie ma tu zadnych zapytan co sekunde. Takie gry tworzy sie na zasadzie Eventow.

tabela z evenatmi na jej podtsawie sa dokonywane operacje matematyczne tylko.

Np mam zbroje, bron, sile na taki i takim poziomie. I walczysz z przeciwnikiem za godzine powiedzmy wiec do bazy dodajesz event ze bedzie to walka i parametry czyli kto z kim i za ile czasu. Zakladamy ze teraz wyszedles z gry na caly dzien. ale za dwie godziny twoj przeciwnik wszedl i widzi wynik walki. to jak on wszedl to php bierze czas jego zalogowania. bierze wszystkie eventy dla niego od czasu ostatnio przeliczonego (bo moze jego postac miala jeszcze inne eventy ktore byly potrzebne dla kogos innego) i przelicza.

Czyli o 13:03 miales sile 50% ale co 10 minut sila rosnie ci o 2 punkty. wiec jak przeciwnik wszedl o 15:00 a to rpogram przeliczyl tak:

13:03 sila 50%

14:03 walka (do tego czasu twoje statystyki urosly 60 min / 10 min * 2 punkty zycie czyli biles sie majac 50%+12% = 62%

przeciwnik mial 33% wtedy i ty wygrales. wiec on widzi ze przegral. Walka jest rozergana juz w momencie zdarzenia i preliczenia a ty ttlko widzisz wynik. i tak to dziala jak te plemiona itd. To sa bardzo proste w zalozeniu silniki ale skomplikowane matematycznie.
komentarz 18 lipca 2019 przez Riddick Bywalec (2,600 p.)
edycja 18 lipca 2019 przez Riddick
Rozumiem, czyli walka jest tak naprawdę rozgrywana w momencie połączenia któregoś z graczy a wszystko co wydaje się, że jest w czasie rzeczywistym tak naprawdę jest emulowane przez obliczenia, logiczne. Ale to rodzi pewne problemy, otóż co jeśli osoba trzecia potrzebuje zobaczyć wynik? Tzn nie bezpośrednio, załóżmy że mamy ranking, wtedy jeśli żadna z osób walczących się nie zaloguje to żadna nie dostanie punktów i ranking nie będzie aktualny a co jeśli od tego rankingu zależeć będzie na przykład cotygodniowa nagroda? Wtedy przed rozstrzygnięciem uruchamia się cronem skrypt który wywołuje wszystkie zaległe eventy?

Albo może jeszcze zastosować coś takiego, dla aktualności danych, żeby przy każdym logowaniu jakiegokolwiek użytkownika przeprowadzać te eventy, które powinny już się wykonać, wtedy dane będą sprawiały wrażenie jakby były cały czas aktualne.
komentarz 18 lipca 2019 przez AbecadloSpadlo123 Początkujący (480 p.)
przywrócone 18 lipca 2019 przez Eryk Andrzejewski
Wyjasnie to tak:

gracz A - ma swoj event

gracz B - ma swoj event

gracz C - ma swoj event

Zakladamy teraz ze gracz A walczy z graczem B za 20 minut  a gracz C walczy za godzine  z graczem B. Gracz A i gracz B nie beda sie logowac az do jutra. W momencie zalogowania gracza C system pobiera event dla gracza C - (walcz z graczem B) - aha czyli pobieram event dla gracza B (jesli nie ma evetu to biore jego statystyki jesli jest event a jest jaki? Walcza z graczem A)

pobieram event od gracza A ale jako system widze ze gracz A nie ma eventu wiec pobieram jego statystyki i walcze z graczem B po walce aktualizuje statystyki dla garacza A i dla gracza B oraz dla gracza B kasuje event

wracam do gracza C i walcze z graczem B. potem kasuje event dla gracza C i teraz masz tabele

Gracz A - brak nowych eventow

Gracz B - brak nowych eventow

Gracz C - bral nowych eventow

Ty jako gracz B logujesz sie i widzisz juz tylko statystyki tego co system obliczyl. System w takich grach dziala ze albo jak ty sie logujesz to oblicza twoje eventy albo jak sie nie logujesz ale twoj event jest jakos zalezny od innego gracza wtedy tez jest obliczany bez znaczenia czy sie logujesz czy nie

Eventy sa wykonywane po kazdym zdarzeniu Kliknieciu Aktywnym ktory dodaje cos do eventu. jesli by bylo po kazdym logowaniu jakiegookolwiek uzytkownika to by bylo bez sensu bo ty jako Gracz B nie masz nic wpsolnego z graczem K wiec po co tracic czas i setki obliczen dla gracza K po twoim logowaniu. zapchasz tylko gre. Licz tylko to co musisz
komentarz 18 lipca 2019 przez Comandeer Guru (601,110 p.)

Licz tylko to co musisz

Ja bym do tego dodał: i licz to jak najmniejszą liczbę razy. Jeśli wiadomo, że coś się nie zmieni przez dłuższy czas, cache'uj. 

komentarz 27 lipca 2019 przez Riddick Bywalec (2,600 p.)
Ok wszystko rozumiem, ale jeśli mamy ranking np co tydzień i od tego rankingu zależą nagrody no to wszystkie eventy jakie są w grze muszą zostać wykonane inaczej wynik nie będzie rzetelny i nagrodę może zgarnąć gracz który w rzeczywistości na nią nie zasłużył. Załóżmy że jak wchodzimy na listę rankingową to nie musi być wszystko tip top aktualne ale kiedy przychodzi do sprawdzania rankingu no to obliczenia trzeba wykonać aby wyłonić zwycięzce z wszystkich graczy na serwerze.
komentarz 28 lipca 2019 przez Comandeer Guru (601,110 p.)
No to obliczasz je tylko raz, przy wyłanianiu zwycięzcy.

Podobne pytania

0 głosów
2 odpowiedzi 3,246 wizyt
pytanie zadane 20 czerwca 2018 w Systemy operacyjne, programy przez milkaa80 Nowicjusz (120 p.)
0 głosów
1 odpowiedź 123 wizyt
pytanie zadane 5 stycznia 2023 w PHP przez rocky Nowicjusz (160 p.)
0 głosów
0 odpowiedzi 136 wizyt
pytanie zadane 13 czerwca 2022 w PHP przez AnimaVillis Stary wyjadacz (11,510 p.)

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,958 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...