W przypadku szkolnego projektu mamy stworzyć grę wieloosobową w Javie (powinien to być klient/serwer), który można odtwarzać przez Internet (programujemy to w szkole, więc to nie jest praca domowa). Ta gra jest turowa, ale powinien odbyć się czat, który oczywiście odbywa się w czasie rzeczywistym. Jednak nikt z nas nie ma doświadczenia z programowaniem sieciowym i im więcej o tym czytam, tym więcej pytań mam.Java dla wielu graczy - koncepcje sieciowe
Moja pierwsza myśl polegała na wykorzystaniu interfejsu API gniazda do implementacji części dla wielu graczy. Serwer czeka na nowe dane od klientów. Jednak istnieje wiele rodzajów danych do odebrania, takich jak wiadomości na czacie, ruch itp. Ponadto, po nawiązaniu połączenia z serwerem, należy wysłać pewne dane początkowe (takie jak nazwa gracza). Serwer powinien być w stanie zobaczyć, jaki rodzaj wiadomości otrzymał, ale w jaki sposób? Myślałem o stworzeniu klasy Message
z polem ciągu type
. Ale w moim kodu serwera, dostanę kod tak:
Gdy istnieje wiele różnych rodzajów danych do wysłania (i nie będzie), to nie wygląda jak najbardziej efektywny sposób. Ponadto oznaczałoby to, że zarówno serwer, jak i klient powinni mieć tę klasę/interfejs wiadomości (duplikat kodu).
Co z innymi grami? Na przykład gracz 1 przesuwa swoją postać na pozycję, która pokonuje inną postać. Klient gracza 1 oblicza to pokonanie i stosuje odpowiednie akcje. Ale co należy wysłać na serwer? Tylko pozycja nowego gracza, czy też porażka? W przypadku pierwszej opcji oznacza to, że wszyscy inni klienci powinni wykonywać obliczenia. Czy nie mogło to sprawić kłopotu? Ponieważ nie mam doświadczenia w programowaniu sieciowym, jestem nieco zdezorientowany, jak to zrobić.
Czytałem również w innym wątku tutaj na Stackoverflow, że RMI może być lepszym rozwiązaniem. Po przeczytaniu niektórych informacji na ten temat, rozumiem, czym jest RMI, ale nadal nie jestem w stanie sprawdzić, czy jest to dobra opcja dla tego projektu, czy nie. Wszelkie wskazówki na ten temat?
Jak widzisz, jestem nieco zdezorientowany, jak zacząć od części sieciowej tego projektu. Szukałem książek o programowaniu gier (w języku Java), ale żadna z nich nie dotyczy wyłącznie sieci. Szukałem także książek sieciowych w Javie, ale wydaje się, że koncentrują się one na technologii, a nie na dobrych praktykach kodu.
Jeśli ktoś zna dobrą książkę lub ma jakąś radę w prawidłowej diecie, byłoby to bardzo cenne.
Dzięki
„... programowanie to w szkole, więc nie jest to praca domowa” . Klasyczny. – CPerkins
Przynajmniej nie chce kodu. –
@CPerkins: Powinniśmy pracować nad tym projektem w szkole, tak. Nie proszę nikogo o wykonanie mojej pracy, tylko o poradę, jak to wdrożyć. – Bv202