Referencje dotyczące turowego serwera gier planszowych? [Zamknięte]

12

Czy są jakieś dobre referencje / książki, które mogłyby polecić, jak zbudować turowy serwer gier? To coś w rodzaju serwera szachowego do parowania szachistów i utrzymywania stanów gry. W przeszłości na przykład IGS (dla go, weiqi) był implementacją opartą na gniazdach. Z jakich współczesnych technologii można się uczyć? Dzięki!

ohho
źródło
jest powiązany wątek na forum gdev gamedev.net/topic/565319-turn-based-game-design-help
zinking
Możesz się nauczyć z następującego projektu serwera gry: developers.google.com/games/services/android/…
tomash

Odpowiedzi:

5

Nie sądzę, żeby była na ten temat konkretna książka, ponieważ temat jest dość trywialny.

Wyobraź sobie serwer pocztowy, na którym gracze mogą wysyłać swoje działania pocztą. Serwer wykonał wszystkie dotychczasowe działania (jako wiadomości e-mail), co oznacza, że ​​masz stan gry. Jeśli chcesz ponownie załadować gamestate, po prostu wykonaj wszystkie działania w wiadomościach e-mail chronologicznie. Jedyne, co musisz zrobić, to upewnić się, czyja to kolej ... ale to też jest łatwe (np. Liczby zwrotów). Nie potrzeba współczesnych technologii ... wystarczy zmodyfikowane rozwiązanie serwer / klient poczty.

Parowanie ppl można wykonać za pomocą Elo ... ale chyba o tym wiedziałeś

zhengtonic
źródło
może możesz wyjaśnić trochę więcej, jajko. Nie wiem „elo”
zinking
Zredagowałem post, aby dołączyć link do systemu Elo.
Kylotan
2

Gdybym to był ja, zbudowałbym go od podstaw z gniazdami. Ilość danych do wysłania jest bardzo mała, a charakter turowy sprawia, że ​​małe opóźnienia są niezauważalne.

Moim zdaniem prawdziwe pytanie brzmi, jakie dodatkowe funkcje są potrzebne. Czy sesje gry są trwałe (czy ktoś może zrezygnować i dołączyć ponownie, czy można zapisać grę itp.)? Jeśli wykonujesz zapisywanie w stylu Civilization, prawdopodobnie chcesz wypchnąć zapisane dane do wszystkich klientów lub zapisać zapisaną stronę klienta z wbudowanym kluczem dostarczonym na serwerze w celu weryfikacji.

Czy potrzebujesz jakiegoś rodzaju raportów między turami, np. „Gracz 2 porusza jednostkę” lub „Twój przeciwnik może być AFK”? Jeśli tak, możesz chcieć pozostawić otwarte połączenia gniazd.

Ogólnie rzecz biorąc, chyba że istnieje jakiś ważny powód, aby się odejść, utrzymałbym serwer tak głupi i prosty, jak to możliwe. Pozostawia mniej do debugowania. Lubię też używać protokołów zwykłego tekstu, ponieważ mogę testować moje serwery za pomocą telnetu bez rzeczywistego klienta gry (co może być podejrzane w danym problemie), ale zachęca to do manipulowania danymi Wireshark (co zapewne zrobisz sprawdź mimo to).

Edycja: Jeśli gra obsługuje tylko gry 1 na 1, warto przyjrzeć się połączeniom peer-to-peer.

gkimsey
źródło
1

Ważne jest, aby nie zastanawiać się, czym jest serwer i jakie są jego obowiązki. W tym przypadku masz stosunkowo wolno działającą grę, więc architektura serwera nie będzie niewiarygodnie skomplikowana (w porównaniu z szybszą grą, w której nie możesz się doczekać itp.). Twój serwer powinien nasłuchiwać na porcie TCP (równie dobrze może pominąć UDP, jeśli i tak nie potrzebujesz prędkości), aby podłączeni klienci wysyłali mu pakiety informacji. Akceptuje pakiety, sprawdza je na podstawie reguł gry i odsyła odpowiedź. W twoim konkretnym przypadku twój serwer powinien wiedzieć, kto jest aktualnie, i odrzucić każdą próbę wykonania akcji przez innych graczy, dopóki nie nadejdzie ich kolej.

Nie wiem, jaką technologię miałeś na myśli, ale coś, co byłoby to łatwe do zrobienia w Javie z biblioteką Kyronet. Po prostu wyślij swoje działania gry na centralny serwer (może to być także jeden z dwóch graczy), przetworz je i odeślij aktualizację gry do obu graczy. Jestem pewien, że coś podobnego istnieje dla platformy .NET.

JPRO
źródło