Gra dwuosobowa html/css/js/php


#1

Zwracam się z prośbą o odesłanie lub wyjaśnienie w jaki sposób mam zrobić gre pomiędzy dwoma graczami, załóżmy, że warcaby, i tutaj nie chodzi mi o jedną plansze i 2 graczy obok przy komputerze ale o rozróżnianie tych graczy, zapisywanie ich do bazy danych i co najważniejsze w jaki sposób zapisywać ruch jednego gracza, tak żeby u drugiego gracza ten ruch został załadowany, no i w dodatku aby nie odświeżać przy tym całej strony, mam takie zadanie, ogarniam html/css a js i php tyle co z kursu Zelenta. Musze to zrobić i podobno nie jest to takie trudne, ale najwiekszym problemem u mnie jest znalezienie jakichkolwiek informacji jak ruszyć, i tak umiem korzystać z google ale liczę na to, że ktoś kto ogarnia temat będzie umiał wygooglać lepiej mój problem, bo ja właściwie nie wiem co mam googlać :smiley: właściwie to jeśli ktoś naprawdę by ogarniał i ma czas to mogę się umówić na jakieś odpłatne korki ( ale prosze nie przenościć mojego tematu bo to tylko takie ps) jesli coś nie tak napisałem lub nie doprecyzowałem to to poprawię.


#2

Np. googlaj: nodejs websocket server client
Masa przykładów do skopiowania jak np. zrobić czat. Idea komunikacji identyczna tylko zamiast wiadomości, przesyłasz komunikaty dla gry.


#3

googlaj jeszcze: game room, lobby - bo taki podział bedziesz miał w swojej grze. Jak to się tak w skrócie dzieje w większości tego typu gier: gracz wbija na serwer (otwiera stronę, loguje się, łączy się klientem gry itp) i znajduje się w tzw lobby. Z tego poziomu może dołączyć do istniejącej gry (lobby dostarcza listę) lub samemu założyć taka grę. Twoja plansza z warcabami to taki właśnie pokój gry, może on pomieścić 2 graczy + ewentualnych obserwatorów. Gracze na zmianę wykonuja ruchy, serwer decyduje który podłączony gracz może to zrobić (stąd w bardzo łatwy sposób można zaimplementowac obserwatorów, to gracze, którzy nigdy nie dostana możliwości ruchu), dodatkowo serwer udostępnia na życzenie aktualny stan pokoju gry i/lub powiadamia wszystkich podłączonych graczy o zmianie stanu pokoju (eventy). Gracze wysyłają do serwera polecenia wykonania akcji, serwer weryfikuje je pod względem uprawnień (np obserwator nie może wykonać ruchu pomimo, ze np hackuje i fabrykuje pakiety), ewentualnie zmienia stan pokoju wykonujac dane polecenie i rozsyła informację o zmianie.

To tak w wielkim skrócie.


#4

Okej a czy musze uzywac do tego ajaxa? Czy php wystarczy bo czytalem ze ajax sluzy do nie przeladowywania strony.


#5

musisz,
ajax jest mieszanką komend javascript’u i php,
ajax nie jest osobnym językiem tylko sposobem asynchronicznego pobierania, podmieniania lub wprowadzania danych na stronie (tak jak piszesz, bez przeładowania/odświeżania całej strony),
w przeglądarkowej grze multi jak nie chcesz wkurzać graczy ciągłym odświeżaniem całej strony musisz użyć ajax’a,
nawet jak nie użyjesz bezpośrednio ajax’a to któraś z bibliotek z których skorzystasz go użyje


#6

a znacie może jakieś tutoriale, gotowce z których można się nauczyć? bo samemu wymyślać koło na nowo to mi nie bardzo sie podoba, chyba, że nie ma innej opcji, czy płatny tutorial czy darmowy bez różnicy


#7

Jedyna opcja wg mnie jest taka, żebyś zaczął uczyć się podstaw a multiplayer zostaw na razie w spokoju. To jeden z trudniejszych tematów.


#8

tylko ze tu nie chodzi dokładnie o multi, może to być odpalone z 1 komputera, lokalnie. Jeśli zaloguje się np. na konto uzytkownik1 i zrobie nim pokój do gry, zaloguje się obok na konto uzytkownik2, to jak zrobić aby użytkownik2 widział pokój użytkownika 1? moim pomysłem było rozwiązanie problememu tak samo jak: rejestracje nowego uzytkownika i zapisywanie danych do bazy. Czy to jest trafny pomysł? I czy jeśli mam oddzielną baze danych do rejestracji uzytkowników to czy mam zrobić nową baze danych do rejestracji nowych pokoi do gry? Jeśli to co pisze nie ma sensu, prosze o odesłanie mnie do jakiegoś długiego linka bądź polecenie książki abym dał wam spokój na dłużej :slight_smile:


#9

w sumie nie chodziło mi o nową baze danych, tylko o następną tabelę


#10

Nie ważne czy gracze logują się z tego samego komputera np z różnych zakładek w przeglądarce czy z dwóch przeciwnych końców świata. W obu przypadkach masz tzw multiplayer online.
Chcesz zapisywać stan rozgrywki w danym pokoju do bazy danych? To strasznie nieoptymalne. Baza danych powinna służyć do przechowywania informacji o użytkownikach, jakiś log z zakończonych rozgrywek. Pokój i jego stan to coś, co istnieje tylko chwilę, ale może zawierać w sobie ogromne ilości danych. Takie rzeczy trzyma się w pamięci.

Zacznij jednak od czegoś prostszego. Wytłumaczenie ci szczegółów związanych z multiplayerem sieciowym jednym czy dwoma wpisami na forum raczej się nie uda, to temat na całe książki. Nie, nie robi się osobnych baz danych dla każdej rzeczy, chyba, że mylisz bazę danych z tabelą - jeśli tak jest to tym bardziej nie powinieneś się w tym momencie brać za coś takiego. Programowanie to nie jest coś, czego można nauczyć się w tydzień. Gdyby tak było to każdy kto chce był by dziś programistą a moi pracodawcy, obecny jak i poprzedni nie szukali by ludzi miesiącami :wink:

Linków nie znam, googlaj.


#11

niestety to nie jest moja zachcianka abym pisał coś takiego, mam taki projekt do wykonania, być może, znowu coś pomyliłem na samym wstępie. Wymaganie które musi spełniać gra, ma być internetowa, dwuosobowa , przeglądanie możliwych rozgrywek… czy to na pewno jest możliwe tylko poprzez muliplayer? :confused:


#12

skoro ‘internetowa’ i dwuosobowa to jak najbardziej online multiplayer.


#13

troche poszukałem, znalazłem obiecującą, darmową książkę, Multiplayer Game Development with HTML5 jakby ktoś miał podobny problem, niedługo odpiszę czy było warto czytać


#14

To jakaś ‘praca domowa z informatyki’?
Jeśli tak to kurde kiepsko. Szczerze wątpię żeby w szkole na lekcji ktoś umiał wytłumaczyć jak dobrze zrobić online multiplayer. Bo można to zrobić dość łatwo, ale źle. Bedzie działać, owszem, ale będzie niezwykle mało wydajne, kiepsko skalowalne i kompletnie nienadające się do rozgrywek w czasie rzeczywistym. Może ja jestem jakiś skrzywiony, ale nie powinno się uczyć złych rozwiązań. Zbyt dużo czasu męczyłem się w pracy z niedouczonymi idiotami :wink:


#15

to jest projekt na studia z informatyki, ale na wykładach niestety nikt nie wytłumaczył jak to zrobić… css i html tłumaczyli :slight_smile:


#16

Możesz do tego użyć, PHP, JavaScript i jQuery. W celu minimalizacji zamiast bazy danych możesz to zrobić na plikach tekstowych .

  1. robisz logowanie graczy z 1 polem “nazwa
  2. po zalogowaniu gracza zapisujesz jego nazwę do pliku, i masz gracza o ID 1, jeśli zaloguje się kolejny gracz to dopisujesz go do pliku i masz gracza o ID 2
  3. co 5 sekund jQuery wysyła zapytanie do serwera czy jest już 2 graczy zalogowanych jeśli tak to można rozpocząć grę
  4. zapisujesz w tablicy pozycje pionków i do pliku
  5. tura dla wykonania ruchu może trwać MAX 30 sekund, gracz który się rusza ma 30 sekund na ruch
  6. jeśli gracz się ruszył jQuery wysyła informacje do serwera z pozycją pionka, pozycja jest zapisywana do pliku
  7. gracz który czeka na ruch przeciwnika dalej co 5 sekund sprawdza czy ten się ruszył
  8. jeśli przeciwnik wykryje że ruch został wykonany jest pobierana tablica z pozycjami pionków i jest rysowana plansza z pionkami, możesz zrobić animację ruchu porównując stare pozycje z nowymi, dla nowej pozycji robisz zmianę X i Y co da Ci efekt animacji
  9. lecimy od 5 od początku

#17

Studia nie są od tego, żeby ci tłumaczyli. Ty masz sam się nauczyć a oni łaskawie to sprawdzą i ewentualnie wystawia ci papierek na sam koniec. :slight_smile:

Co do rozwiązania z plikami, to jest to coś co ma szansę zadziałać, ale to to samo, co by to zrobić na bazie danych, tylko więcej łopatologicznej roboty. Na pewno nie jest to wzór na zrobienie porządnego serwisu z grą.