Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

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 smile.gif

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). smile.gif. 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

[JAVASCRIPT] pobierz, plaintext
  1. glina = document.getElementById('glina');
  2.  
  3. function countdown(units)
  4. {
  5. setTimeout(function(){countdown(units+1);}, 60000);
  6. glina.innerHTML=units;
  7. }
  8.  
[JAVASCRIPT] pobierz, plaintext


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 winksmiley.jpg). 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)