Sieć, GUI i gra karciana pomoc z zaprojektowaniem

0

Witam, szukam pomocy z paroma problemami, które pojawiły mi się gdy chciałem zrobić sobie projekt gry karcianej.
Założenia gry: gra karciana turowa ( 2 osobowa ), grafika 2d i może proste animacje i dźwięk ( przy zagrywaniu kart i w tle ), serwer do którego łączą się gracze i serwer ich paruje, tworząc im stolik ( wątek? )

Najpierw chciałem napisać kod który pozwoli połączyć się dwóm graczom za pomocą serwera i jeden drugiemu prześle prostą wiadomość ( konsola ). Potem opakować to w proste GUI.

Problemy:
Połączenie

  1. Co nada się do łączenia graczy w grze sieciowej?
  • obiło mi się o uszy webservice, ale nie wiem dokładnie co to udostępnia w czym pomaga? Co mi da np. webservice REST i to że mogę wysyłać zapytania w formie URL? Jak to można porównać z pracą na socketach ( które wydaje mi się naturalniejsze, nigdy nie używałem jeszcze frameworków )
  • czy dobrze byłoby zastosować do tego jakiś framework?

GUI
2) Jak wyświetlać grafikę gry?

  • Co polecacie - przez stronę www czy aplikacja okienkowa ( co wtedy - swing / javafx / LibGDx ( chociaż mało tam fizyki chyba do tego liba ))?
  1. Kiedy okno gracza wie, że trzeba coś narysować ( bo np. przeciwnik zrobił ruch ), czy to serwer informuje o zmianie, czy gracz w równych interwałach pyta o to serwer? ( Gra jest raczej statyczna i zmiany są co turę, nie wiem czy jest sens spamowanie serwera ) ?

Projekt
4) Klasa Player miałaby informacje: jakie karty gracz ma na ręce, jakie zostały w jego talii, stan jego gry ( czy w danej turze wymienił kartę, czy zagrał jakąś na stół ).
Czy serwer powinien posiadać obiekty klasy Player a rola klienta to byłoby reagowanie ( wysyłanie żądań do serwera ) na kliknięcia w GUI?
Czy raczej serwer powinien być odciążony takimi danymi? Wtedy pilnowaniem klasy Player ( czy nie dociąga karty ze swojej pustej talii, że ma miejsce na dogranie karty na stole, że nie zagrał jeszcze w tej turze karty ) zajmuje się klient a serwer zajmuje się tylko przekazaniem sytuacji na stole i ewentualnie sprawdzaniem czy po zagraniu jest koniec gry. Czy takie podejście jest poprawne ze względu bezpieczeństwa?

Dziękuje za wszelkie odpowiedzi i jestem otwarty na sugestie.

0

Ech REST to styl architektoniczny który polega na tym że jest bezstanowość czyli to nie jest najlepszy pomysł.
Możesz użyć zwykłych socketów i zrobić program np. w JavaFX albo możesz zrobić websockety i serwer w Springu a klietna w JavaScript np.

0
  1. Karcianka to tylko jak wspomniano wyżej Sockety TCP.
  2. Do gier Libgdx lepszy.
  3. Naucz się najpierw robić cokolwiek potem będziesz myślał jak to zrobić. Gra się cały czas renderuję (rysuję) ty tylko wpływasz na to jak to się robi, w tym przypadku serwer przysyła informacje np. o tym że jakaś karta uległa zmianie, to też wprowadzasz zmiany w grze, w zależności jaka to gra.
  4. Obciążony bitowymi danymi ? Przecież grafiki trzymać nie będzie XD. Kwestia jaka ilość danych jest potrzebna do przesłania, bo właściwie rozdane karty mogą być przez serwer wysłane na starcie a potem tylko wysyłać zmiany, ew. przechowywać takie dane jak czyja kolejka, czas itp.
0

@scibi92
Jeśli miałoby sens i nie byłoby zbytnio na siłę to wolałbym użyć frameworka ( chcę się podszkolić ).
Tylko potrzebowałbym wskazówki co dokładnie za pomocą Springa po stronie serwerowej mógłbym zrobić?
I czy serwer Spring + klient w JavaFX byłby okej ( właśnie z klientem mam problem, czy prościej jest zrobić to jako stronkę - musiałbym douczyć się JS, czy okienko osobne. Chciałbym też, aby było w miarę atrakcyjne jako projekcik do CV )?

@Kandif
te "odciążenie" serwera to raczej taka sztuka dla sztuki, chciałbym napisać to w sposób przypominający jak to jest w praktyce ( mimo, że nie będę mieć takiego ruchu jak np. blizzard ).
Dlaczego uważasz, że LibGDX będzie lepszy? Kolizji nie ma, ruchu obiektów też nie, tekstur nie za wiele raczej.

0

Jak będziesz to robić przez sockety to musisz jeszcze zrobić ip forwarding na routerze, inaczej raczej nikt się nie połączy z tym twoim serwerem podając jego zewnętrzne IP.

0

Poleciłem Libgdx pewnie dlatego że to zestaw narzędzi do tworzenia gier. Tekstur nie za wiele? Czy przypadkiem cała gra nie posiada grafiki ? Chcesz ją robić czysto tekstowo ?

0

No po prostu musisz użyć WebSocketów jeśli chcesz to zrobić na "wyższym poziomie"
Możesz zrobić wersje i na JavaFX i na JavaScript

0

Ogólnie jeśli ma to być prosta karcianka spokojnie można ją napisać w Swingu, JavieFx potem można przepisać to na LibGDX(sam libgdx też nie jest idealny do robienia gier, co najwyżej do napisania na nim frameworka/silnika bo gry się w nim strasznie wolno robi, lepiej zaprzęgnąć do tego np. Unity). Ważniejszym tutaj elementem będzie komunikacja po sieci i same mechanika. Tutaj jest wiele rozwiązań: np. użycie REST`a(lub webowego odpowiednika z sesją) i systemu opartego na pokojach albo drugi sposób TCP np. poprzez kryonet tudzież jakaś web usługa udostepniajaca multiplayer jak google play services, appwarp(lub inne)

0

Możesz wkleić kod na githuba jak już skończysz to pisać? Dam like a i sprawdze czy dobrze.

0

Ja napisałem grę karcianą w Java SE, Swing na Socketach gdzie zakładający grę jest serwerem i wymaga przekierowania portu na routerze. Na Twoim miejscu zrobił bym to za pomocą Google Play Services i funkcjonalności Turn-based. Można pisać na Androidzie lub LibGDX czy czymkolwiek innym komunikując się RESTem. Konto developerskie Google to chyba 25$ lifetime.

1 użytkowników online, w tym zalogowanych: 0, gości: 1