mboost-dp1
LAN spil med Synkronisering
- Forside
- ⟨
- Forum
- ⟨
- Programmering
Hej
I forbindelse med en opgave skal jeg udvikle et simplet LAN netværksspil.
Men der er et meget bestemt krav jeg ikke rigtig kan få til at hænge sammen med normal udvikling af netværks applications.
Mine spillere skal være enige om stillingen (antal points), og positionen af de andre spillerer på kortet.
Jeg synes det strider mod alt form for logik, da i de andre former for spilserverer jeg har været med til at arbejde på, har det altid været serveren som bestemte ultimativt.
Umidbart ville jeg løse det ved at sende et GameState som indeholder informationerne omkring hvad spiller A ser, når spiller A flytter på sin brik.
Og så sende den videre til spiller B og spiller C.
Men problemet er så hvad der sker når flere spillere foretager sig noget samtidigt. Hvordan kan man så validerer hvad der er korrekt?
En løsning ville være f.eks. timestamps, men så er klienterne jo ikke ENIGE da der i sidste ende ville være een som er mere korrekt en de andre.
Så jeg kan slet ikke få ind i hovedet hvordan klienter kan være enige om noget som helst på et netværk. Det burde jo bare være serveren (spillets host) som bestemmer (alm. simpel broadcast).
Nogle ideer om hvad der kan menes med at være "ENIGE" ?
I forbindelse med en opgave skal jeg udvikle et simplet LAN netværksspil.
Men der er et meget bestemt krav jeg ikke rigtig kan få til at hænge sammen med normal udvikling af netværks applications.
Mine spillere skal være enige om stillingen (antal points), og positionen af de andre spillerer på kortet.
Jeg synes det strider mod alt form for logik, da i de andre former for spilserverer jeg har været med til at arbejde på, har det altid været serveren som bestemte ultimativt.
Umidbart ville jeg løse det ved at sende et GameState som indeholder informationerne omkring hvad spiller A ser, når spiller A flytter på sin brik.
Og så sende den videre til spiller B og spiller C.
Men problemet er så hvad der sker når flere spillere foretager sig noget samtidigt. Hvordan kan man så validerer hvad der er korrekt?
En løsning ville være f.eks. timestamps, men så er klienterne jo ikke ENIGE da der i sidste ende ville være een som er mere korrekt en de andre.
Så jeg kan slet ikke få ind i hovedet hvordan klienter kan være enige om noget som helst på et netværk. Det burde jo bare være serveren (spillets host) som bestemmer (alm. simpel broadcast).
Nogle ideer om hvad der kan menes med at være "ENIGE" ?
Du kunne vel lave et system der minde om token ring, det ville ikke give det optimale oplevese for spilleren, men det ville være en løsning
Client instanserne.arne_v (3) skrev:Skal spillerne eller client instanserne vaere enige ?
Jeg har tænkt på følgende:
Client A sender forespørgsel på bevægelse OP (direktionsbevægelse, et felt af gangen).
Serveren (hosten) vertificerer om dette er valid.
Hvis det er valid, sender serveren bevægelsen til alle clienter, inklusiv client A.
Client A opdaterer sin egen position når dataen modtages.
Men ved ikke rigtig om det tæller som ægte synkronisering.
Det du nævner i #4 er sådan de fleste FPS spil virker + noget lagcompensation.
Så når PlayerA bevæger sig fremad, flytter han sig med det samme på sin egen skærm, men det er bare en "illusion" for at det skal føles real-time. I virkeligheden sker det som du beskrev, og hvis serveren så er uenig med at den bevægelse kan lade sig gøre, blive spilleren flyttet tilbage igen. Det betyder så at spilleren kan opleve pludseligt at blive kastet tilbage (som det måske kendes fra CS når der er lidt lag)...
Jeg har selv lejet med tanken om at lave et lille FPS spil med netværkssupport.. så jeg har et par artikler bookmarked...
http://developer.valvesoftware.com/wiki/Source_Mul...
http://fabiensanglard.net/quakeSource/quakeSourceN...
Så når PlayerA bevæger sig fremad, flytter han sig med det samme på sin egen skærm, men det er bare en "illusion" for at det skal føles real-time. I virkeligheden sker det som du beskrev, og hvis serveren så er uenig med at den bevægelse kan lade sig gøre, blive spilleren flyttet tilbage igen. Det betyder så at spilleren kan opleve pludseligt at blive kastet tilbage (som det måske kendes fra CS når der er lidt lag)...
Jeg har selv lejet med tanken om at lave et lille FPS spil med netværkssupport.. så jeg har et par artikler bookmarked...
http://developer.valvesoftware.com/wiki/Source_Mul...
http://fabiensanglard.net/quakeSource/quakeSourceN...
Windcape (1) skrev:I forbindelse med en opgave skal jeg udvikle et simplet LAN netværksspil.
Men der er et meget bestemt krav jeg ikke rigtig kan få til at hænge sammen med normal udvikling af netværks applications.
Mine spillere skal være enige om stillingen (antal points), og positionen af de andre spillerer på kortet.
Nu ved jeg ikke hvad det er for en opgave men kunne det ikke vaere en daarlig oversaettelse.
"Enige" kunne maaske forstaas som om at alle spillere skal kunne se de samme data.
Du siger selv at der er tale om et simpelt LAN spil.
Der findes et område som heder byzantine agreement, som netop drejer sig om hvordan computerprogrammer i et netværk kan blive enige uden at involvere en enkelt part som alle stoler på.Windcape (1) skrev:Mine spillere skal være enige om stillingen (antal points), og positionen af de andre spillerer på kortet.
Jeg synes det strider mod alt form for logik, da i de andre former for spilserverer jeg har været med til at arbejde på, har det altid været serveren som bestemte ultimativt.
Men min fornemmelse er, at det ville være overkill til et computerspil.
Løsningen med en central server der ultimativt bestemmer er langt mere effektiv. Den største ulempe er hvis serveren går ned eller forsvinder fra netværket.
Gå til top
Opret dig som bruger i dag
Det er gratis, og du binder dig ikke til noget.
Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.