PHP - časovanie
PHP - časovanie
Zdravím !
Zaujímalo by ma, ako sa dá v PHP spraviť nejaké časovanie. Ak je to teda vôbec možné.
Príklad :
Máte nejakú tú browser-hru (nie flash ale tie klikačky kde máte postavu/dedinu atď..) a dáte si postaviť povedzme dom. To by malo trvať napr hodinu. Vy sa z tej hry kľudne aj odhlásite, vypnete PC, prídete o hodinu a tá budova stojí.
Mňa by zaujímalo, ako niečo takéto vytvoriť.
Napadá ma jedna možnosť a to : pri kliknutí na postaviť budovu sa do Db zapíšu time kliknutia a dokončenia no a cez CRON potom nejaký php skript skontroluje, či už ten čas vypršania nenastal a podľa toho by už zariadil iné veci...
Ale myslím si, že to by nebolo najefektívnejšie riešenie. Keby tam bolo 500 hráčov a každý z nich si dal niečo postaviť no a ten php skript by robil takéto výbery a celkovo operácie s db by bolo asi dosť pomalé. A to by sa muselo vykonávať každú sekundu.
Existuje nejaké lepšie riešenie ?
Ďakujem
Zaujímalo by ma, ako sa dá v PHP spraviť nejaké časovanie. Ak je to teda vôbec možné.
Príklad :
Máte nejakú tú browser-hru (nie flash ale tie klikačky kde máte postavu/dedinu atď..) a dáte si postaviť povedzme dom. To by malo trvať napr hodinu. Vy sa z tej hry kľudne aj odhlásite, vypnete PC, prídete o hodinu a tá budova stojí.
Mňa by zaujímalo, ako niečo takéto vytvoriť.
Napadá ma jedna možnosť a to : pri kliknutí na postaviť budovu sa do Db zapíšu time kliknutia a dokončenia no a cez CRON potom nejaký php skript skontroluje, či už ten čas vypršania nenastal a podľa toho by už zariadil iné veci...
Ale myslím si, že to by nebolo najefektívnejšie riešenie. Keby tam bolo 500 hráčov a každý z nich si dal niečo postaviť no a ten php skript by robil takéto výbery a celkovo operácie s db by bolo asi dosť pomalé. A to by sa muselo vykonávať každú sekundu.
Existuje nejaké lepšie riešenie ?
Ďakujem
Re: PHP - časovanie
Toto kľudne môžeš robiť až keď sa hráč prihlási.
Máš zaznamenaný čas dokončenia. Ak sa hráč prihlási pred ním, vypíše, koľko ostáva. Ak sa prihlási po ňom, zobrazí sa mu postavená budova a záznam sa zmaže.
Máš zaznamenaný čas dokončenia. Ak sa hráč prihlási pred ním, vypíše, koľko ostáva. Ak sa prihlási po ňom, zobrazí sa mu postavená budova a záznam sa zmaže.
Re: PHP - časovanie
a ako by potom osetril interakciu keby je tam viac hracov,
a teda super by poslal utok, ktory dorazi za 1hodinu, ale pred tym naklikal hrac 200 obranych vojakov, ktory sa za tu hodinu maju vyrobit, no hrac ktory si ich naklikal sa uz do tej hodiny neprihlasi?
Ma napadaju len same 'predvypocty', ktore by sa vypocitavali pri kazdej zmene ovplyvnujucej vysledok, a teda ze vlastne by bolo vsetko vopred dane ako to dopadne (podla simulacie ze co vsetko bude o tom case v dedine), ale to je asi dost komplikovane riesenie.
a teda super by poslal utok, ktory dorazi za 1hodinu, ale pred tym naklikal hrac 200 obranych vojakov, ktory sa za tu hodinu maju vyrobit, no hrac ktory si ich naklikal sa uz do tej hodiny neprihlasi?
Ma napadaju len same 'predvypocty', ktore by sa vypocitavali pri kazdej zmene ovplyvnujucej vysledok, a teda ze vlastne by bolo vsetko vopred dane ako to dopadne (podla simulacie ze co vsetko bude o tom case v dedine), ale to je asi dost komplikovane riesenie.
-
audiotrack
VIP
- Príspevky: 25958
- Registrovaný: 09 sep 2005, 18:39
- Kontaktovať používateľa:
Re: PHP - časovanie
nemôže to byť vopred rozhodnuté, lebo to nedokážeš rozhodnúť keďže je tam zapojený aj ľudský faktor. Vieš síce koľko má vojakov (resp. koľko bude mať) v čase príchodu armády, ale nedokážeš zistiť či mu niekto medzičasom nepošle podporu, či nepošle vojakov preč aby minimalizoval straty...
Takže tieto výsledky sa musia robiť v skutočnom čase príchodu armády. A tam to vôbec nie je zložité ako píšeš. Jendoducho sa pozre na aktuálny stav vojakov, plus výrobu ktorá má čas už v minulosti
Takže tieto výsledky sa musia robiť v skutočnom čase príchodu armády. A tam to vôbec nie je zložité ako píšeš. Jendoducho sa pozre na aktuálny stav vojakov, plus výrobu ktorá má čas už v minulosti
Re: PHP - časovanie
No, pisal som aj ze sa to vsetko prepocita pri kazdej zmene ktora moze nastat (podpora, stiahnutie vojakov a pod..)
A teda, bavime sa stale o tom, ze by sa to robilo vsetko bez cronu?
A teda, bavime sa stale o tom, ze by sa to robilo vsetko bez cronu?
Re: PHP - časovanie
No tak čo si mám z toho ako zobrať ?
Ako zase spustím skript, ktorý by zistil či už armáda prišla ?Takže tieto výsledky sa musia robiť v skutočnom čase príchodu armády.
Re: PHP - časovanie
Aké prepočítavanie? Aký cron? Veď to všetko beží na tej istej databáze, do ktorej máš prístup úplne všade.
To znamená, že si napíšeš nejaké metódy na zistenie stavu (vojska, alebo čohokoľvek) a pri nejakom útoku sa zistí aktuálny stav "obete" a podľa toho sa zariadiš.
To znamená, že si napíšeš nejaké metódy na zistenie stavu (vojska, alebo čohokoľvek) a pri nejakom útoku sa zistí aktuálny stav "obete" a podľa toho sa zariadiš.
Tvorba takejto hry si vyžaduje precízny design a softwarový návrh. Takéto veci musíš vyriešiť sám podľa tvojich potrieb - všetko musí pasovať všade. Jednoznačná odpoveď asi neexistuje.<Genius/PRO> napísal:Ako zase spustím skript, ktorý by zistil či už armáda prišla ?
Re: PHP - časovanie
Toto mi je jasné. Ja ale riešim otázku viacmenej stavu, keď bude užívateľ offline. Nebude tu hru ovládať. A nastane nejaká situácia. Napríklad naňho niekto zaútočí. A toto časovanie vyriešiť. Aby tam to vojsko dorazilo, napáchalo škodu a podobne aj keď tam ten užívateľ nebude.Aké prepočítavanie? Aký cron? Veď to všetko beží na tej istej databáze, do ktorej máš prístup úplne všade.
To znamená, že si napíšeš nejaké metódy na zistenie stavu (vojska, alebo čohokoľvek) a pri nejakom útoku sa zistí aktuálny stav "obete" a podľa toho sa zariadiš.
Re: PHP - časovanie
Áno, to čo píšeš ty je to, čo by hráč očakával. Že sa ide najesť a niekde na servri pochodujú zelený vojačikovia do boja.
To je ale z programátorského hľadiska úplne zbytočné riešiť. Tebe stačí uložiť stav konta (hráča) pri odhlásení a po prihlásení ho znovu načítať a aktualizovať (pozrieš sa na aktuálny čas a aktualizuješ všetky položky, ktoré sa aktualizujú s časom. Pozrieš sa, či nedošlo k nejakým zásahom do databázy - napríklad pri útoku na mňa. A podobne...)
To je ale z programátorského hľadiska úplne zbytočné riešiť. Tebe stačí uložiť stav konta (hráča) pri odhlásení a po prihlásení ho znovu načítať a aktualizovať (pozrieš sa na aktuálny čas a aktualizuješ všetky položky, ktoré sa aktualizujú s časom. Pozrieš sa, či nedošlo k nejakým zásahom do databázy - napríklad pri útoku na mňa. A podobne...)
Re: PHP - časovanie
Tak dík za nasmerovanie.. ja to pri svojom probléme nejako skúsim poriešiť 
Re: PHP - časovanie
Trošku OT:<Genius/PRO> napísal:Zdravím !
Zaujímalo by ma, ako sa dá v PHP spraviť nejaké časovanie. Ak je to teda vôbec možné.
Príklad :
Máte nejakú tú browser-hru (nie flash ale tie klikačky kde máte postavu/dedinu atď..) a dáte si postaviť povedzme dom. To by malo trvať napr hodinu. Vy sa z tej hry kľudne aj odhlásite, vypnete PC, prídete o hodinu a tá budova stojí.
Mňa by zaujímalo, ako niečo takéto vytvoriť.
Napadá ma jedna možnosť a to : pri kliknutí na postaviť budovu sa do Db zapíšu time kliknutia a dokončenia no a cez CRON potom nejaký php skript skontroluje, či už ten čas vypršania nenastal a podľa toho by už zariadil iné veci...
Ale myslím si, že to by nebolo najefektívnejšie riešenie. Keby tam bolo 500 hráčov a každý z nich si dal niečo postaviť no a ten php skript by robil takéto výbery a celkovo operácie s db by bolo asi dosť pomalé. A to by sa muselo vykonávať každú sekundu.
Existuje nejaké lepšie riešenie ?
Ďakujem
Všimli ste si, že travian a divoke kmeny, kingsage a im podobné hry pravdepodobne vychovajú novú generáciu programátorov hier, ktorý budú niektore zo svojich výtvorov aspoň čiastočne štylizovať práve na obraz týchto hier? Nechápem. Keby som mal teraz robiť browserovku, a bol by som úplný začiatočník, urobil by som niečo jednoduché, kde je len jedna postava, zopár vecí, zopár misii.... (Ale priznám sa, že pred 2 rokmi by som robil presne to isté.
Zmysel pre (aspoň čiastočnú) originalitu (ako jeden zo spôsobov presadenia hry a zaujatia potenciálneho hráča) prestal existovať? Alebo to príde vekom (prípadne krachom innogames, gameforge a pod.)?
Re: PHP - časovanie
ServerApp necháp ma zle. Ja som sa pýtal - ako z názvu vyplýva ako spraviť niečo na ten štýl. Tie hry - to mali byť len ako príklad.
A v podstate máš pravdu. Kde sa pozrieš a nájdeš browserovku, točí sa to dokola s tým istým príbehom...
A v podstate máš pravdu. Kde sa pozrieš a nájdeš browserovku, točí sa to dokola s tým istým príbehom...
Re: PHP - časovanie
Ach, ja som to nemyslel ako narážku na teba. Napísal som to do tejto témy len pre to, lebo je to relatívne ešte živá téma. neber to ako útok. Ale tam ďalej, to je pravda. Ten istý príbeh, 100 000 hráčov....