-
Data: 2017-12-06 22:45:21
Temat: Re: how 2 code 2 player pong over a network
Od: g...@g...com szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]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 g...@g...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.
Następne wpisy z tego wątku
- 06.12.17 23:14 slawek
Najnowsze wątki z tej grupy
- Bibl. Qt jest sztucznie ograniczona - jest nieprzydatna do celów komercyjnych
- Co sciaga kretynow
- AEiC 2024 - Ada-Europe conference - Deadlines Approaching
- Jakie są dobre zasady programowania programów opartych na wtyczkach?
- sprawdzanie słów kluczowych dot. zła
- Re: W czym sie teraz pisze programy??
- Re: (PDF) Surgical Pathology of Non-neoplastic Gastrointestinal Diseases by Lizhi Zhang
- CfC 28th Ada-Europe Int. Conf. Reliable Software Technologies
- Młodzi programiści i tajna policja
- Ada 2022 Language Reference Manual to be Published by Springer
- Press Release - AEiC 2023, Ada-Europe Reliable Softw. Technol.
- Ada-Europe - AEiC 2023 early registration deadline approaching
- Ada-Europe Int.Conf. Reliable Software Technologies, AEiC 2023
- Ile cykli zajmuje mnożenie liczb 64-bitowych?
- Ideologia Polskiego Programisty wer.3
Najnowsze wątki
- 2024-05-02 Silnik Stirlinga - energia mechaniczna wytwarzana z ciepła bez dostarczania paliwa!
- 2024-05-02 Kraków => Senior .Net Programmer <=
- 2024-05-02 Sprowadzenie pożaru zagrażającego mieniu w wielkich rozmiarch
- 2024-05-02 Zielona Góra => Spedytor międzynarodowy <=
- 2024-05-02 Katowice => Performance Analyst <=
- 2024-05-02 Gdańsk => Full Stack web developer (obszar .Net Core, Angular6+) <=
- 2024-05-02 Gdańsk => Business Development Manager - obszar bezpieczeństwa IT <=
- 2024-05-02 Warszawa => Starszy inżynier oprogramowania (Rust) <=
- 2024-05-02 Katowice => Java Developer <=
- 2024-05-02 'Studenci do nauki!'
- 2024-05-02 Dlaczego energia elektryczna jest droga i cały czas drożeje
- 2024-05-02 Dlaczego energia elektryczna jest droga i cały czas drożeje
- 2024-05-02 Dlaczego energia elektryczna jest droga i cały czas drożeje
- 2024-05-02 Wrocław => Lider Serwisu/Programista PLC z językiem niemieckim <=
- 2024-05-02 Łódź => Senior DevOps Engineer <=