Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Gra internetowa w php
Forum PHP.pl > Forum > PHP
Stron: 1, 2
Modgar
Serdecznie witam wszystkich forumowiczów smile.gif
Chciałbym napisać gre internetowa taka jak np.Ogame jestem srednim programistą interesujacy się php dlatego chciałbym się troche pobawić w stworzenie gry o podobnych zasadach.I tu z mojej strony wielka prosba czy sa jakies artykuły lub strony internetowe poswiecone programowaniu takich gier internetowych jakies kursy lub tutoriale moze ktos z was bedzie chetny pomogac mi bardzo prosze o pomoc.

Aha i jeszcze jedno czy do napisania takiej gry wystarczy tylko jezyk php czy moze jakies inne jeszcze ?
FiDO
Przenosze na php
Rastman
Cytat
Aha i jeszcze jedno czy do napisania takiej gry wystarczy tylko jezyk php czy moze jakies inne jeszcze ?

to zależy, czy przy każdym kroku gracza ma się odswierzać strona, czy nie. jeśli nie to musisz skorzystać z JS, lub Flasha, bo php jak wiadomo działa po stronie serwera
hwao
Wiec.
Napewno bedzie Ci potrzbene php winksmiley.jpg nastepnie przydalal by sie jakas baza danych - znacznie ulatwi to Ci prace.
Nastepnie powinnienes znac html (xhtml) css ( strona wizulana), ale do udogodnien mozesz zaprzedz javaScript.
Do prezentacji jakis danych czasem moze sie okazac lepszy dynamkiczyn flash (+php - wyciaganie np danych z bazy danych).

Bazy danych, populatna zwazajac na jej prostote MySQL, chyba ze masz PHP5 to mozesz takze uzyc SQlite. Odradzam bawienia sie na plikach.

Jak trzeban znac php:
Wiec to roznie, bo nie da sie do konca okreslic na jakim poziomie zaawansowania sie jest. Najwygodniej bylo by pisac to na klasach, poniewaz
- szczelnosc
- edycja, latwiejsza
- pozadek
- podzielenie na "akcje"

Proponowal bym popatrzec troche po forum, poniewaz pare razy byl taki temat z cyklu towrzenie gry w php.
DeyV
Przy tworzeniu tego typu aplikacji znacznie ważniejsze jest skupienie się na zasadach gry, niż na ich oprogramowaniu.
A przykład Ogame, i np. ilość i komplikacja wzorów matematycznych pozwalajacych na prowadzenie rozgrywki, pokazuje, że zadanie to nie łatwe.

Natomiast Ogame pokazuje też, że połączenie Js i php sprawdza sie w takich aplikacjach świetnie. A jeśli by do tego dodać jeszcze AJAX, to program może być na prawdę świetny.
Imperior
Miej na uwadze, że OGame potrzebuje solidnej bazy danych, także wykonywania czynności co kilka sekund na serwerze (same zapytania userów nie wystarczają). Czemu? Kiedy flota dociera na miejsce, trzeba to przechwycić i wykonać działania...
pmalirz
moim zdaniem...
trzeba to oprzeć na klasach, jest to tutaj konieczne ze względu na rozbudowaną logikę
gry. powinno się wyjść od zdefiniowania klas i relacji między nimi.
Np:
skonstruować klasę o nazwie np. "Gracz" odpowiedzialną za obsługę gracza. Powinna ona posiadać funkcję odczytu aktualnego stanu gracza (na początku skryptu) oraz metodę zapisu stanu gracza (na końcu skryptu). Nie przechowuj stanu gracza [1] w cookie, zmienny sesji (lub gdzie kolwiek po stronie klienta) - oszustwa murowane (chyba że będziesz szyfrował).

[1] - stan gracza - mam na myśli dane o jego sojusznikach, planetach itp.
M4chu
Cytat(pmalirz @ 2005-05-28 11:29:41)
Powinna ona posiadać funkcję odczytu aktualnego stanu gracza (na początku skryptu) oraz metodę zapisu stanu gracza (na końcu skryptu)

Pomysl dosc ciekawy, ale bym go troche ulepszyl - wprowadzilbym jakis mechanizm, ktory by sprawdzal czy stan gracza rzeczywiscie sie zmienil - przeciez nie wszystkie akcje (odswiezenia strony) go zmieniaja.
Speedy
Jeśli chodzi Ci o jakąś konkretną książkę, to jakiś czas temu natrafiłem w internecie na:
http://www.e-link.com.pl/x_C_I__P_423558-410004.html

Nie oceniam tego , bo nie czytałem, ale kto wie, może się przyda ...
Imperior
Heh... jak patrze na spis treści, to widze koło 140 stron nie z manuala. (a od tego odjąć wstęp, GD itp.)
slepy
Sam gram w Ogame i mocno się zastanawiałem jak ta gra jest stworzona. Pierwsze co mi się nasunełedo głowy że jest to serwer napisany w jakimś języku (php, C , C++ , perl.. etc.. ) Serwer ten otwiera port..i nasłuchuje... jesli dostanie od clienta nakaz wywolania czegos odpala timera swojego lub jakas funckje lub wysyla cos do niego itp.. Oczywiśćie wszystko na klasach.. a Savy i Loady pracują na bazie.. Bo jeśli 100 Osób na UNI nagle kliknie na Flote.. To to jest 100 zapytań do bazy.. Co już sprawa że server musi być dobry.. i na szybkim łączu.. dlatego nie wydaje mi się o że cała ta gra jest oparta jedynie na php+JS+MYSQL i wszystko co robi użytkownik są to zapytania do bazy..

Tak jak mówie. Uważam że jest Server jeden Który Savy i Loady ma w bazie, a wszystko inne w klasach. I w przypadku np. ataku Uruchamiany jest specjalny timer dla tego gracza.. który jak dojdzie do 0, uruchamia funckje itp... Przedewszystkim wszystko odbywało się na klasach..

Namieszałem troche.. ale wydaje mi się że to tak jest..

Ktoś się ze mną zgadza? snitch.gif

Pozdro


Edit: Co do tego linku.. To ta książka jest jedynie do nauki.. Nauczy cię napisać szachy ... nic więcej nie wnosi ciekawego.... Sam ją kupiłem z nadzieją i się troche przeliczyłem..
Speedy
Cytat(Imperior @ 2005-05-30 15:38:16)
Heh... jak patrze na spis treści, to widze koło 140 stron nie z manuala. (a od tego odjąć wstęp, GD itp.)

A czy ja pochwalam tę książkę ? Tak przy okazji podałem ten link winksmiley.jpg . Sam bym czegoś takiego w życiu nie kupił, jeśli chciałbym stworzyć grę w php tongue.gif .
Imperior
Cytat(Speedy @ 2005-05-30 16:19:57)
A czy ja pochwalam tę książkę ? Tak przy okazji podałem ten link winksmiley.jpg . Sam bym czegoś takiego w życiu nie kupił, jeśli chciałbym stworzyć grę w php tongue.gif .

Ja tylko wypowiadam się odnośnie książki tongue.gif

A co do tematu, to napewno jest na dobrych sprzętach. Ale czy na czymś jeszcze prócz baza i php? Nie wiem. Jedno uważam, że jest pewne... 100 kliknięć w ciągu sekundy to pikuś porównując z godzinami szczytu.
slepy
Zatem moje wniosko mogą być suszne.. Rozwinięcie tego temuatu jest godne uwagi.. Bo stworzenie takiej gry to coś. Klasy + savy + loady ( oparte na bazie ) Połączenie socketowe.. To wcale nie dla początkujących..

Więc jak ktoś się bierze za napisanie takiej gry.. Powinien posiadać dość dużą wiedze..

Sam spróbuje napisać:P Jesze usłyszycie o slepaku i jego grze;]]

Pozdro..
squid
a co myslicie o wprawadzeniu wzorca MVC do pracy przy takim zadaniu, cos takiego moze sie sprawdzic przy grach internetowych? moze juz ktos tego probowal
vala
jak na moje oko to to jest zrobione na podstawie bazy
id| flota skad | flota do | czas kiedy flota doleci | dane floty

nie wiem czy widzicie to samo co ja ale po najechaniu na licznik czasu w js pokazuja sie fajne cyferki smile.gif

wiec to jest czas kiedy flota doleci i kiedy ma byc odpalane obliczenie

i teraz skrypt while(1) {

//operacje na bazie z flotami
}
przeskakuje po calej bazie danych porownujac czas

potem odpala nastepny skrypt z liczeniem wynikow i podaje to do jednej strony i drugiej
jaka w tym filozofia?

P.S.
to naprawde trzeba mega machiny zeby przeleciec z 500 rekordow i odpalac kolejny skrypt jezeli if == true?smile.gif
P.S.2
a moze zbierze sie kilkunastu forumowiczow i zrobimy tu mini poligon
"Jak tworzyc gierki w php?" z sugestiami i pytaniami:) jako oddzielny dzial:)
slepy
Co to P.Sów jestem za;p

Ale wierz mi jak 1000 osób na UNI puści flote

i skrypt wykonywałby 1000 razy
while(1)
{
// wyciaganie z bazy
// porównywanie
//jezeli doleciala jakas
//obliczenia
//poprawienie bazy
// jest nic to nic
}

i tak średnio mniej niż na 1 sekunde to wszystko by było wykonywane.. to yh!
Maszyna musiała by być naprawde niezła.. Przynajmniej tak mi się wydaje.. Jak wróce ze szkoły spróbuje zrobić 1000 rekordów, i działania na nich za pomocą funkcji while
vegelus
Witam wszystkich na forum :-)

Od niedawna czytam to forum i jeszcze nie zapoznalem sie ze wszystkimi tematami poruszanymi odnosnie tworzenia aplikacji internetowych (mam zwyczaj sledzic minimum 0,5 roku zanim cos napisze) i widze ze rozpoczal sie temat bardzo mnie interesujacy

W chwili obecnej koncze projektowac zasady gry i rozgladam sie za technologiami ktore by temu podolaly. Na Ogame trafilem jakis miesiac po rozpoczeciu prac nad zasadami gry. Uwazam ze to co zrobili programisci w tej gierce jest niesamowite.
Projekt gry nad ktora pracuje bedzie tworzona pod wezwaniem kola naukowego :-) wraz z postepem prac bedziemy (ja jako prowadzacy i studeci jako piszacy) starali sie dzielic zebranymi informacjami jak i artykulami ktore powstana w trakcie prac.

Mam nadzieje ze znajdziemu tu miejsce gdzie bedziemy mogli dzielic sie swoimi odkryciami jak i liczyc na pomoc w rozwiazywaniu problemow przy tworzeniu slinika gry.

zalozenia naszej gry sa nastepujace:
1. gra RPG
2. wizualizacja
3. brak ograniczania ruchu (na wiekszosci tego typu grach jest ograniczenie do kilkudziesieciu ruchow)
4. wieloosobowa
5. poruszanie sie druzyna
6. handel miedzy druzynami
7. (jeszcze nie skonczylismy wymyslac)

ps. Jezeli napisalem cos nie tak to przepraszam :-)
xarr
Tez zaczolem pisac rpga na php+mysql+js jakis czas temu. Glownie tekstowka, bo grafika brak, a i co bardziej rozwija wyobraznie niz tekst? smile.gif Prace stanely mniej wiecej na 20% z powodu braku czasu. Generalnie gierka to mapa, ktora z poziomu admina mozna rozwijac dodajac pola i tworzac miedzy nimi jakies przejscia (wszystko ma swoje dodatkowe cechy jak np: typ pola, szansa na encounter, zagrozenie itd itd), postacie ze swoimi charakterystykami + umiejetnosci, oraz duza baza przedmiotow roznakich i przeciwnikow/zwierzatek/potworow.

Za gre zabralem sie od strony singla. Tj. brak interakcji z innym graczem. Celem takiego zabiegu jest chec osiagniecia i dopieszczenia zabawy tylko z wirtualnym swiatkiem. To taki pierwszy krok, ktory juz pozwoli dzialac takiej aplikacji. Kolejny to juz chat, trade... czyli interakcja czysta. Wiadomo, ze w takich rzeczach nie powinno sie przesadzac i wsadzac funkcjonalnosci wiecej niz to jest potrzebne. Podobnie ma sie sprawa z sama walka. Mozna to najprosciej zrobic na zasadzie automatu czyt. koles klika na sarenke i walcza w ten sposob ze algorytm na walke pobierajacy jakies dane 2 przeciwnikow, warunki i inne wlasciwosci wylicza trafienie/pudlo/blok/obrazenia etc. Mozna tez skomplikowac i zrobic turowke dajac graczowi mozliwosc wyboru w kazdym momencie walki co zrobic czyt. atakowac pelna para, defensywnie, moze uciekac, moze sie uleczyc itd. Wtedy tez doszla by sprawa czasu tj. ile on moze sie zastanawiac co zrobic, moze by warto ograniczyc go odgornie jakims czasem po ktorym nastepuje ruch przeciwnika (zmarnowana tura)? Tylko co z lagami... w sumie interakcja z uzytkownikiem to plan dalszy w mojej rozpisce i planie. Nad walka jednak juz sie zastanawiam, bo to bedzie jeden z nastepnych elementow na jaki sie szarpne zaraz po tym jak obiekt gracza bedzie juz swobodnie spacerowal po stworzonym swiecie smile.gif

ok... to takich ogolnikow pare. Mam nadzieje, ze podczas "wakacji" znajdzie sie wiecej wolnych weekendow coby ruszyc do przodu z ta gierka.
vegelus
w zamysle miala byc gra jednoosobowa ale ekipa sie ociagala a ja majac czas im wymyslalem coraz to ciekawsze wodotryski i chyba zalapali ze jak nie zaczna nic robic to przez wakacje im tyle nawymyslam ze juz nikt tego nie napisze :-)

Caly czas nurtuje mnie walka oczywiscie tury jak najbardziej wchodza w gre. DOpiero technologia AJAX pokazala mi w ktorym kierunku nalezy isc.

Co do ograniczenia czasu to wykozystamy chyba rozwiazanie z Falloutow czyli kazdemu z druzyny ustawi sie defoltowy atak i jak gracz nie zdazy zmienic to zostanie wykonanan ustawiona z gory akcja. Takie rozwiazanie jest potrzebne jak druzyna zostanie zaatakowana podczas nieobecnosci gracza :-)
Imperior
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.
Kinool
hehe fakt temat bardzo ciekawy 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 smile.gif

wywolywanie skryptu co sekunde cronem i "przetwazanie" calej gry to chyba nie najlepszy pomysl tongue.gif
tarlandil
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...
rogrog
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;)
tarlandil
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.
SongoQ
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.
vegelus
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?
tarlandil
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.
vegelus
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 ;-)
Marcin_m
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
php programmer
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
tarlandil
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.
rogrog
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;)
vala
hmm biorac pod uwage triggery
czyli o ile rozumiem jakis system zdarzen dynamicznych
taka aplikacja jak ogame jest dosc prosta
vegelus
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 :-)
ActivePlayer
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 smile.gif
drs
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?!
SongoQ
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.
drs
racja db to podstawa ja robie na db jest wygodniej ;D
SongoQ
NIe tyle jest wygodniej co zapominasz o mechanizmach zapisu i odczytu i zawsze masz pewnosc (no prawie) ze przez przypadek nie stracisz danych.
vegelus
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
bear007
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~!
NetJaro
A tak na prawdę nikt nie wiem jak to jest w OGame, bo OGame nie jest stworzone ani rozwijane przez Polaków winksmiley.jpg
bear007
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 winksmiley.jpg

to nie stoi na przeszkodzie do zrozumienia jego dzialania
Speedy
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 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 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 biggrin.gif.
invx
za namowa forumowicza, kontunuuje temat smile.gif
jesli ktos ma jakies nowe, ciekawe, spostrzezenia, zapraszam do dyskusji smile.gif

sprawa ma sie tak, ze musze w technologi php wykonac gre winksmiley.jpg
NetJaro
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 sad.gif Ale to maly pryszcz - chociaz, przy pisaniu klient/serwer jest spora roznica..
squid
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.
eMartio
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 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 sad.gif

Tak teorezujecie 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?
squid
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)
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.