Drukowana wersja tematu
Forum PHP.pl _ Przedszkole _ [PHP] surowce w grze internetowej
Napisany przez: eska chojnice 12.11.2010, 14:34:35
nie wiem czy graliście kiedyś np. w plemiona ale chodzi mi o coś takiego:
z boku jest napisane np. 60 gliny na godzinę.
Jak zrobić, aby co minutę do stanu gliny dodawało się 1gliny?
Napisany przez: Daiquiri 12.11.2010, 14:37:36
Skorzystać z crona? Ewentualnie (w zależności od kontekstu) po odświeżeniu okna przeliczać ile minut minęło.
Napisany przez: qrzysztof 12.11.2010, 14:39:44
Ale bez odświeżania strony ma się dodawać czy z odświeżaniem?
Napisany przez: eska chojnice 12.11.2010, 15:17:13
Cytat(qrzysztof @ 12.11.2010, 14:39:44 )
Ale bez odświeżania strony ma się dodawać czy z odświeżaniem?
to ma się samoczynnie dodawać co 30 min.
Napisany przez: Daiquiri 12.11.2010, 15:24:29
Cytat(eska chojnice @ 12.11.2010, 15:17:13 )
to ma się samoczynnie dodawać co 30 min.
CRON, piszesz skrypt dodawania i odpalasz go co 30 min.
Napisany przez: IceManSpy 12.11.2010, 15:28:03
+ AJAX.
Napisany przez: flashdev 12.11.2010, 15:30:50
Cytat(Daiquiri @ 12.11.2010, 14:37:36 )
Skorzystać z crona? Ewentualnie (w zależności od kontekstu) po odświeżeniu okna przeliczać ile minut minęło.
Proszę Cię, nie pisz na tym forum takich strasznych rzeczy
Do autora tematu:
W js odpalasz:
Kod
setIterval(function(){
// hunkcja dodajaca jeden czegos tam
}, 6e4);
W PHP obliczas ilość surowców na rządanie przeglądarki. Nie korzystaj z żadnych Cronów. Po prostu jeśli jest potrzeba uzyskania surowca to sprawdzasz ile było ostatnio i kiedy. I dodajesz do stanu surowca:
Kod
surowiec += (teraz - kiedy)[s] * wydobycie_na_sekunde;
Napisany przez: eska chojnice 12.11.2010, 15:51:45
a trzeba wykorzystać js ?
Napisany przez: Daiquiri 12.11.2010, 15:52:44
A czy ja stwierdziłam, że musi to być CRON? Napisałam przecież, że można to obliczyć wtedy kiedy trzeba (np. przeliczając czas). . Nie znam plemion, wykorzystałam analogię do innych znanych mi gier via www.
Napisany przez: qrzysztof 12.11.2010, 16:47:00
Samym PHP tego na pewno nie zrobisz skoro nie chcesz odświeżać strony.
Jeśli to ma być czysto informacyjne to możesz to zrobić w JavaScript za pomocą funkcji setInterval() - tak jak ktoś już wyżej napisał.
Albo za pomocą setTimeout() - rekurencyjnie
glina = document.getElementById('glina');
function countdown(units)
{
setTimeout(function(){countdown(units+1);}, 60000);
glina.innerHTML=units;
}
Nie wiem czy jest sens podróżować z tym do serwera co minutę.
Natomiast jeśli ktoś chce z tej gliny coś budować (czy ją sprzedać, albo zrobić z niej jakikolwiek inny użytek) to musi być już podróż do serwera (żeby nie było oszukiwania). Tam musi być obliczone ile klient ma gliny na podstawie upływu czasu.
Napisany przez: Mephistofeles 12.11.2010, 17:00:55
Gdyby zegar w Windowsie co sekundę synchronizował czas to wątpię, czy byś z internetu mógł normalnie korzystać ;].
Zarżniesz serwer gdy będziesz co chwilę aktualizował dane w bazie. Takie rzeczy robi się na żądanie, co jakiś czas zapisując do bazy wynik i czas ostatniego liczenia (to może być wywoływane cronem).
Napisany przez: zegarek84 12.11.2010, 17:27:55
Cytat(eska chojnice @ 12.11.2010, 14:34:35 )
nie wiem czy graliście kiedyś np. w plemiona ale chodzi mi o coś takiego:
z boku jest napisane np. 60 gliny na godzinę.
Jak zrobić, aby co minutę do stanu gliny dodawało się 1gliny?
nie zmieniasz stanu surowców w bazie - w bazie zmieniasz stan surowców po zdarzeniu mającym wpływ na liniowy przyrost tych surowców który da si ę obliczyć od ostatniej takiej zmiany... - co mam na myśli - po grabierzy jak jednostki coś zniosą aktualizujesz w bazie - po wybudowaniu/zburzeniu kopalni aktualizujesz w bazie... po wybudowaniu budynku lub jak Cię orobią lub jak wydasz na jednostki aktualizujesz w bazie... po wybudowaniu zburzeniu spichlerza aktualizujesz maksymalny limit surowców....
i teraz jak nic się nie zmienia tylko wchodzisz na stronę to od ostatniej modyfikacji liczysz ze wzorów ile jest w aktualnym czasie surowców (ile przybyło + ile było) - to w PHP podczas wchodzenia na stronę lub jak przy innych akcjach potrzebujesz aktualnej liczby surowców...
i teraz po stronie javascript to tylko dodatek [w plemiona można grać bez włączonego js] - gdy wyświetlisz na stronie ile masz surowców to javascript zajmuje się dodawaniem surowców wizualnym a nie tym w bazie na bieżąco - gdzie w kodzie JS zamieszczasz sobie poziom kopalni a liczbę surowców na start masz wyświetloną na stronie i z niej pobierasz - w sumie zamiast pobierać ze strony jak to jest na plemionach to to te ż można zawrzeć w małym fragmencie js by było łatwiej...
i żaden cron tutaj nie jest potrzebny - zmiana stanu dopiero po jakimś kluczowym zdarzeniu wywołanym przez użytkownika - przy samym wyświetlaniu też nie trzeba wpisywać aktualnej wartości - dopiero po napadzie i inne...
jak dla mnie to cron - a raczej "pseudo cron" [czasami lepiej napisać jeden proces działający stale w tle] a cron'em się wspomóc by sprawdzać czy wszystko na chodzie - to kluczowe akcje gdzie zainteresowanych może nie być - to rozliczenie ataku/rabunku - no i jeszcze rozwój wiosek koczowniczych... - a jak tak sobie myślę to z crona można pominąć na powrót jednostek, dostępnych surowców po powrocie jednostek, oraz zakończenie budowy - a i nawet burzenia raczej [tylko przy kluczowej akcji pasuje potem przepisać stan bazy do odpowiedniej formy...]
Napisany przez: CuteOne 12.11.2010, 17:32:22
A nie lepiej aktualizować podczas akcji użytkownika? a wyświetlać za pomocą zwykłej funkcji JS..
Napisany przez: zegarek84 12.11.2010, 17:50:45
Cytat(CuteOne @ 12.11.2010, 17:32:22 )
A nie lepiej aktualizować podczas akcji użytkownika? a wyświetlać za pomocą zwykłej funkcji JS..
przykąłdowy atak - akcja użytkownika... kluczowe akcje uzyszkodników nie są niestety liniowe - dla 2 graczy można by zapisać czas dotarcia jednostek i obliczyć rezultat po zajrzeniu przez któregoś użytkownika... ale setki a nawet tysiące ataków może być doklejonych później [co prawda mogą się rozegrać na przeciągu 10h ale...] - i nikt przez noc nie zagląda - jeden ataku miał 1h - też w nocy wysłał - i też nie zagląda zanim te pierwsze ataki dojdą i tego ostatniego ktoś rano atakuje - ładne zależności jeśli ich się od razu nie rozwiąże jeśli jego jednostki już powinny wrócić [no wczewsniej musi być wynik czy w ogóle wrócą]
Napisany przez: Mephistofeles 12.11.2010, 18:17:01
Na przykładzie Ogame ja bym to rozwiązał tak:
zapisujesz do bazy czas ataku, w momencie żądania pobierasz czas, i jeśli atak już nastąpił przeliczasz walkę a potem odległość floty powracającej od bazy (o ile przetrwa ). Wystarczy dobrze rozplanować system, a nie będzie konieczności wykorzystania działań w czasie rzeczywistym.
Napisany przez: eska chojnice 13.11.2010, 12:20:34
to użyję tego z JS. bardzo dziękuję . proszę o zamknięcie
Napisany przez: norbis 13.11.2010, 13:55:33
Zanim zdecydujesz się na to rozwiązanie to poczytaj o reverse ajax.
Napisany przez: CuteOne 13.11.2010, 15:21:06
Ale po co wciągać do tego AJAX? użytkownik nie musi widzieć, że dostał atak i ukradziono mu X surowców do puki nie podejmie jakiejś akcji [np. odświeżenie strony].
Napisany przez: topik53 13.11.2010, 15:34:43
na necie widziałem klona plemion. poszukaj..
a co do tematu to JS..
Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)