Post
#1
|
|
|
Grupa: Zarejestrowani Postów: 1 Pomógł: 0 Dołączył: 27.05.2005 Ostrzeżenie: (0%)
|
Serdecznie witam wszystkich forumowiczów (IMG:http://forum.php.pl/style_emoticons/default/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 ? |
|
|
|
![]() |
Post
#2
|
|
|
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... |
|
|
|
Modgar Gra internetowa w php 27.05.2005, 15:19:20
FiDO Przenosze na php 27.05.2005, 18:46:34
Rastman CytatAha i jeszcze jedno czy do napisania takiej g... 27.05.2005, 18:57:19
hwao Wiec.
Napewno bedzie Ci potrzbene php nastepnie p... 27.05.2005, 19:47:47
DeyV Przy tworzeniu tego typu aplikacji znacznie ważnie... 27.05.2005, 19:48:03
Imperior Miej na uwadze, że OGame potrzebuje solidnej bazy ... 28.05.2005, 08:05:24
pmalirz moim zdaniem...
trzeba to oprzeć na klasach, jest ... 28.05.2005, 10:29:41
M4chu Cytat(pmalirz @ 2005-05-28 11:29:41)Powinna o... 28.05.2005, 13:41:24
Speedy Jeśli chodzi Ci o jakąś konkretną książkę, to jaki... 28.05.2005, 17:30:39
Imperior Heh... jak patrze na spis treści, to widze koło 14... 30.05.2005, 16:38:16
slepy Sam gram w Ogame i mocno się zastanawiałem jak ta ... 30.05.2005, 16:57:18
Speedy Cytat(Imperior @ 2005-05-30 15:38:16)Heh... j... 30.05.2005, 17:19:57
Imperior Cytat(Speedy @ 2005-05-30 16:19:57)A czy ja p... 30.05.2005, 18:27:21
slepy Zatem moje wniosko mogą być suszne.. Rozwinięcie t... 30.05.2005, 20:14:22
squid a co myslicie o wprawadzeniu wzorca MVC do pracy p... 30.05.2005, 22:09:36
vala jak na moje oko to to jest zrobione na podstawie b... 31.05.2005, 05:22:53
slepy Co to P.Sów jestem za;p
Ale wierz mi jak 1000 osó... 31.05.2005, 07:17:40
vegelus Witam wszystkich na forum :-)
Od niedawna czytam ... 31.05.2005, 08:26:37
xarr Tez zaczolem pisac rpga na php+mysql+js jakis czas... 31.05.2005, 10:05:07
vegelus w zamysle miala byc gra jednoosobowa ale ekipa sie... 31.05.2005, 16:32:02
Imperior Zachwycając się Ogame... znacie X-wars? (Ta sama f... 31.05.2005, 16:37:57
Kinool hehe fakt temat bardzo ciekawy wydaje mi sie ze p... 1.06.2005, 20:18:31
tarlandil Dlaczego sadzicie, ze serwer musi wykonac obliczen... 1.06.2005, 23:11:08
rogrog Cytat(tarlandil @ 2005-06-02 00:11:08)Dlaczeg... 2.06.2005, 13:31:09
tarlandil rogrog, jakos nie widze aby Twoj pomysl roznicl si... 2.06.2005, 17:43:49
SongoQ Za wiekszosc czynnosci jest odpowiedzialna baza da... 2.06.2005, 18:16:30
vegelus Ja zauwazylem jedna wlasciwosc :-)
Jak konczy sie... 2.06.2005, 18:51:09
tarlandil Co do naliczania surowcow w ogame to wstarczy spoj... 2.06.2005, 22:12:53
vegelus mnie bardziej nurtuje co robic jak jeden oleje a d... 3.06.2005, 08:57:49
Marcin_m Możesz to zrobić na dwa sposoby.
I.
1. Ustalasz k... 3.06.2005, 09:18:57
php programmer do hwao:
dlaczego odradzasz bawienia sie na plika... 3.06.2005, 09:26:05
tarlandil Ja widze 2 rozwiazania (mowiles o nich tylko zbior... 3.06.2005, 09:26:22
rogrog Cytat(tarlandil @ 2005-06-02 18:43:49)rogrog,... 3.06.2005, 17:26:51
vala hmm biorac pod uwage triggery
czyli o ile rozumiem... 3.06.2005, 20:46:03
vegelus Dobrym pomyslem jest uzupelnienie strony o JS i w ... 3.06.2005, 21:45:56
ActivePlayer Cytatdlaczego odradzasz bawienia sie na plikach?
p... 4.06.2005, 13:06:08
drs elo ja tesh sobie robie gre w php i ma takie pytan... 7.06.2005, 17:08:13
SongoQ Cytatdlaczego odradzasz bawienia sie na plikach?
p... 7.06.2005, 21:47:10
drs racja db to podstawa ja robie na db jest wygodniej... 7.06.2005, 22:10:31
SongoQ NIe tyle jest wygodniej co zapominasz o mechanizma... 7.06.2005, 22:14:22
vegelus no i jeszcze mozna dodac ze w bazie lepiej cos prz... 7.06.2005, 22:31:40
bear007 Czesc!
W takich grach jak Ogame nie ma czasu,... 10.06.2005, 20:01:18
NetJaro A tak na prawdę nikt nie wiem jak to jest w OGame,... 19.01.2006, 00:15:57
bear007 Cytat(NetJaro @ 2006-01-18 23:15:57)A tak na ... 19.01.2006, 00:24:34
Speedy Wspomnę jeszcze o tej książce, do której podałem w... 19.01.2006, 18:44:50
invx za namowa forumowicza, kontunuuje temat
jesli kto... 22.01.2006, 20:40:41
NetJaro Speedy, mam ta ksiazke - kupilem. Troche malo opis... 22.01.2006, 20:58:04
squid Zastanawia mnie sens pisania gry w php. Skrypt php... 22.01.2006, 21:11:20
eMartio Kiedyś stworzyłem grę w php 4 pisząc ją struktural... 24.01.2006, 15:54:56
squid Cytat(eMartio @ 2006-01-24 16:54:56)Jest kilk... 24.01.2006, 16:01:58
eMartio Szkoda, że w php jesteśmy skazani na sesje, gdyż w... 24.01.2006, 16:12:28
NetJaro Hmm.. co to jest "keszowanie zapytan" - ... 24.01.2006, 16:38:51
squid Cytat(eMartio @ 2006-01-24 17:12:28)Szkoda, ż... 24.01.2006, 17:20:33
Martio_L Cytat(NetJaro @ 2006-01-24 15:38:51)Hmm.. co ... 24.01.2006, 22:06:20
Diwi Mam pytanko wiem że parenaście postów wcześniej by... 24.01.2006, 22:08:37
bigZbig Cytat(eMartio @ 2006-01-24 17:12:28)Jedno, co... 25.01.2006, 10:08:52
Vogel Cytat(Ludvik @ 2006-01-25 20:46:56)Mamy już s... 25.01.2006, 22:38:25
R-T chciałbym przypomniec pierwsze pytanie odnosnie ku... 11.08.2006, 10:43:46
osin chcialem zapytac czy jest na tym forum temat o rob... 19.01.2007, 19:21:24
verio Hmmm...... Skoro już poruszylście ten temat, to mo... 23.01.2007, 08:39:39
My4tic Ehh...
http://www.google.pl/search?q=timer+javasc... 23.01.2007, 09:23:24
neversoft Zainteresował mnie ten temat. Mam pytanie co do np... 29.01.2007, 19:30:03
dethim ja też mam zamiar napisać taką gre...bedzie to poł... 11.02.2007, 17:47:05
radex_p ale żeś odkrył Amerykę, dethim
--------
post nie... 11.02.2007, 18:28:55
R4D3K Co do kursów i nauki najlepszą nauką jest praktyka... 3.08.2007, 20:12:32
slepiec witam wszystkich. Jestem slepiec, nieco doświadczo... 23.08.2007, 18:35:57
Luke_Star Travian wygląda lepiej Ja w swojej grze załatwiłe... 23.08.2007, 18:50:49
slepiec Luck : a po co ci Cron ? jak user się loguje (czy ... 23.08.2007, 22:24:57
Luke_Star slepiec tylko ze cron jest uzywany wtedy dy trzeba... 23.08.2007, 22:33:43
kula Co to akcji w czasie w grach typu ogame:
WG mnie ... 17.09.2007, 03:14:09
radex_p odkopywanie starych tematów jest nielubianą prakty... 17.09.2007, 07:11:15
omegan witam
skoro jest tu mowa o grach w php to przyzna... 12.12.2007, 16:36:51
colinQ to zależy co masz w tej grze...
Jeśli masz np. br... 12.12.2007, 17:19:55
Rufus009 Nagle wszyscy chcą napisać własną grę online ... ... 12.12.2007, 18:45:12
colinQ Ja też Już kilka procent mam ;
Tematyka: II Wojn... 12.12.2007, 22:21:57
Rosiv Witam chciałbym odświeżyć trochę ten wątek. Propon... 5.10.2008, 13:43:37 ![]() ![]() |
|
Aktualny czas: 4.12.2025 - 12:53 |