Autor Zpráva
argonisius
Profil *
Dobrý den, chci zkusit udělat jednoduchou multiplayer browser hru. Chtěl bych se zeptat, jakým způsobem je u takovýchto her řešeno přidávání surovin v určitých časových intervalech. Díky.
Nox
Profil
Buď se suroviny přepočítají při návštěvě stránky ("30 surovin/hodinu, stránku sem refreshnul po 2 hodinách => +60") a kdykoli je to třeba (např. pokud úspěšný útok má vzít X% surovin tak se musí přepočítat, kolik jich hráč skutečně v ten moment má). Zjednodušení z konceptu X surovin/hodinu by bylo X surovin v ##:00 minut

Výhody: updatuje se jen to, co je třeba
Nevýhody: myslim že se musí ukládat, zda už bylo updatováno; celkově se musí kontrolovat a updatovat často ... extra problém pokud tím chceš řadit výpis hráčů; jednotlivé query jsou náročnější než vzít všechno hromadně

Nebo CRONem updatovat v intervalech... pokud je interval hodina nebo desítky minut, tak je to ok, ale pokud zisk probíhá spojitě (aka hra začínající na Trav...) jakoby každou vteřinu, tak to asi takto nebude realizovatelné

Výhody: vše se vezme naráz -> jednorázově zdlouhavé (může být na chvíli lag) ale při dlouhých intervalech v celkovém kontextu rychlé; ve vlastním systému se nemusí provádět žádné kontroly
Nevýhody: mohou se updatovat nepotřebné záznamy, update prostě proběhne na všechny hráče, ikdyž to nemusí být potřeba; při krátkém intervalu už zátěž může být velká až fakt velká
argonisius
Profil *
Tak, jestli jsem to dobře pochopil, šlo by to udělat takto:?

1) Script zjistí, kdy byl poslední update (čas uložen pomocí funkce NOW v databázi)

2) Dále zjistí aktuální čas - Jaká funkce se dá použít zde?

3) Vypočítá, kolik času uběhlo a podle toho přidělí suroviny.

4) Přičte suroviny k těm v databázi, uloží aktuální čas
Šlo by to tak? Ještě bych se chtěl zeptat, jak se to dělá, když se mění příjem surovin - jako ostatně všude. To se mění uložená hodnota v databázi, která určuje, kolik ten hráč dostává za hodinu?
tiso
Profil
argonisius: 1.-4. áno, presne tak. Vzhľadom na otázku v 2. si myslím že nemáš dostatočné vedomosti aby si vedel naprogramovať hru, takže sa najskôr ešte veľa uč.
K poslednej otázke: áno, ale trošku šikovnejším spôsobom. Predstav si že sa ti za 2 hodiny zvýši príjem niektorej suroviny. V databáze musí byť aktuálna hodnota, pretože si stránku môžeš pozrieť za hodinu alebo aj za 4. Riešenie cez CRON (aktualizácia keď sa zmení príjem) je nešikovné, narastá záťaž servera. Takže sa to robí tak, že sa do databázy uloží akcia (dátum, čas a čo a o koľko sa zvýši/zmení) No a potom sa pri počítaní počtu surovín po bode 2. vytiahnu ešte všetky akcie ktoré nastali medzi tými dvomi časmi. Výpočet potom vyzerá nejak takto:
surovina=(cas_akcie - cas__poslednej_aktualizacie) * stary_prijem_suroviny + (aktualny_cas - cas_akcie) * novy_prijem_suroviny)
Samozrejme že akcií týkajúcich sa jednej suroviny môže byť viac, takže ten výpočet je kúsok zložitejší.
argonisius
Profil *
Díky... ano, s php jsem začal nedávno, ale myslel jsem, že bych se ho tímto způsobem mohl lépe naučit - i kyž výsledná hra bude kostrbatě napsaná....
argonisius
Profil *
Mohl byste mi někdo dát odkaz na nějakou svoji prvotinu z oblasti browserových her? Díky.
Nox
Profil
3) že by opět NOW() ? :)

Mohl byste mi někdo dát odkaz na nějakou svoji prvotinu z oblasti browserových her? Díky.

Takových lidí tu asi moc nebude (a sám nic běžícího zatím nemám... WIP :) ), lepší to budeš mít třeba zde: http://community.bbgamezone.net (anglicky)
argonisius
Profil *
Díky... pracuješ na něčem?
Nox
Profil
http://www.abbreviations.com/WIP
sagto
Profil *
hosi ale to jie antiherni bo jiestli pak prijide nekdo kdo na neji zautoci ziska mene surovin nez kdyby byl online... pokud to ma byti realtime tak staci udelat to co u tahovych az na to ze se nepridavajii kola ale vypocitavajii suroviny navic... takze aktivne si zjiisti vsechno o cronech... jiestli ti server tuhle vec podporujie a jiak casto to zpoustet...
Joker
Profil
sagto:
Tak to jsem fakt nepřeluštil. Nešlo by to napsat česky?
sagto
Profil *
cron : soubor který se spouští díky serveru v určitý okamžik... díky němu můžeš přidávat suroviny každé zemi podle určitých pravidel třeba každých 5 minut...
tiso
Profil
sagto [#10] čo to melieš za nezmysly? Samozrejme že keď je útok, tak sa suroviny dopočítajú na čas útoku. Ako som písal vyššie CRON na toto nie je dobrá cesta. Keď, tak nejaký menej častý (raz za deň, raz za hodinu), ktorý prejde všetky nezapísané actions ktoré už uplynuli a urobí príslušné zmeny v databáze.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: