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
vegelus
post
Post #41





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

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


no i jeszcze mozna dodac ze w bazie lepiej cos przetworzyc za pomoca skryptow zapisac a wynik pokazac graczom :-)

lepiej zeby wszystko sie dzialo na serwerku a tylko wyniki pokazywaly sie na monitorach
Go to the top of the page
+Quote Post
bear007
post
Post #42





Grupa: Zarejestrowani
Postów: 49
Pomógł: 0
Dołączył: 10.06.2005

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


Czesc!

W takich grach jak Ogame nie ma czasu, zeby bawić się w pętle albo liczniki. Odmierzanie czasu jest albo zrobione tak, ze jest tabela z polem czas i ID operacji (powiazanie do innej tabeli zawierajacej dane o tym co w tym czasie ma byc zrobione) i ta tabela jest zindeksowana i posortowana, tak, że wyszukiwanie pól o czasie równym czasowi bieżącemu jest bardzo krótkie. Mozliwe tez ze jest kilka tabel oddzielnie dla zdarzen bliskich (kilka minut) i zdarzen odleglych (kilka godzin) i sa one przenoszone gdy zachodzi taka potrzeba. Badz co badz to jest system czasu rzeczywistego, tak jak systemy operacyjne. Takze wiedza z tego zakresu moze Wam pomoc w zrozumieniu procesow dzialajacych w tej grze (np. kolejki, priorytety itp.) Prosze wtajemniczonych o potwierdzenie~!
Go to the top of the page
+Quote Post
NetJaro
post
Post #43





Grupa: Zarejestrowani
Postów: 475
Pomógł: 0
Dołączył: 1.04.2005
Skąd: Warszawa

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


A tak na prawdę nikt nie wiem jak to jest w OGame, bo OGame nie jest stworzone ani rozwijane przez Polaków (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
bear007
post
Post #44





Grupa: Zarejestrowani
Postów: 49
Pomógł: 0
Dołączył: 10.06.2005

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


Cytat(NetJaro @ 2006-01-18 23:15:57)
A tak na prawdę nikt nie wiem jak to jest w OGame, bo OGame nie jest stworzone ani rozwijane przez Polaków (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

to nie stoi na przeszkodzie do zrozumienia jego dzialania
Go to the top of the page
+Quote Post
Speedy
post
Post #45





Grupa: Zarejestrowani
Postów: 651
Pomógł: 28
Dołączył: 4.12.2004

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


Wspomnę jeszcze o tej książce, do której podałem wcześniej w tym temacie link:
Miałem okazję jakiś czas temu przeglądnąć ją sobie w księgarni (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) .
To fakt, że pierwsza, większa cześć książki to opis języka php pokrywający się wartością merytoryczną w dużej mierze z manualem, ale za to pod koniec jest pokazane po kolei jak zrobić taką małą, sympatyczną grę: tworzenie serwera, tworzenie klienta itd. , a sama gra, to walki czołgów dynamicznie generowanych w GD, na wygenerowanym terenie (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) . Nie mogłem się zbyt mocno zgłębić w tę książkę w ciągu kilku minut, ale z pewnością chociaż jej część jest godna uwagi ze względu na "nieszablonowość" opisywanego zagadnienia (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) .
Go to the top of the page
+Quote Post
invx
post
Post #46





Grupa: Zablokowani
Postów: 655
Pomógł: 0
Dołączył: 28.11.2003
Skąd: Zagórz

Ostrzeżenie: (80%)
XXXX-


za namowa forumowicza, kontunuuje temat (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
jesli ktos ma jakies nowe, ciekawe, spostrzezenia, zapraszam do dyskusji (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

sprawa ma sie tak, ze musze w technologi php wykonac gre (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
NetJaro
post
Post #47





Grupa: Zarejestrowani
Postów: 475
Pomógł: 0
Dołączył: 1.04.2005
Skąd: Warszawa

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


Speedy, mam ta ksiazke - kupilem. Troche malo opisow - poczatkujacy by sobie nie poradzil (tzn. moj znajomy nie mogl). Ale ogolnie fajna ksiazka - szkoda, ze php4 (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) Ale to maly pryszcz - chociaz, przy pisaniu klient/serwer jest spora roznica..

Ten post edytował NetJaro 22.01.2006, 20:59:29
Go to the top of the page
+Quote Post
squid
post
Post #48





Grupa: Zarejestrowani
Postów: 358
Pomógł: 0
Dołączył: 3.07.2003
Skąd: Szczecin->niebuszewo->*(next to window)

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


Zastanawia mnie sens pisania gry w php. Skrypt php dziala wtedy kiedy przez przegladarke sie go wywola (nie tylko - wiem). Ale jesli chcemy napisac serwer dla gry to czemu uzyc do tego php? co php ma takiego co czyni ten jezyk tak przydatnym w tym? Nie gram w takie gry wiec nie rozumiem wytlumaczcie mi. Mi sie wydaje ze o wiele sensowniej jest napisac serwer w javie w ktorej cos takiego mozna napisac w kilka chwil.
Go to the top of the page
+Quote Post
eMartio
post
Post #49





Grupa: Zablokowani
Postów: 46
Pomógł: 0
Dołączył: 12.01.2006

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


Kiedyś stworzyłem grę w php 4 pisząc ją strukturalnie. Jest to taki managerek sportu żużlowego zrobiony dla mnie i znajomych (screen shoty: http://smol.pl/zrzuty.php). Przyznam, że php + MySQL radzę sobie nieźle w tego typu aplikacjach. Najbardziej jestem dumny z tego, że udało mi się zsynchronizować, że dwóch graczy rozgrywa na żywo, w czasie rzeczywistym mecz ligowy. Spotykają się i jadą. Podczas meczu mogą wykonywać wiele czynności i na prawdę php w 100% nadaje się do programowania gier.

Najlepsza konfiguracja to php, Oracle, Ajax i wszystko można (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Jeden z kolegów chciał oprzeć bazę o pliki. Nigdy w życiu! Już to przerabiałem na początku. Przy większęj ilości danych niż 100 wierszy wszystko się sypie (IMG:http://forum.php.pl/style_emoticons/default/sad.gif)

Tak teorezujecie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) A może od strony praktycznej podyskutujemy? Najlepiej grę wykonać w PHP5, przy OOP i MVC.

Jest kilka ważnych zagadnień:
- jak wykonać klasę odpowiedzialną za uwierzytelnianie (oparcie o cookies w sesji to mało bezpieczne rozwiązanie przy masowej grze)?
- jak keszować zapytania sql (bez keszowania nie ma co nawet próbowac uruchomiać masowej gry)?

To na początek.

Jeżeli chodzi o keszowanie, to wiadomo, że tylko 1-2% graczy jest on-line, a więc po co pobierać za każdym odświeżeniem ich pozycje, stan, itp. Najlepiej chyba tylko wtedy, kiedy coś się zmieni (przy poleceniu UPDATE zrzucać kesze).

Może ktoś pokusi się o stworzenie 2 powyższych klas?
Go to the top of the page
+Quote Post
squid
post
Post #50





Grupa: Zarejestrowani
Postów: 358
Pomógł: 0
Dołączył: 3.07.2003
Skąd: Szczecin->niebuszewo->*(next to window)

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


Cytat(eMartio @ 2006-01-24 16:54:56)
Jest kilka ważnych zagadnień:
- jak wykonać klasę odpowiedzialną za uwierzytelnianie (oparcie o cookies w sesji to mało bezpieczne rozwiązanie przy masowej grze)?
- jak keszować zapytania sql (bez keszowania nie ma co nawet próbowac uruchomiać masowej gry)?

Odnosnie keszowania to wiele systemow abstrakcji db ma cos takiego np. http://adodb.sourceforge.net/.

C do uwierzytelniania sesje+cookie sa mechanizmami do tego przeznaczonymi i jesli chcesz uzywac przegladarki do grania na nic wiecej nie licz. Mozesz to wszystko zabezpieczyc przy pomocy ssl wtedy mozna zalozyc ze nikt nie ukradnie sesji i nie podslucha ciastka podczas przesylu (przynajmniej ryzyko bedzie minimalne)
Go to the top of the page
+Quote Post
eMartio
post
Post #51





Grupa: Zablokowani
Postów: 46
Pomógł: 0
Dołączył: 12.01.2006

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


Szkoda, że w php jesteśmy skazani na sesje, gdyż wszystko, co przechowuje informacje po stronie klienta, nie jest w 100% bezpieczne (IMG:http://forum.php.pl/style_emoticons/default/sad.gif)

Przed chwilką zarejestrowałem się w ogame.pl. Widać gołym okiem, że gra wykonana w php (była taka dyskusja we wcześniejszych postach). Jedno, co mnie zaskoczyło, to to, że ID sesji przekazują w linku! Jest to szczyt głupoty, aż wierzyć się nie chce, że autorzy gry zrobili coś takiego. Pomimo, że maskują URL i pewnie używają JS do niedodawania strony do historii, i tak istnieje ryzyko, że gdzieś owy link utknie... Np. w na komputerze w kafejce internetowej. A mając id sesji już wiele nie potrzeba, aby komuś namieszać w grze (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Właśnie, czy ktoś wie jak zaprojektować optymalną klasę właśnie do uwierzytelniania?
Go to the top of the page
+Quote Post
NetJaro
post
Post #52





Grupa: Zarejestrowani
Postów: 475
Pomógł: 0
Dołączył: 1.04.2005
Skąd: Warszawa

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


Hmm.. co to jest "keszowanie zapytan" - chodzi tutaj o cache?
Go to the top of the page
+Quote Post
squid
post
Post #53





Grupa: Zarejestrowani
Postów: 358
Pomógł: 0
Dołączył: 3.07.2003
Skąd: Szczecin->niebuszewo->*(next to window)

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


Cytat(eMartio @ 2006-01-24 17:12:28)
Szkoda, że w php jesteśmy skazani na sesje, gdyż wszystko, co przechowuje informacje po stronie klienta, nie jest w 100% bezpieczne

nie nie jest w 100% bezpieczne. Jakas czesc aplikacji musi byc po stronie klijeta chocby kod html. Cookie mozna szyfrowac i nawet jak je przechwycisz to nie skorzystasz. Sesja w linku eliminuje koniecznosc trzymania cookie a jesli zakonczysz dzialanie przegladarki nawet znajac link z sesja nie dostaniesz sie do tego na co link wskazuje poniewaz serwer powinien skasowac plik sesji (lub rekord w db), jesli tak sie stanie zadne informacje przecowywane w sesji nie beda juz dostepne i powstanie blad poniwaz sesja o danym id nie istnieje.
Go to the top of the page
+Quote Post
Martio_L
post
Post #54





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 2.01.2006

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


Cytat(NetJaro @ 2006-01-24 15:38:51)
Hmm.. co to jest "keszowanie zapytan" - chodzi tutaj o cache?

Tak, chodzi o cache. Są tabele i dane w nich, które nie zmieniają się dość często, a więc po co pobierać je z bazy? Lepiej keszować (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Diwi
post
Post #55





Grupa: Zarejestrowani
Postów: 245
Pomógł: 4
Dołączył: 22.01.2005

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


Mam pytanko wiem że parenaście postów wcześniej były już przykłady realizowania akcji które mają być wykonywane a najbliższym czasie. Czy ktoś ma jakiś sprawdzony i naprawde szybki sposób ?

Pozdrawiam
Go to the top of the page
+Quote Post
bigZbig
post
Post #56





Grupa: Zarejestrowani
Postów: 740
Pomógł: 15
Dołączył: 23.08.2004
Skąd: Poznań

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


Cytat(eMartio @ 2006-01-24 17:12:28)
Jedno, co mnie zaskoczyło, to to, że ID sesji przekazują w linku! ... i tak istnieje ryzyko, że gdzieś owy link utknie... Np. w na komputerze w kafejce internetowej. A mając id sesji już wiele nie potrzeba, aby komuś namieszać w grze (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Po pierwsze sesje zwykle mają ograniczoną długość trwania. Wylogowanie zwykle konczy sesje Zatem przejecie identyfikatora sesji po tym jak ona juz wygasnie nie stanowi problemu. Po drugie jesli nawet sesje przechowywane są w $_SESSIONS lub bazie danych to jesli koles w kafejce nie wyloguje sie z gry i zostawi otwarta przegladarke internetowa to i tak mozna mu namieszac.
Go to the top of the page
+Quote Post
Ludvik
post
Post #57





Grupa: Przyjaciele php.pl
Postów: 698
Pomógł: 3
Dołączył: 28.03.2004
Skąd: Wrocław

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


Sprawa akcji nie jest wcale taka trudna, jak mogło by się wydawać...

Wystarczy jedna tabela z kolejką akcji, w której zapisujemy:
1. Akcja do wykonania - tutaj jest problem z identyfikacją różnych akcji - zwykły licznik to trochę za mało przy dużej ilości akcji.
2. Identyfikator użytkownika, który wykonuje akcję.
3. Moment, w którym akcja powinna być wykonana.

Kiedy potrzebujemy danych użytkownika (w celu odbycia walki, szpiegowania etc.) wybieramy akcje wszystkich użytkowników, których informacje muszą być uaktualnione. Przetwarzamy je po kolei zgodnie z czasem wykonania.

Wcale nie trzeba w kółko przetwarzać całej kolejki. Pozostaje kwestia odśmiecania kolejki. Gracz, który przez miesiąc nie będzie grał nazbiera 1000 akcji, a kiedy będziemy chcieli podglądnąć stan jego konta trzeba obliczyć wszystko po kolei. Dobrym rozwiązaniem byłby jakiś prosty skrypt przetwarzający akcje uruchamiany przez crona na przykład co godzinę.

Drugie podejście...

Mamy już serwer gry (php w tym przypadku odpada). Nie musimy nic zapisywać w bazie, wystarczy na serwerze utworzyć kolejkę z akcjami. Obiekty akcji użytkownika nazwiemy UserAction. Interfejs wygląda mniej więcej tak:
Kod
int getTime(); // Zwraca znacznik czasu wskazujący na moment wykonania akcji.
void call(); // Wywołuje akcję

W momencie, w którym użytkownik żąda wywołania akcji obliczamy czas, w którym ma być wykonana i tworzymy obiekt akcji. Dodajemy akcję na koniec kolejki. Do przetwarzania potrzebujemy:
- Timera (czas aktualizacji to dokładność znacznika czasu, najczęściej 1s)
- Licznika, w którym zapiszemy ile sekund pozostało do wykonania pierwszej akcji w kolejce. Tak będzie szybciej niż pobierając za każdym razem czas z obiektu.
Zapisując to krokowo:
-- Ładowanie akcji --
1. Pobieramy znacznik czasu z pierwszego obiektu w kolejce.
2. Obliczamy różnicę: czas akcji - czas obecny. Zapisujemy wynik w liczniku.
-- Pętla licznika --
3. Sprawdzamy czy licznik nie jest niedodatni (może się tak zdarzyć, kiedy poprzednia akcja będzie wykonywana dłużej lub tyle samo co przerwa pomiędzy nią a następną). Jeżeli jest, wtedy przechodzimy do punktu 5.
4. Odejmujemy 1 od licznika, przechodzimy do punktu 3.
-- Wykonywanie akcji --
5. Wywołujemy akcję.
6. Gdy wykonanie akcji jest zakończone sukcesem, wtedy usuwamy pierwszy element kolejki (wykonaną akcję) i przechodzimy do punktu 1.

Wydaje mi się, że jest to w miarę wydajny sposób na wykonanie sekwencji akcji w czasie rzeczywistym. Timer nie pochłania zbyt dużej mocy obliczeniowej procesora. Jałowe przebiegi pętli licznika to tylko jedna instrukcja odejmowania i jedno porównanie, wykonywane w dosyć dużych odstępach czasu w porównaniu do złożoności obliczeń. Kolejka jest w tym wypadku bardzo wydajną strukturą, gdyż interesują nas tylko odwołania do pierwszego i ostatniego obiektu. Kolejne obiekty wiążemy w łańcuch przy pomocy referencji. Nie ma problemu z alokacją pamięci.

Wybór techniki zależy od wielu czynników... Mam nadzieję, że napisałem to jasno...
Go to the top of the page
+Quote Post
Vogel
post
Post #58





Grupa: Zarejestrowani
Postów: 402
Pomógł: 0
Dołączył: 20.01.2003

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


Cytat(Ludvik @ 2006-01-25 20:46:56)
Mamy już serwer gry (php w tym przypadku odpada).

why? php w CLI i mamy zgrabny serwer.
Go to the top of the page
+Quote Post
R-T
post
Post #59





Grupa: Zarejestrowani
Postów: 1
Pomógł: 0
Dołączył: 11.08.2006
Skąd: Wałcz

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


chciałbym przypomniec pierwsze pytanie odnosnie kursów i tutoriali, najlepiej online
Go to the top of the page
+Quote Post
osin
post
Post #60





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 11.01.2007

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


chcialem zapytac czy jest na tym forum temat o robieniu gier internetowych dla początkujących (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)
Albo są w internecie moze jakies kursy czy poradniki prosze o szybką odp.
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 - 12:55