Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > pl.comp.programming > #31023 > unrolled thread

how 2 code 2 player pong over a network

Started byfir <profesor.fir@gmail.com>
First post2017-12-06 09:28 -0800
Last post2017-12-06 23:14 +0100
Articles 6 — 3 participants

Back to article view | Back to pl.comp.programming


Contents

  how 2 code 2 player pong over a network fir <profesor.fir@gmail.com> - 2017-12-06 09:28 -0800
    Re: how 2 code 2 player pong over a network godek.maciek@gmail.com - 2017-12-06 11:49 -0800
      Re: how 2 code 2 player pong over a network fir <profesor.fir@gmail.com> - 2017-12-06 12:22 -0800
        Re: how 2 code 2 player pong over a network fir <profesor.fir@gmail.com> - 2017-12-06 13:43 -0800
        Re: how 2 code 2 player pong over a network godek.maciek@gmail.com - 2017-12-06 13:45 -0800
          Re: how 2 code 2 player pong over a network slawek <fake@fakeemail.com> - 2017-12-06 23:14 +0100

#31023 — how 2 code 2 player pong over a network

Fromfir <profesor.fir@gmail.com>
Date2017-12-06 09:28 -0800
Subjecthow 2 code 2 player pong over a network
Message-ID<b3259095-90b4-4db0-9e53-af4a8015a440@googlegroups.com>
recently i run some test with my friend girl assistant koteq/cybergoth 

the test app was 2 dots in window one i move with mouse other my assistant move and the other-person coordinates was sent per frame (via tcp socket) 

i think i would like to make some kind of peer-to-peer pong game (two paddles and one ball) but the problem may be i guess the delay betwean sending and incoming packets 

(i know what i ask is basic in network programming vut i never was coding it so i think i must rethink those basics and overall it is/should be interesting for every c programmer that want to touch a network at all) 

i guess the typical pessymistic delay 
between a time of sending and time of receiving may be 100 (200?) ms .. 
if game is moderatelly dynamic i think the element like paddle or ball may move with speed of one screen width/height a second so the difference in a position then could be 
1/10 or 1/5 of size of screen 

right now i got no idea how to make simple code for that game that would minimalize the inpact of this deley 
to players 

how to code that? 

should i code it in some symmetric way 
make the delay be halved on two players or what? 

[toc] | [next] | [standalone]


#31027

Fromgodek.maciek@gmail.com
Date2017-12-06 11:49 -0800
Message-ID<b6ede7f6-69c5-45b9-8c50-4ed0108c45f4@googlegroups.com>
In reply to#31023
Kiedyś z kolegą tak zrobiliśmy, że sobie napisaliśmy któregoś wieczora
ponga na dwa komputery, podłączyliśmy jeden komputer do telewizora
i graliśmy jak za "starych dobrych".

Opóźnienia w sterowaniu były zasadniczo niezauważalne. Zdaje się, że
rzecz była rozwiązana w taki sposób, że mieliśmy dwie aplikacje - klienta
i serwera, i dwa klienty były podłączone do jednego serwera. Architektonicznie
takie rozwiązanie jest prostsze, i można też łatwo postawić serwer na osobnym
kompie, zmniejszając nieuczciwość wynikłą z inercji.

Jednak przy słabo obciążonej sieci lokalnej nie było żadnej dostrzegalnej
inercji, dlatego sugerowałbym najpierw napisać aplikację, a później przejmować
się ewentualnymi problemami, niż najpierw się przejmować problemami, a później
tak "przedobrzyć" z projektem, że w końcu aplikacja nigdy nie powstanie.

Stąd też najpierw po prostu napisz, zmierz, i może się okaże, że będzie dobrze.
A jak opóźnienia będą zbyt dokuczliwe, możesz to przerobić na strategię turową.

[toc] | [prev] | [next] | [standalone]


#31028

Fromfir <profesor.fir@gmail.com>
Date2017-12-06 12:22 -0800
Message-ID<8144f10b-4b15-4415-89b9-27a98f505604@googlegroups.com>
In reply to#31027
W dniu środa, 6 grudnia 2017 20:49:34 UTC+1 użytkownik godek....@gmail.com napisał:
> Kiedyś z kolegą tak zrobiliśmy, że sobie napisaliśmy któregoś wieczora
> ponga na dwa komputery, podłączyliśmy jeden komputer do telewizora
> i graliśmy jak za "starych dobrych".
> 
> Opóźnienia w sterowaniu były zasadniczo niezauważalne. Zdaje się, że
> rzecz była rozwiązana w taki sposób, że mieliśmy dwie aplikacje - klienta
> i serwera, i dwa klienty były podłączone do jednego serwera. Architektonicznie
> takie rozwiązanie jest prostsze, i można też łatwo postawić serwer na osobnym
> kompie, zmniejszając nieuczciwość wynikłą z inercji.
> 
> Jednak przy słabo obciążonej sieci lokalnej nie było żadnej dostrzegalnej
> inercji, dlatego sugerowałbym najpierw napisać aplikację, a później przejmować
> się ewentualnymi problemami, niż najpierw się przejmować problemami, a później
> tak "przedobrzyć" z projektem, że w końcu aplikacja nigdy nie powstanie.
> 
> Stąd też najpierw po prostu napisz, zmierz, i może się okaże, że będzie dobrze.
> A jak opóźnienia będą zbyt dokuczliwe, możesz to przerobić na strategię turową.

wiem ze na lokalnej sieci opoznienia beda raczej minimalne i mozna je najprawdopodobniej olac
ale ja mowie o przypadku z laczeniem sie miedzy miastami (jak napisalem testowalismy to z moją koleżanką-asystentką i dzialalo ale
opznienie raczej są i trzeba pomyslec jak do tego podejsc

- najprawdopodobniej sporo ludzi juz ten problem rozwiazalo i sa jakies dobre metody ale jak mowi ja sie tym poki nie zajmowalme i teraz czeka mnie rozkminienie tego probblemu

ps prosty prototym samego polaczenia jest napisane mozesz sobie odpalic i nawet poeksperymentowac z kodem

minddetonator.htw.pl/ppt.zip

[toc] | [prev] | [next] | [standalone]


#31031

Fromfir <profesor.fir@gmail.com>
Date2017-12-06 13:43 -0800
Message-ID<fd00aacf-15ad-4379-b5ea-4b52029f33d9@googlegroups.com>
In reply to#31028
W dniu środa, 6 grudnia 2017 21:22:32 UTC+1 użytkownik fir napisał:
> W dniu środa, 6 grudnia 2017 20:49:34 UTC+1 użytkownik godek....@gmail.com napisał:
> > Kiedyś z kolegą tak zrobiliśmy, że sobie napisaliśmy któregoś wieczora
> > ponga na dwa komputery, podłączyliśmy jeden komputer do telewizora
> > i graliśmy jak za "starych dobrych".
> > 
> > Opóźnienia w sterowaniu były zasadniczo niezauważalne. Zdaje się, że
> > rzecz była rozwiązana w taki sposób, że mieliśmy dwie aplikacje - klienta
> > i serwera, i dwa klienty były podłączone do jednego serwera. Architektonicznie
> > takie rozwiązanie jest prostsze, i można też łatwo postawić serwer na osobnym
> > kompie, zmniejszając nieuczciwość wynikłą z inercji.
> > 
> > Jednak przy słabo obciążonej sieci lokalnej nie było żadnej dostrzegalnej
> > inercji, dlatego sugerowałbym najpierw napisać aplikację, a później przejmować
> > się ewentualnymi problemami, niż najpierw się przejmować problemami, a później
> > tak "przedobrzyć" z projektem, że w końcu aplikacja nigdy nie powstanie.
> > 
> > Stąd też najpierw po prostu napisz, zmierz, i może się okaże, że będzie dobrze.
> > A jak opóźnienia będą zbyt dokuczliwe, możesz to przerobić na strategię turową.
> 
> wiem ze na lokalnej sieci opoznienia beda raczej minimalne i mozna je najprawdopodobniej olac
> ale ja mowie o przypadku z laczeniem sie miedzy miastami (jak napisalem testowalismy to z moją koleżanką-asystentką i dzialalo ale
> opznienie raczej są i trzeba pomyslec jak do tego podejsc
> 
> - najprawdopodobniej sporo ludzi juz ten problem rozwiazalo i sa jakies dobre metody ale jak mowi ja sie tym poki nie zajmowalme i teraz czeka mnie rozkminienie tego probblemu
> 
> ps prosty prototym samego polaczenia jest napisane mozesz sobie odpalic i nawet poeksperymentowac z kodem
> 
> minddetonator.htw.pl/ppt.zip

troche poprawilem by nie wywalal tych chamskich mesage boxow na brak polaczenia - przy okazji opisuje problem - jesli juz mam polczenie dokonanae to po restarcie klienta laczy ponownie bez szemrania, natomiast po restarcie servera
nie chce polaczyc i trzeba wtedy zrestartowac klienta by polaczyl
- ktos moze wie czemu?

cyt-->

besides some may run some prototype on which i test connections 

minddetonator.htw.pl/ppt2.zip 

(for win32, no malware, some may seem that messy/adhoc code of my inside (over my power dll green fire which is not open)) 


i got yet one problem related to this winsock 

i managed to do it this way that it is not important if you runn client or server first, it will quietly connect if both are run, hovever 
problem is: both are connected i close client and then reopen it - it will get connected again with no problem, hovever if i close server and then reopen it it not get connected (i must then close client and reopen it then it get connected) 

does maybe someone get some idea why it can be, and what to change 
to client be automativcally connectet after restarting the server?

[toc] | [prev] | [next] | [standalone]


#31032

Fromgodek.maciek@gmail.com
Date2017-12-06 13:45 -0800
Message-ID<a16d672c-ab82-4499-bca2-5b0bddf20509@googlegroups.com>
In reply to#31028
W dniu środa, 6 grudnia 2017 21:22:32 UTC+1 użytkownik fir napisał:
> W dniu środa, 6 grudnia 2017 20:49:34 UTC+1 użytkownik godek....@gmail.com napisał:
> > Kiedyś z kolegą tak zrobiliśmy, że sobie napisaliśmy któregoś wieczora
> > ponga na dwa komputery, podłączyliśmy jeden komputer do telewizora
> > i graliśmy jak za "starych dobrych".
> > 
> > Opóźnienia w sterowaniu były zasadniczo niezauważalne. Zdaje się, że
> > rzecz była rozwiązana w taki sposób, że mieliśmy dwie aplikacje - klienta
> > i serwera, i dwa klienty były podłączone do jednego serwera. Architektonicznie
> > takie rozwiązanie jest prostsze, i można też łatwo postawić serwer na osobnym
> > kompie, zmniejszając nieuczciwość wynikłą z inercji.
> > 
> > Jednak przy słabo obciążonej sieci lokalnej nie było żadnej dostrzegalnej
> > inercji, dlatego sugerowałbym najpierw napisać aplikację, a później przejmować
> > się ewentualnymi problemami, niż najpierw się przejmować problemami, a później
> > tak "przedobrzyć" z projektem, że w końcu aplikacja nigdy nie powstanie.
> > 
> > Stąd też najpierw po prostu napisz, zmierz, i może się okaże, że będzie dobrze.
> > A jak opóźnienia będą zbyt dokuczliwe, możesz to przerobić na strategię turową.
> 
> wiem ze na lokalnej sieci opoznienia beda raczej minimalne i mozna je najprawdopodobniej olac
> ale ja mowie o przypadku z laczeniem sie miedzy miastami (jak napisalem testowalismy to z moją koleżanką-asystentką i dzialalo ale
> opznienie raczej są i trzeba pomyslec jak do tego podejsc
> 
> - najprawdopodobniej sporo ludzi juz ten problem rozwiazalo i sa jakies dobre metody ale jak mowi ja sie tym poki nie zajmowalme i teraz czeka mnie rozkminienie tego probblemu
> 
> ps prosty prototym samego polaczenia jest napisane mozesz sobie odpalic i nawet poeksperymentowac z kodem
> 
> minddetonator.htw.pl/ppt.zip

Możesz zamiast TCP spróbować zrobić po UDP. Wprawdzie wtedy trzeba
będzie wprowadzić jakąś strategię synchronizacji (żeby pakiety które przychodzą
z bardzo dużym opóźnieniem nie wpływały na rozgrywkę), ale może będzie
szybciej.

Co do przekonania, że ktoś ten problem rozwiązał, to raczej bym na to
nie liczył. Opóźnienie to opóźnienie i nie da się go usunąć (ewentualnie
można się zastanowić nad szybszym internetem, albo nad postawieniem
serwera w mieście pomiędzy waszymi miastami). Można się bawić w jakieś
modele, predykcje itp. ale to tylko częściowo skompensuje problem.

Oczywiście w przypadku tej partykularnej gry, jaką jest pong, można sobie
poradzić z tym problemem bardzo łatwo - ważna jest tylko pozycja i prędkość
piłki w momencie odbicia od paletki - po upłynięciu owego czasu można
deterministycznie określić, w której klatce piłka znajdzie się u przeciwnika.
Jeżeli gracze ufają sobie nawzajem, to wystarczy w momencie obronienia
albo zdobycia punktu wysłać informację o tym, czy się to udało.
Wówczas serwer może zaktualizować położenie piłki do drugiego gracza
dopiero wówczas, gdy dostanie odpowiedź. 

Taka strategia będzie działała o tyle, o ile czas transmisji pomiędzy klientami
będzie dużo mniejszy niż czas, w jakim piłka przeleci z jednego końca
do drugiego. W przeciwnym razie warto się zastanowić z krótkotrwałym
wstrzymaniem gry do czasu, aż drugi gracz nie dostanie informacji od
pierwszego.

Można też zrobić synchronizację z klientami - serwer zaktualizuje klatkę
rozgrywki dopiero wtedy, kiedy dostanie odpowiednią informację od obu
klientów (na przykład z numerem klatki), zaś klient wyśle informację dopiero
po przesłaniu potwierdzenia od serwera.

[toc] | [prev] | [next] | [standalone]


#31033

Fromslawek <fake@fakeemail.com>
Date2017-12-06 23:14 +0100
Message-ID<almarsoft.4178103456959811384@news.v.pl>
In reply to#31032
On Wed, 6 Dec 2017 13:45:21 -0800 (PST), godek.maciek@gmail.com wrote:
> nie liczył. Opóźnienie to opóźnienie i nie da si=
> ę go usunąć (ewentualnie

Da się.

Ale padam z nóg - polska prywatna służba zdrowia - i nie mam siły 
pisać. 

Tzn. opóźnienia nie znikną, ale gracze nie będą ich odczuwali. Myk w 
serwerze "in middle". I w rozpisaniu co ma być lokalnie a co przez 
ten serwer. A ten serwer może być "in middle" wirtualnie, bo w realu 
to jeden z komp. graczy.

[toc] | [prev] | [standalone]


Back to top | Article view | pl.comp.programming


csiph-web