• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

[Socket] Pisanie gry sieciowej kilka pytań

Object Storage Arubacloud
+6 głosów
735 wizyt
pytanie zadane 14 października 2015 w Inne języki przez rafal.budzis Szeryf (85,260 p.)
UDP czy TCP ? Co byście polecili bardziej ? Gierka ma być co-op`em dla 2-4 graczy z sporą ilością mobów SI.

Chcem zrobić sztuczną inteligencje z 30-50 mobów mających swoją pozycje x,y oraz swój obrót. Jak najlepiej przekazywać dane ?

1(jedna duża wiadomosć)

przeliczam wszystkie moby
wysyłam do wszystkich całą tablice z danymi wszystkich

2 (bardzo dużo małych wiadomości)

przeliczam po jdenym
po wyliczeniu wysyłam

3(średnia wiadomosć)

przeliczam wszystkie
wysyłam wszystkie KTÓRE się zminiły

4(rozproszone)

do każdego klienta przypisujemy MOBy na stałe
u każdego gracza wyliczamy SI
potem każdy z każdym się wymienia danymi

Pytanie najważniejsze co robić z utraconymi pakietami ? Jak wyłapać ze czegoś nie mam a powinienem mieć ? Powieninem robić jakieś zwrotne wiadomosci do serwera czy samo TCP bedzie nad tym czuwać i zadnych dodatkowych mechanizmów nie potrzeba ?

2 odpowiedzi

+2 głosów
odpowiedź 15 października 2015 przez draghan VIP (106,230 p.)

Nie znam się na programowaniu sieciowym, więc mogę wspomóc jedynie ogólnymi wskazówkami.

Ale najpierw muszę pogratulować: zadałeś trafne i przemyślane pytanie, widać że myślałeś nad problemem i starałeś się znaleźć własne rozwiązanie. Za to ode mnie dostałeś yes.

Jak pisze furas, "Podobno FPS używają UDP".

Tak być powinno - kiedy mamy coś kosztownego czasowo wykonywać w pętli czasu rzeczywistego, to nie ma wyjścia: należy spuścić głowę i uprościć model.
Fizyka w grach jest oparta na uproszczonych algorytmach, żeby tylko nadążyć za renderowaniem... Więc przesyłanie danych przez sieć, które to przesyłanie jest wąskim gardłem, należy maksymalnie uprościć: a wyrzucenie kontroli dotarcia pakietów jest pierwszym do tego krokiem. Jeśli oglądasz filmy na YT, nie zauważasz nawet, jeśli jakaś ramka została opuszczona. ;)
Co do logiki przesyłania danych: powinno się to odbywać również na zasadzie minimalizmu, tak nakazuje zdrowy rozsądek. Wysyłaj małe porcje danych - jeśli jakąś zgubisz, to trudno. Jeśli zaś miałbyś zgubić za jednym razem cały wór danych, to wtedy jest gorzej, co nie? ;)

I oczywiście przesyłaj tylko to, co jest potrzebne. Powinieneś rozgraniczyć aplikację kliencką i serwerową (grałeś kiedyś w CS'a? ;) - obliczenia SI wykonuje tylko serwer, po czym wysyła dane uaktualniające do klientów.
Chyba że jesteś na tyle ogarnięty, że poradzisz sobie z rozproszonym zarządzaniem obliczeniami na potrzeby SI... ;)

Pozdrawiam i życzę sukcesu z Twoim projektem! :)

komentarz 15 października 2015 przez rafal.budzis Szeryf (85,260 p.)
Przekonałeś mnie co do małych danych masz racje ze lepiej stracić coś małego niż dużego masz całkowitą słuszność. Lecz całkowita separacja cześci serwerowej w małych grach to chyba kiepski pomysł :/ Gierka bedzie miała zapewne mały zasięg więc jak ktos gra po lanie to wybrany gracz sam tworzy serwer i gra. Nie wiem czy osobna aplikacja bedzie wygodna chociaż chciałbym napisać taki serwer w konsoli windowsa :D najlepiej z komendami :x

Mozna by jeszcze zrobić serwer główny i pod serwery tak jak w Rainbow Six zrobili (beta była straszna :x) ze wszyscy są w głownym serwerze który robi MM po wylosowaniu graczy wybiera gracza u którego bedzie serwer (pokój) z którym będą się łączyć inny wylosowani ale to już jako wyzwanie można by napisać pomijajac gre :D

Dzięki za odpowiedź :)
komentarz 15 października 2015 przez draghan VIP (106,230 p.)

Och, widzę że źle się wyraziłem.
Myślę, że powinieneś zrobić jedną aplikację, która miałaby możliwość bycia serwerem jak i klientem.

Inspirowałem się tutaj CS'em, bo to chyba jedyna sieciowa gra, w którą w ogóle trochę grałem.

Scenariusz jest taki: masz dobrego kompa (będziesz go potrzebował, bo to na Twoim komputerze odbywać się będą główne obliczenia), więc decydujesz, że możesz być hostem. Uruchamiasz "gra.exe" i wybierasz np. "Nowa gra" -> "Stwórz". Ustawiasz jakieś opcje dla gry, np. ilość botów. W tym czasie gra nasłuchuje i czeka na innych użytkowników. Owi użytkownicy, po włączeniu "gra.exe", muszą wybrać "Nowa gra" -> "Dołącz".

Kiedy już wszyscy się podłączą i zatwierdzą gotowość, serwer wysyła do nich wygenerowane czy też wybrane przez Ciebie ustawienia i inne dane i rozpoczyna się rozgrywka. Oczywiście Ty też grasz, pomimo tego iż Twoja aplikacja pełni równocześnie rolę hosta.

Wewnętrznie mogłoby to wyglądać tak, że część hostowa traktowałaby Ciebie jako gracza na tej samej zasadzie, na jakiej traktuje graczy podłączonych przez sieć - z tym wyjątkiem że nie potrzebowałbyś pobierać danych z gniazda sieciowego. ;)

Oczywiście to wszystko tylko sugestie, podkreślę jeszcze raz, że z programowaniem sieciowym nie miałem nigdy nic wspólnego i moje podejście do problemu wcale nie musi być dobre.

+1 głos
odpowiedź 14 października 2015 przez furas Maniak (53,800 p.)
Podobno FPS używają UDP i nie przejmują się utraconymi pakietami.
Ale znawcą nie jestem.

Podobne pytania

+1 głos
2 odpowiedzi 404 wizyt
pytanie zadane 25 października 2015 w C# przez rafal.budzis Szeryf (85,260 p.)
0 głosów
2 odpowiedzi 238 wizyt
pytanie zadane 7 listopada 2015 w Offtop przez Mavimix Dyskutant (8,390 p.)
0 głosów
1 odpowiedź 2,433 wizyt
pytanie zadane 23 lipca 2015 w C# przez kacper6909 Gaduła (3,040 p.)

92,626 zapytań

141,486 odpowiedzi

319,844 komentarzy

62,009 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...