Jeśli twój projekt jest na etapie planowania, zaleca się zaprojektowanie projektu do pracy w sieci od samego początku. Włączenie kodu sieciowego w późnym stanie projektu najprawdopodobniej doprowadzi do masowego refaktoryzacji lub dużej ilości włamań, czego skutkiem będzie trudny do utrzymania i błędny kod.
Najczystszym sposobem jest zaimplementowanie całej gry tak, jakby była czystą grą sieciową. Oznacza to, że zaimplementuj kod dla dedykowanego serwera i zaimplementuj ten kod tylko jako kod serwera. Zaimplementuj kod klienta gry w podobny sposób. Serwer i klient mogą działać w tym samym procesie i nawet nie muszą używać prawdziwego gniazda sieciowego, ale powinny być osobnymi jednostkami, a cały kod powinien być zaprojektowany w taki sposób. Kiedy gracz skacze, nie zmieniaj bezpośrednio wektora skoku gracza, ale wyślij pakiet „wciśnięty klawiszem” na serwer i pozwól temu serwerowi to obsłużyć.
Oznacza to, że nawet w grze jednoosobowej w tle działa niewidoczny serwer. Wersja tej samej gry dla wielu graczy musi tylko połączyć się ze zdalnym serwerem zamiast z lokalną, et etila, multiplayer zrobiony. Zaletami tego są:
brak oddzielnego kodu dla pojedynczego i dla wielu graczy, kod sieci jest testowany i rozwijany podczas całego czystego kodu projektu
Projekty wykorzystujące ten schemat to prawie wszystkie gry wykorzystujące dowolny z silników Quake, Civilization 4, Neverwinter Nights i wiele innych.
Do połączenia klienta i serwera w tym samym procesie z zerowym opóźnieniem można użyć gniazd lokalnych. Są one dostarczane przez Zoidcom i przekazują pakiety bezpośrednio z jednego ZCom_Control do drugiego, bez przechodzenia przez gniazdo na poziomie systemu operacyjnego.
Zgadzam się z radą cytowaną w odpowiedzi Leftium; zaprojektuj go do pracy w sieci od samego początku, ponieważ nie będziesz mógł go później dodać .
Gdy pierwszy raz próbowałem stworzyć grę wieloosobową (nawet nie próbowałem stworzyć gry dla jednego gracza!), Pomyślałem, że najpierw uruchomię grę, a potem dodam do sieci. Kiepski pomysł. Pozostał mi prototyp naprawdę nudnej gry dla jednego gracza i nie mam pojęcia, jak ją przekształcić w grę wieloosobową. Zlikwidowałem go całkowicie i zacząłem od nowa, tym razem od samego początku pisząc kod sieciowy dla wielu graczy. Wszystko kliknęło.
Jestem pewien, że nie jest niemożliwe rozpoczęcie gry dla jednego gracza i dodanie funkcji gry wieloosobowej. Jeśli się nad tym zastanowisz, zaplanuj to poprawnie i upewnij się, że znasz swoją strategię, to spróbuj. Myślę, że byłoby ciekawą łamigłówką przynajmniej. Ale naprawdę upewnij się, że znasz swój plan dodawania sieci.
Myślę, że jest środek (chociaż nigdy tego nie próbowałem). Możesz napisać fikcyjne klasy dotyczące funkcji sieciowych / trybu wieloosobowego i pilnie z nich korzystać, pisząc grę dla jednego gracza. Później, jeśli zdecydujesz się wdrożyć grę wieloosobową, po prostu wypełnij klasy manekina i będziesz w większości gotowy. To bardzo zbliża się do metody serwer / klient, ale możesz być w stanie uciec od mniejszej pracy; w końcu gra dla jednego gracza jest łatwiejsza niż gra dla wielu graczy, więc jeśli masz zamiar napisać swoją grę dla jednego gracza jak grę dla wielu graczy, to dlaczego nie po prostu uczynić z niej gry dla wielu graczy?
źródło