Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

4 Stron V  < 1 2 3 4 >  
Reply to this topicStart new topic
> Gra internetowa w php
Imperior
post
Post #21





Grupa: Zarejestrowani
Postów: 105
Pomógł: 0
Dołączył: 16.10.2004

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


Zachwycając się Ogame... znacie X-wars? (Ta sama firma, można powiedzieć, że takie Ogame2). Tam są nawet takie rzeczy, jak stacjonowanie przyjacielskiej floty na orbicie, czy łączenie flot do ataku itp.
Go to the top of the page
+Quote Post
Kinool
post
Post #22





Grupa: Zarejestrowani
Postów: 560
Pomógł: 0
Dołączył: 15.07.2003
Skąd: Kwidzyn

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


hehe fakt temat bardzo ciekawy (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) wydaje mi sie ze php jest tu wykorzystywane tylko do przetwazania i prezentacji "zawartosci" bazy a engine gry chodzi juz na czyms innym (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

wywolywanie skryptu co sekunde cronem i "przetwazanie" calej gry to chyba nie najlepszy pomysl (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post
tarlandil
post
Post #23





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 29.04.2005

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


Dlaczego sadzicie, ze serwer musi wykonac obliczenie wyniku ataku, dokladnie wtedy gdy on nastepuje? Albo ze surowce musza byc naliczane co chwilke ?

Taka gre mozna smialo porownac do czegos takiego:
Jezeli drzewo spada w lesie, ale nikogo nie ma w poblizu to czy wydaje dzwiek?

Wystwrczy ze akcje beda przeliczane w momencie gdy dany gracz tego potrzebuje (np wlasnie sie zalogowal). Owszem aby uniknac naglego zlagowania, pewne dawne akcje serwerek moze sobie systematycznie przetwazac, ale moze to robic kiedy ma wolny czas i nie jest obciazony...
Go to the top of the page
+Quote Post
rogrog
post
Post #24





Grupa: Zarejestrowani
Postów: 602
Pomógł: 1
Dołączył: 3.04.2004
Skąd: Trójmiasto (Gdańsk)

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


Cytat(tarlandil @ 2005-06-02 00:11:08)
Dlaczego sadzicie, ze serwer musi wykonac obliczenie wyniku ataku, dokladnie wtedy gdy on nastepuje? Albo ze surowce musza byc naliczane co chwilke ?

według mnie takie podejście jeszcze bardziej komplikowało by sprawę w tym wypadku. A poza tym, Ogame sprawia wrażenie jakby jednak działało w intuicyjny sposób (wiadomości, raporty wojenne podpisane są konkretnym czasem itp.)

przypuszczam że po wykonaniu przez gracza jakiejś akcji (np. rozpoczęcie budowy budynku), do listy trzymanej w jakiejś tabeli w bazie danych dodawana jest kolejna akcja do wykonania (np. zakończenie budowy budynku lub symulacja bitwy). I serwer co sekundkę sobie wybiera akcje z tabeli dla których zaplanowany czas wykonania <= NOW(), po czym je wykonuje;)
Go to the top of the page
+Quote Post
tarlandil
post
Post #25





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 29.04.2005

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


rogrog, jakos nie widze aby Twoj pomysl roznicl sie bardzo od tego co napisalem, ani byl jakos prostszy

Na szczescie co do jednego sie zgadzamy, gra powinna byc oparta na akcjach / zdarzeniach. I zdarzenie powinno byc obliczony dopiero gdy nadejdzie wlasciwy czas.

Ale jak sie przyjzec troche uwaznie, to przeciez takie zdarzenie nie musi byc wykonane dokladnie w okreslonym momencie. Najwazniejsze jest aby bylo wykonane po okreslonym czasie, przed tym jak bedzie potrzebne i zeby zdarzenia byly wykonane w odpowiedniej wzajemnej kolejnosci.

A nie wiem czy jest sens trzymac sie tego zeby zdarzenia byly wykonywane o scisle zaplanowanej poze. Zdarzenia powinny byc wykonywane tak jak pasuje i zeby graczom sie wydawalo ze sa dokladnie o wyznaczonej poze.

A natura takiej gry jest bardzo rozproszona, i imho pierwszenstwo w wykonywaniu zdarzen powinny miec te ktrore sa w tej chwili najbardizje potrzebne - czyli te ktorych gracze wlasnie buszuja po stronie - gdyz nie ma sensu aby serwer lcizyl teraz cos tysiaca innych graczy, jak ktos wlasnie czeka na wynik bitwy...

Tak samo jak ktos zawali serwer duza iloscia roboty to on bedzie przede wszystkim czekal - na wykonanie skryptu ktory musi cos dla niego poprzelcizac.

Jedynie najbardziej zalegle akcje powinny byc robione przez serwer regularnie, zeby nie bylo lagow, u graczy ktorzy od dluzszego czasu na strone nie weszli.

Ten post edytował tarlandil 2.06.2005, 17:46:39
Go to the top of the page
+Quote Post
SongoQ
post
Post #26





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

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


Za wiekszosc czynnosci jest odpowiedzialna baza danych, przeliczenia itd, bo jakos nie wyobrazam sobie non stop przeliczen na php.

Jestem ciekaw jakie bazy wykorzystuja do takich gierek jak ogame.
Go to the top of the page
+Quote Post
vegelus
post
Post #27





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 31.05.2005

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


Ja zauwazylem jedna wlasciwosc :-)

Jak konczy sie budowa kopalnia to i tak tyrzeba odswierzyc (przeliczyc) surowce aby wzrosla produkcja. Czyli nie nastepuje to automatycznie. Miem nawet stwierdzic ze u mnie dziala skrypcik w JS odliczajacy czas po ktorym zegarek zmienia sie na inny link i tak naprawde dopiero po odsierzeniu w bazie nastepuje wzrost produkcji. W bazie jest zapisane ze rozpoczolem budowe kopalni i zakonczy sie ona po 2 godzinach ale odswierzenie(wywolanie skryptu) powoduje zwiekszenie jednostek produkcyjnych. Co do samej produkcji to caly czas klikamy po zakladkach i tam moze byc wyliczany na bierzaco stan mineralow natomist dla nie zalogowanych moze to sie odbywac np po wyslaniu sondy szpiegowskie lub po zalogowaniu gracza.

Ja natomiast borykam sie z innym problemem :-)
Jest sobie bitwa i w jej trakcie gracze (jednym moze byc serverek i jego inteligiencja) okladaja sie nazmiane po kolei kazdym z czlonkow druzyny(kolejnosc jest okreslana na podstawie kilku cech) i jak zmusic gracza aby wykonal ruch w ciagu 30 sekund, a jak nie to zeby zrobil to za niego serwer a gracz po przeciwnej stronie mial otwarta droge i mogl wykonac swoj ruch?

Ten post edytował vegelus 2.06.2005, 18:53:44
Go to the top of the page
+Quote Post
tarlandil
post
Post #28





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 29.04.2005

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


Co do naliczania surowcow w ogame to wstarczy spojrzec na buga iI.
Surowce pojawiaja sie na plenecie dopiero gdy jest onaprzeszpiegowana - wtedy nastepuje naliczenie z kopalni, a ze cos skopali, to jak kogos nie bylo przez 3 tygodnie to mu sie masa kasy zjawia, pomimo braku magazynow ;]

Co do ruchow naprzemian, to sprawa jest mniej skomplikowana niz sie wydaje.
W momencie wykonania akcji (czyli jakiegos skryptu php) przez ktoregokolwiek gracza, serwer potrafi okreslic czy minelo juz te 30sekund( a moze minely cale 3 minuty bo obydwaj gracze olali, na chwile zabawe) i po prostu nadgonic, czyli wykonac za nich brakujace akcje. Jezeli gracze oleja gre na 1h, to serwer ich takze na ta 1h godzine powinien olac, a dopiero gdy ktorys zrobi request, to przeliczyc wszystko co powinien.
Go to the top of the page
+Quote Post
vegelus
post
Post #29





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 31.05.2005

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


mnie bardziej nurtuje co robic jak jeden oleje a drugi czeka :-)

Koncepcja jest taka aby co 30 sekund (np) zmieniala sie tura czyli wykonuje ruch gracz 1, wtedy dopiero moze wykonac ruch gracz 2, i tak na przemian. takich tur moze byc bardzo duzo wiec potrzebne jest ograniczenie czasowe aby jedna bitwa nie trwala 3 godzin. Wpadlem na pomysl aby zastosowac ograniczenie czasowe. I tak jak jeden bedzie sie guzdral to serwer wykona za niego ruch a gracz po przeciwnej stronie dostanie zielone swiatlo na swoja akcje. Po jej wykonaniu znowu czeka okreslony czas widzi efektu dzialania przeciwnika i wykonuje swoja akcje. Nie bylo by problemu jakby gracz walczyl z przeciwnikiem komputerowym bo moze wtedy myslec i dumac pol dnia, ale w scenariuszu dopuszczamy do walki czterech graczy na raz i tu nie mozna dopuscic do rozgrywki szachowej ;-)
Go to the top of the page
+Quote Post
Marcin_m
post
Post #30





Grupa: Zarejestrowani
Postów: 35
Pomógł: 0
Dołączył: 1.06.2005

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


Możesz to zrobić na dwa sposoby.

I.
1. Ustalasz kolejność akcji dla graczy
2. Ten kto zaczyna atakuje i ma zapisywane ze zaatakowal o pewnym czasie - teraz nie moze wykonac zadnej akcji przez 30*ilosc_graczy sekund (to jeszcze zalezy jak chcesz zeby przebiegala walka).
3. Po 30 sekundach moze zaatakowac kolejny gracz z kolejki i tak samo jak z graczem nr. 1 . Wystarczy zapisywac czasy ich ataku (najlepiej do tabeli wirtualnej, wtedy wszystko szybko bedzie chodzic) i patrzec czy ktos moze juz zaatakowac czy nie. W tym przypadku gracz sam sobie musi odswiezac strone (lub robi to za niego skrypt javy),

II.

1. Nie ustalasz kolejnosci, tylko robisz tak ze gdy gracze spotykaja sie w jednym miejscu to kazdy z nich moze zaatakowac. Nastepnie moga zaatakowac dopiero po 30 sekundach (znowu tabela tymczasowa). Obliczas sobie te obrazenia na zasadzie jakiegos pierwszenstwa (kto szybciej kliknal, kto ma cos tam wiekszego).

Teraz mozesz zrobic taki dodatek, ze dla oby tych przypadkow, sa ustalone reguly postepowania typu - jezeli w tabeli akcji nie ma akcji gracza przebywajacego w danym miejscu, w danym czasie, a powinna byc juz wykonana (minelo kolejne 30 sekund) to COSTAM (no i sobie te costam ustalasz ty, czy gracz). Po kazdych 30 sekundach (II przypadek) lub 30*ilosc_graczy(I) po prostu usuwasz z tabeli tymczasowej wszelkie akcjce, robiac przy okazji obliczenia
Go to the top of the page
+Quote Post
php programmer
post
Post #31





Grupa: Zarejestrowani
Postów: 1 045
Pomógł: 5
Dołączył: 8.11.2004
Skąd: trójmiasto

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


do hwao:

dlaczego odradzasz bawienia sie na plikach?
pytam bo chce stworzyć baze ale na plikach.
przeciez jak sie uzycie takich funkcji jak

file
explode
implode

to obsluga plikow staje sie banalna
Go to the top of the page
+Quote Post
tarlandil
post
Post #32





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 29.04.2005

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


Ja widze 2 rozwiazania (mowiles o nich tylko zbiore je do kupy ;] )
Gracz nie wykonuje swojego ruchu w okreslonym czasie
1) serwer robi to za niego (niekoniecnzie optymalnie)
2) gracz traci ruch, serwer nie wykonal za niego akcji, i mozliwosc ruchu ma nastepny gracz.

Fakty:
Serwer moze cokolwiek robic tylko w momencie odwiezenia strony przez ktoregos z 2 graczy. Gracze nie moga sie dowiedziec co sie dzieje na serwerze bez odswiezenia strony.

Serwer nie patrzy caly czas, na to co sie dzieje, ale ma tak jakby "przeblyski swiadomosci" co jakis czas, ale to nie przeszkadza - zauwaz ze do odtworzenia calej rozgrywki wystarczy znac czas rozpoczecia akcji oraz rozkazy i czasy ich wykonania - wtedy moze sbie w pamieci szybciutko zasymulowac cala rozgrywke.
Oczywiscie lcizenie od nowa przy kazdym przeladowaniu nie jest dobrym pomyslem, wiec serwer pamieta stan gry i czas w ktorym ten stan gry jest aktualny.
I podczas kolejnych przebiegow skryptow (bo gracz odswieza strone) serwer patrzy na aktualny czas i oblicza zmiany na podstawie nowego czasu, poprzedniego stanu gry i otrzymanych rozkazow i zapamietuje sobie nowy stan..

php_programmer:
ona jest banalna, ale nie oferuje zadnych przyspieszen, wykrywania i zapobiegania kolizjom - rownoczesnemu dostepowi.
SQL daje to wszystko, wraz z b wygodnym interfejsem do pobierania zadancyh danych.

Ten post edytował tarlandil 3.06.2005, 09:31:02
Go to the top of the page
+Quote Post
rogrog
post
Post #33





Grupa: Zarejestrowani
Postów: 602
Pomógł: 1
Dołączył: 3.04.2004
Skąd: Trójmiasto (Gdańsk)

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


Cytat(tarlandil @ 2005-06-02 18:43:49)
rogrog, jakos nie widze aby Twoj pomysl roznicl sie bardzo od tego co napisalem, ani byl jakos prostszy

moze i tak, ale gdybym ja miał pisać taką grę to chyba bym wybrał moje podejście bo czuję że tak prościej;)
Go to the top of the page
+Quote Post
vala
post
Post #34





Grupa: Zarejestrowani
Postów: 123
Pomógł: 0
Dołączył: 12.01.2005

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


hmm biorac pod uwage triggery
czyli o ile rozumiem jakis system zdarzen dynamicznych
taka aplikacja jak ogame jest dosc prosta
Go to the top of the page
+Quote Post
vegelus
post
Post #35





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 31.05.2005

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


Dobrym pomyslem jest uzupelnienie strony o JS i w momecie gdy serwer wyliczy sobie ze minelo 30s to zaczyna akcje natomiast u gracza wszystkie linki staja sie nieaktywne :-) Dopiero po jakiejs akcji (odswierzenie strony) bedzie mogl wrocic do gry.
Jezeli chodzi o kolejnosc graczy koncepcja jest taka ze na poczatku kazdej tury wyliczana jest inicjatywa (ktory bohater atakuje pierwszy lub potwor) i na jej podstawie przeprowadzane sa ataki. Wystarczy tylko pilnowac kolejnosci i odstepow czasowych i mamy zalatwione. Mnie martwi tylko informowanie o tych kacjach graczy :-( Przyzwyczailem sie do gierek offline gdzie wszystko dzialo sie od razu i jakos nie moge przestawic myslenia na online (choc tez testowalem kilak ale nie w technologii php)

naszczescie ja jestem od problemow a studenci na kole od ich rozwiazywania :-)
po przedstawieniu mojej ostatniej koncepcji kilku chcialo popelnic samobujstwo :-)
Go to the top of the page
+Quote Post
ActivePlayer
post
Post #36





Grupa: Przyjaciele php.pl
Postów: 1 224
Pomógł: 40
Dołączył: 6.07.2004
Skąd: Wuppertal

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


Cytat
dlaczego odradzasz bawienia sie na plikach?
pytam bo chce stworzyć baze ale na plikach.
przeciez jak sie uzycie takich funkcji jak

file
explode
implode

to obsluga plikow staje sie banalna

Mylisz sie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
drs
post
Post #37





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 7.06.2005

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


elo ja tesh sobie robie gre w php i ma takie pytanko ma ktos moze jakis pomysł jak wykonywac kod co jakis czas? np co godzine czy tam 2 bez uzycia crona?!
Go to the top of the page
+Quote Post
SongoQ
post
Post #38





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

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


Cytat
dlaczego odradzasz bawienia sie na plikach?
pytam bo chce stworzyć baze ale na plikach.
przeciez jak sie uzycie takich funkcji jak .........


Rozbudowujac taki systemik w pewnym momencie zrobisz z tego baze danych, nieswiadomie powolutku rozwijajac - no i po co na nowo odkywac ameryke?

Musisz wdrozyc DB i zobaczysz jakie wtedy wspaniale jest rzezbienie kodu z wykorzystaniem baz.
Go to the top of the page
+Quote Post
drs
post
Post #39





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 7.06.2005

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


racja db to podstawa ja robie na db jest wygodniej ;D
Go to the top of the page
+Quote Post
SongoQ
post
Post #40





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

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


NIe tyle jest wygodniej co zapominasz o mechanizmach zapisu i odczytu i zawsze masz pewnosc (no prawie) ze przez przypadek nie stracisz danych.
Go to the top of the page
+Quote Post

4 Stron V  < 1 2 3 4 >
Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 4.12.2025 - 13:22