Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Gry przeglądarkowe od kuchni
Forum PHP.pl > Inne > Hydepark
Daiquiri
Ciekawi mnie zagadnienie gier przeglądarkowych (tekstowych), a właściwie tego jak powstają (od strony technicznej). Interesuje mnie czy faktycznie do stworzenia takiej gry wykorzystany został "jedynie" PHP i jakaś baza danych czy skorzystano również z innych narzędzi (silników). Szukając informacji u wujka google mogę stwierdzić, iż powszechnie pisze się o grach przeglądarkowych jako o stercie kodu php i stosie zapytań do bazy. Innymi słowy, że nie jest to nic ponad zwykłego CMSa. Ot weryfikowalny system rejestracji, kilka formularzy i zaprzęgnięty CRON.

Wiem, że w Internecie jest mnóstwo informacji - ale w tym tona śmieci lub informacje od "speców" w stylu "PHP i MySQL styknie". Szczytem moich marzeń byłoby kilka słów od osób mających zielone pojęcie/doświadczenie w tej materii, na temat silników (np. Vallheru) i rzucenie kilku haseł, którym warto się przyjrzeć z bliska. I jeżeli ktoś stworzył takie cudo to mógłby się pochwalić ile czasu i energii w to włożył. Podzielenie się sprawdzonym (podkreślam sprawdzonym) linkiem z polskojęzyczną lub angielskojęzyczną zawartością mile widziany smile.gif.
marcio
Jesli chodzi o "tekstowe" gry to mysle ze to co sam napisales zupelnie wystarczy.

Sprawa robi sie trudniejsza jak chcesz zrobic gre via web jak my-fantasy lub cos podobnego innych chyba nie znam smile.gif wtedy jest zabawa z css+js+ajax by przesuwala sie mapa wzgledem x-y do ludzika lub ludzik wzgledem mapy a mapa przesuwala sie jako tlo lub jakos tak nigdy nie robilem ale kolega probowal zrobic cos w stylu my-fantasy tylko 3lvl bez zbednych bajerow tylko chodzenie po mapie + kilka akcji.

Z tego co sie nie myle moze byc tez tak ze server bedzie napisany w C++/Java a klient moze byc obslugiwany przez php(browser) zamiast osobnego programu(klienta jako osobny soft to co dostaje user typu metin2)

bim2
To ja powiem tak. Napisałem klienta w którym można chodzić live i widzieć innych graczy, zresztą pokazywałem kilka razy na forum. Wszystko leci poprzez php, mysql i js. Później wpadłem na pomysł połączenia tego z wersją Java na komórki. Po przemyśleniach i tak wyszło na to, że głównym silnikiem jest baza mysql (sprawdzanie ostatniej aktywności) a po stronie serwera w Javie łączę się z mysql przy starcie a później jeśli gracz jest zalogowany na komórce, aktualizuję co jakiś określony czas jego aktywność. smile.gif

Nie testowaliśmy tego narazie na dużej ilości graczy, ale jeśli okaże się, że mysql nie wyrabia pewnie przerzucę ruch na swoje rozwiązanie serwerowe.
Daiquiri
Dzięki za odpowiedzi. A można by w tej materii pokombinować jeszcze z Action Scriptem? Czy raczej by "zdechło".
marcio
Cytat(Daiquiri @ 19.01.2010, 23:18:06 ) *
Dzięki za odpowiedzi. A można by w tej materii pokombinować jeszcze z Action Scriptem? Czy raczej by "zdechło".


Czemu nie Flash tez jest do tego stosowany.


Zreszta z jakis rok temu moze mniej pokazywano jak ma sie zmienic "era" gier via browser wlasnie chyba we flashu lub tam nie pamietam grafa niezla gra zaprezentowana styl al'a diablo.

Musze poszukac tego w necie.




vokiel
Do flash'a są serwery, które mają ciekawą możliwość: komunikację full-duplex. Czyli powiadamianie klientów od serwera, a nie tylko jak zwykłe skrypty na stronach - odpytywanie serwera o zmiany. W grach współbieżnych to dość ważny element.

Tu był wątek o takich serwerach.
Daiquiri
Zastanawiam się jeszcze czy gry (stricte tekstowe) przeglądarkowe nie są oparte na jakimś silniku... mówię o grach typu Khan Wars (poza zaprogramowaniem całości via PHP & jakaś baza).

@marcio
Jakbyś znalazł byłoby miło smile.gif.

@bim2
Widziałam filmy na bodajże Youtubie - ciekawie to wygląda smile.gif. Dysponujesz może tytułami jakiejś konkretnej literatury lub linkami do "teorii" z zakresu budowania tego typu rzeczy, czy raczej korzystałeś ze standardowej wiedzy programistycznej?

@vokiel
Wielkie dzięki za namiar na informacje i technologię.
thek
Ja od dłuższego czasu ( czytaj: gdy mam czas i ochotę winksmiley.jpg ) projektuję cms wraz ze zintegrowaną prostą gierką tego typu, by zastąpić trochę już okryty patyną system avatarów i rang użytkowników serwisu, gdzie aktywność nie tylko na polu gry, ale i w serwisie (posty, artykuły, newsy), wpływała by na rozwój postaci prowadzonej przez użytkownika. Sam silnik to tak naprawdę wspomniane już połączenie PHP+MySQL, a pewne zdarzenia oczywiście wywoływane CRONem. To wystarczy do wersji tekstowej. Jeśli dochodzi do tego interfejs Point&Click to oczywiście dla wygody używamy JS i związanego z nim AJAXa. Oczywiście można wybajerzać w kosmos wszystko, ale im więcej cudów-wianków w algorytmie tym bardziej kuleje wydajność. Ja dlatego choćby zarzuciłem pomysł z automatyczną walką turową na planszy definiowaną określonymi zachowaniami (miałem pomysł na coś w stylu przeglądarkowej wersji bitwy na heksach znanej z serii Heroes of Might & Magic) przez gracza przed starciem. Algorytm miałem, ale odrzuciłem z racji na dużą ilość rozgałęzień co sprawiało, że serwer by miał "ciepło" winksmiley.jpg Za duża złożoność, co zajeżdżało by serwer. Przy rozsądnym planowaniu masz samych tylko skalowalnych tabel związanych z przedmiotami kilka (tabele: przedmioty, klasa przedmiotu, suffixy, prefixy, kilka złączeniowych). A to tylko przedmioty, nie mówiąc o świecie (przeciwnicy, lokacje, zadania, statystyki, umiejętności to tylko kilka spośród większej ilości). Jednak jak wspomniałem... Całość da się sprowadzić do php + baza i ewentualnie grafika+AJAX gdy ma to być więcej niż tekstowe.
Puciek
sciana.gif
Daiquiri
Zastanawia mnie czy udałoby się zwinnie połączyć AS(zamiast rzeczonego AJAX'a) do obsługi czegoś na zasadzie point&click a do reszty PHP. Ogólnie wyobrażam sobie to działanie, ale mistrzostwo nie polega na tym, że działa i niemiłosiernie grzeje, a potem umiera biggrin.gif.

@Puciek
Dziękuję za rzeczową wypowiedź.
thek
Wracając do silnika jako pewnego kompletnego szkieletu to myślę, że do pewnego momentu można się bez niego obyć. Chodzi mi oczywiście o wydajność. Gdy gra zaczyna się robić bardziej oblegana jako programista czegoś więcej niż tylko PHP zastanawiałbym się nad przepisaniem najbardziej narażonego na obciążenie kodu do wydajniejszego języka jakim jest C/C++ bo to mi skrypty CGI umożliwiają. Z czasem doszło by do całkowitego przepisania kodu i optymalizacja wiązała by się już z ulepszaniem struktur danych (upraszczanie) i algorytmów (usuwanie niepotrzebnych, nadmiarowych fragmentów lub zastępowanie ich wydajniejszymi).
Z innej strony spojrzawszy można by najpierw optymalizować algorytmy już na poziomie wybranej technologii, języka i dopiero gdy już osiągniemy optimum, przepisać do bardziej wydajnego języka.
blooregard
@Daiquiri, tak nagle zaczęłaś drążyc temat gry przeglądarkowej, że można byłoby wysnuc daleko idący wniosek, iż tudzież zamierzasz coś takiego "spłodzić" smile.gif

Może uchylisz rąbka tajemnicy, cóż to będzie za gra?
Daiquiri
Myślę o spłodzeniu czegoś co łączyłoby "statyczne" gry przeglądarkowe i gry typu command&conquer. Zawsze "denerwowało" mnie w grach typu KhanWars to, że przy atakach nie mam możliwości bieżącej kontroli swojej armii i tego w jaki sposób atakuje poza wcześniejszym ustawieniem formacji bitewnej. Chciałabym umożliwić "aktywne" zarządzanie tym, co robią poszczególne jednostki (lub typu jednostek) na bieżąco (tak jak ma to miejsce w seriach C&C). Generalnie mam jakiś zarys w głowie, kilka pomysłów na tematykę - stąd poszukiwania nad rozwiązaniami.

Wszystko to w ramach ciekawego hobby - nie w celach zarobkowych czy chwilowej fascynacji Tibią.
thek
Czyli widzę, że coś podobnego do mojego zamysłu z prostą implementacją HoM&M winksmiley.jpg Ja miałem zamiar ustalać zachowanie przed bitwą i według której toczyła by się bitwa. W stylu:
Łucznik atakuje wpierw jednostki dystansowe, no chyba że ma w bezpośrednim zasięgu jednostkę mogącą go podejść w 1 ruchu jeśli jest na tyle silna by go mocno uszkodzić, w przeciwnym wypadku ignorować. Jednostki dalekiego zasięgu mają w pierwszej kolejności blokować jednostki strzelające. Z kolei piechota miałaby na celu choćby blokować dostęp do łuczników lub stanowić osłonę silnych ale mało liczebnych oddziałów. Przy czym tego typu "rozkazy" byłyby definiowalne na zasadzie składania z klocków. Takie trochę taktyczne podejście smile.gif Tyle że właśnie te "rozkazy" zajechały by serwer.
Daiquiri
Bardzo interesuje mnie właśnie kontrola całości ataku, bo nie chcę pisać kolejnej gry w której atak nie jest bieżąco kontrolowany. Pewnie jest to odkrywanie koła na nowo, ale chcę to zrobić po swojemu zarówno od strony strategicznej jak i graficznej smile.gif. Martwię się jednak właśnie o to, że zajechałoby to serwer na amen już przy częściowym wdrożeniu/testach.

@thek, myślałam o tym, ale c++ wspominam jako drogę przez mękę w porównaniu do np. javy, ale o taką "myśl" mi właśnie chodziło. Fajnie jest móc skonsultować własne pomysły z innymi.

@Puciek
Na razie pomagasz zaśmiecać mi temat. Za to nie przyznaję punktów pomocy, ale może ktoś z moderatorów Ci takowe doda.
Puciek
Cytat(Daiquiri @ 20.01.2010, 12:11:58 ) *
@Puciek
Dziękuję za rzeczową wypowiedź.
Skoro pomoglem to wypada nacisnac "pomogl". Jak zawsze staram sie byc pomocny
marcio
Puciek chyba byl pod wplywem % jak pisal posta bo nawet go potem na nowo nie przeczytal.

@Daiquiri oglnie gra typu the crims watpie zeby uzywala jakiegokolwiek silnika.

Co do tego news'a to nie potrafie znalesc nie wiem czy czasami go nie wylapalem na gamedev byla to chyba implementacja OGL via web ale nie chce glupot powiedziec musze poszukac bo gra wygladala naprawde ciekawie.

thek
Napisze tak... Twoje rozwiązanie już dąży w kierunku Real Time, a to na samym php jest w zasadzie niewykonalne. Tu trzeba by już kombinować pod kątem albo JAVA by uzyskać możliwość nie tylko w kierunku klient-> serwer, ale już full duplex, czyli także informacje idące w druga stronę, czyli zainicjowane przez sam serwer. Inaczej będziesz zmuszona do tworzenia czegoś w stylu AJAX ustawiony na wykonywanie się w pętli co ileś sekund. Im krótszy okres tym większy realizm, ale też mocne obciążenie serwera. Dlatego myślałbym o czymś w stylu:
plansza, grafika, animacje itp preloadowane, w miarę możliwości statyczne lub ściągane tylko w ostateczności. Sam AJAX zaś odpowiadałby za przesyłkę minimalnej ilości danych zmieniających się, czyli przykładowo ruch jednostek lub jakakolwiek akcja uchwycone w znaczniki czasu. Takie trochę pseudoturowe. Akcja miała by czas trwania jako wielokrotność okresu między odświeżeniami. W ten sposób przeciwnicy byliby częściowo uodpornieni na prędkość łącza. Tura 5-10 sekund pozwalałaby wykonać w miarę jakąś ilość rozkazów. Przy czym rozkazy z obu stron szły by nieco "na ząbki", znaczy początki/końce odświeżania wypadały by w środku tur przeciwnika, co pozwalało by odbierać przez bazę i aktualizować naprzemiennie ruchy wojsk wroga. Może zaprezentuję tok:
Robię ruchy, które lecą do bazy z AJAXa, a jako zwrotka dostaję pozycję wszystkich wojsk na mapie które uległy zmianom wraz z określeniem dokąd idą lub jaką akcję wykonują. Jeśli nie robiłbym nic, to i tak co pewien okres (owe 5-10s) dostaję odświeżone informacje o działaniach. Jako że każdy ruch to wielokrotność "tury", to mogę szacować kiedy dana jednostka zakończy działanie, dojdzie na określoną pozycję (koszta ruchu i akcji), co pozwala samemu podjąć pewne działania. Przy czym zmiany te byłyby samoaktualizowalne. O co mi chodzi? Ano fakt, że jeśli jednostki obie są w tym samym czasie w ruchu względem siebie to dystans się zmienia w każdej turze co pozwala im podjąć działania względem siebie w innym niż wyliczony czas. Strzały w końcu też lecą choćby i strzał w pozycję pewną może się zakończyć chybieniem jeśli przeciwnik zszedł z linii strzału lub zwiększeniem obrażeń jeśli się zbliżył bo "idzie po naszej linii strzału". Szarża kawalerii może się zaś nadziać na nadbiegających pikinierów, przez co straty konnicy będą większe. To już pole do pomysłowości jak algorytmy walki zaimplementować winksmiley.jpg
Daiquiri
Tak, realtime interesowałby mnie w momencie "walki", reszta elementów (wznoszenie budynków, określanie ilości armii do stworzenia itd. ) mogłaby opierać się na PHP -> wysyłanie zapytania do bazy i odliczanie czasu do wykonania zadanej akcji (np. wybudowanie koszar). Teraz pozostaje mi doczytać i zadawac już mocno ukierunkowane pytania biggrin.gif. Dzięki wszystkim za pomoc. Jeżeli znalazłbyś linka marcio to byłoby miło jakbyś się podzielił smile.gif.

PS. I dzięki za nieoszczędne w słowach posty thek! smile.gif.
bim2
Cytat
@bim2
Widziałam filmy na bodajże Youtubie - ciekawie to wygląda smile.gif. Dysponujesz może tytułami jakiejś konkretnej literatury lub linkami do "teorii" z zakresu budowania tego typu rzeczy, czy raczej korzystałeś ze standardowej wiedzy programistycznej?

podstawowa wiedza programistyczna. Nie obyło się bez 5 zmian w sposobie poruszania, ostatnio całkowicie przebudowałem JS smile.gif
thek
Dziękuję Daiquiri... W końcu ktoś docenia ich długość biggrin.gif Miło też, że jest to osoba płci pięknej, które bądź co nie bądź, są w tym gronie raczej mniejszością smile.gif
thomson89
Swego czasu grałem w świetną grę flasha: goal united.

Coś podobnego do tych zwykłych przeglądarkowych, a jednak 100% flash!
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.