Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] surowce w grze internetowej
eska chojnice
post 12.11.2010, 14:34:35
Post #1





Grupa: Zarejestrowani
Postów: 44
Pomógł: 1
Dołączył: 16.09.2010

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
Daiquiri
post 12.11.2010, 14:37:36
Post #2





Grupa: Administratorzy
Postów: 1 552
Pomógł: 211
Dołączył: 7.07.2009
Skąd: NJ




Skorzystać z crona? Ewentualnie (w zależności od kontekstu) po odświeżeniu okna przeliczać ile minut minęło.

Ten post edytował Daiquiri 12.11.2010, 14:39:39
Go to the top of the page
+Quote Post
qrzysztof
post 12.11.2010, 14:39:44
Post #3





Grupa: Zarejestrowani
Postów: 220
Pomógł: 19
Dołączył: 25.04.2009

Ostrzeżenie: (0%)
-----


Ale bez odświeżania strony ma się dodawać czy z odświeżaniem?


--------------------
Znalazłeś sam rozwiązanie swojego problemu? Nie pisz "już wiem, do zamknięcia". Podziel się rozwiązaniem - inni będą mieli łatwiej.
Go to the top of the page
+Quote Post
eska chojnice
post 12.11.2010, 15:17:13
Post #4





Grupa: Zarejestrowani
Postów: 44
Pomógł: 1
Dołączył: 16.09.2010

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
Daiquiri
post 12.11.2010, 15:24:29
Post #5





Grupa: Administratorzy
Postów: 1 552
Pomógł: 211
Dołączył: 7.07.2009
Skąd: NJ




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.
Go to the top of the page
+Quote Post
IceManSpy
post 12.11.2010, 15:28:03
Post #6





Grupa: Zarejestrowani
Postów: 1 006
Pomógł: 111
Dołączył: 23.07.2010
Skąd: Kraków

Ostrzeżenie: (0%)
-----


+ AJAX.


--------------------
Go to the top of the page
+Quote Post
flashdev
post 12.11.2010, 15:30:50
Post #7





Grupa: Zarejestrowani
Postów: 812
Pomógł: 117
Dołączył: 2.12.2008

Ostrzeżenie: (10%)
X----


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;


Ten post edytował flashdev 12.11.2010, 15:31:18


--------------------
Go to the top of the page
+Quote Post
eska chojnice
post 12.11.2010, 15:51:45
Post #8





Grupa: Zarejestrowani
Postów: 44
Pomógł: 1
Dołączył: 16.09.2010

Ostrzeżenie: (0%)
-----


a trzeba wykorzystać js ?
Go to the top of the page
+Quote Post
Daiquiri
post 12.11.2010, 15:52:44
Post #9





Grupa: Administratorzy
Postów: 1 552
Pomógł: 211
Dołączył: 7.07.2009
Skąd: NJ




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.
Go to the top of the page
+Quote Post
qrzysztof
post 12.11.2010, 16:47:00
Post #10





Grupa: Zarejestrowani
Postów: 220
Pomógł: 19
Dołączył: 25.04.2009

Ostrzeżenie: (0%)
-----


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.

Ten post edytował qrzysztof 12.11.2010, 16:53:16


--------------------
Znalazłeś sam rozwiązanie swojego problemu? Nie pisz "już wiem, do zamknięcia". Podziel się rozwiązaniem - inni będą mieli łatwiej.
Go to the top of the page
+Quote Post
Mephistofeles
post 12.11.2010, 17:00:55
Post #11





Grupa: Zarejestrowani
Postów: 1 182
Pomógł: 115
Dołączył: 4.03.2009
Skąd: Myszków

Ostrzeżenie: (0%)
-----


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).
Go to the top of the page
+Quote Post
zegarek84
post 12.11.2010, 17:27:55
Post #12





Grupa: Zarejestrowani
Postów: 1 332
Pomógł: 294
Dołączył: 12.10.2008
Skąd: Olkusz

Ostrzeżenie: (0%)
-----


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...]


--------------------
Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.

Go to the top of the page
+Quote Post
CuteOne
post 12.11.2010, 17:32:22
Post #13





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

Ostrzeżenie: (0%)
-----


A nie lepiej aktualizować podczas akcji użytkownika? a wyświetlać za pomocą zwykłej funkcji JS..
Go to the top of the page
+Quote Post
zegarek84
post 12.11.2010, 17:50:45
Post #14





Grupa: Zarejestrowani
Postów: 1 332
Pomógł: 294
Dołączył: 12.10.2008
Skąd: Olkusz

Ostrzeżenie: (0%)
-----


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ą]


--------------------
Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.

Go to the top of the page
+Quote Post
Mephistofeles
post 12.11.2010, 18:17:01
Post #15





Grupa: Zarejestrowani
Postów: 1 182
Pomógł: 115
Dołączył: 4.03.2009
Skąd: Myszków

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
eska chojnice
post 13.11.2010, 12:20:34
Post #16





Grupa: Zarejestrowani
Postów: 44
Pomógł: 1
Dołączył: 16.09.2010

Ostrzeżenie: (0%)
-----


to użyję tego z JS. bardzo dziękuję . proszę o zamknięcie
Go to the top of the page
+Quote Post
norbis
post 13.11.2010, 13:55:33
Post #17





Grupa: Zarejestrowani
Postów: 42
Pomógł: 8
Dołączył: 30.04.2008

Ostrzeżenie: (0%)
-----


Zanim zdecydujesz się na to rozwiązanie to poczytaj o reverse ajax.
Go to the top of the page
+Quote Post
CuteOne
post 13.11.2010, 15:21:06
Post #18





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

Ostrzeżenie: (0%)
-----


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].
Go to the top of the page
+Quote Post
topik53
post 13.11.2010, 15:34:43
Post #19





Grupa: Zarejestrowani
Postów: 107
Pomógł: 1
Dołączył: 3.06.2010

Ostrzeżenie: (0%)
-----


na necie widziałem klona plemion. poszukaj..
a co do tematu to JS..
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 23.05.2024 - 06:26