Gjør tilfeldig gytepoeng rettferdig?

inappropriateCode 09/11/2017. 9 answers, 4.496 views
game-design level-design

Hvis alle spillerne blir hevdet i tilfeldige posisjoner samme avstand fra nærliggende spillere, vil antall spillere være proporsjonal med sannsynligheten for at deres hesteposisjoner er urettferdig. Jo nærmere spillere går til midten av kartet, desto mer sannsynlig er de å møte andre spillere, og jo mindre sannsynlig er de for å overleve, sammenlignet med spillere på kanten av kartet. Anta at alle spillerne er spratt samtidig.

Er det en måte å forme gytepunkter, eller endre kartet, slik at:

  1. Alle spillere har et begrenset antall tilstøtende fiender.
  2. Alle spillere har like mulighet til å møte tilstøtende fiender.
  3. Kartstørrelsen behøver ikke å øke proporsjonal med antall spillere.
  4. Disse begrensningene håndheves ikke med vilkårlige ugjennomtrengelige mellomrom.

Svaret trenger ikke å være perfekt, bare åpenbart bedre enn alternativet. Ut av boksen tenker velkommen.

5 Comments
10 Zibelas 07/28/2017
Kryss i en sirkel?
1 inappropriateCode 07/28/2017
@Zibelas Tradisjonell tilnærming, men bryter med krav 3, og med mange spillere skaper dette et stort kart og tomt interiør.
4 Zibelas 07/28/2017
Det avhenger av din type spill. (2D / 3D, respawn / siste mann står osv.) Perfekt gyte er i så fall bare mulig i en ballform verden (flere spillere, nærmere gyte, men du kan garantere at de har samme avstand). På en 2D-verden med faste grenser har du alltid mindre grenser til spillere siden du ikke har plass til å gyte dem. Hvis det er et 3D-spill, kan du ha flere lag.
1 RothX 07/28/2017
Jeg tror det vil bidra til å vite hva slags spill du lager. Det høres ut som en slags krigsspill, men hva er detaljene? Er det en skytter? Begynner du med alle våpnene dine, eller må du utforske og finne ting? Hva er seierskikket? Hvor lenge er en kamp forventet å vare?
3 Jan 'splite' K. 07/28/2017
Ikke for fullt svar, men jeg tror alle prøver for "fair & balanced spawn" som ... er ikke morsomt. Se på utmerket PUBG (og andre Battle Royale) gyte: spillere kan "gyte" (vel, hoppe og lande ...) nesten hvor som helst de vil - hvis du vil ha konflikt og drama, velger du sted hvor de fleste spiller lander / gyter. Høy risiko høy belønning, men bare hvis spilleren vil ha det. Du kan lande et sted i skogen, du har tid til å forberede deg - lav risiko lav belønning, men noen spillere kan foretrekke det (som meg, for eksempel;)). Det er ikke tilfeldig, det er spillernes valg.

9 Answers


Philipp 07/28/2017.

La spillerne velge sine startsteder selv.

I begynnelsen av spillet, kaste alle spillerne midt på kartet, men uten å skade de andre spillerne. De må da svømme ut og skaffe seg midler til å engasjere hverandre (bygge en base, ta opp et våpen, samle ressurser osv.)

Det er enten litt flaks eller kartkunnskap involvert i å finne en god startplass tidlig (avhengig av om du bruker prosessuelle eller håndlagde kart). Men når og hvor å bosette seg, er det for det meste en strategisk beslutning. Utplassering tidlig gir deg en tidsfordel, men setter deg i en farlig posisjon. Hvis du plukker basen din nøye, legger du deg bak i tidligspillet, men kan være en avgjørende fordel i midt- og sentspillet.

5 comments
14 Shashimee 07/28/2017
+1 for å bruke Hunger Games 1-filmgytesystemet.
3 Philipp 07/28/2017
@Shashimee Egentlig tror jeg at jeg har sett denne metoden først i år 1602. Jeg tror også at noen av de tidlige C & C-spillene hadde det som et valgfritt multiplayer spillalternativ (men jeg er ikke sikker på om jeg husker det riktig).
3 Zibelas 07/28/2017
@Philipp MULE for commodore 64 rundt 15 år eldre og la deg velge dine posisjoner også :)
Dent7777 07/28/2017
Derefter løper du inn i spørsmålet der du blir fulgt til ditt gytepunkt. Dette kan selvfølgelig være ønsket spillmekaniker, men det kan også være ekstremt frustrerende og ikke noe du bestemmer deg for i spillet ditt. En god ide ville være å få tegnene til å bli usynlige og spillerkollisjonssfrie, og finne basen deres før du starter spillet.
Kroltan 07/28/2017
Det er metoden som brukes av "Vampyrism" og "Tree Tag" -linjen av tilpassede spillmodeller på Warcraft 3. Det virker best siden alle spillere er allierte (minst i utgangspunktet) og motstandslaget slippes senere.

Theraot 07/28/2017.

Forstå kravene

  1. Alle spillere har et begrenset antall tilstøtende fiender.

For det første snakker vi om spillernes gytepoeng, ikke den nåværende posisjonen til spillerne på et gitt punkt i spillet. Just getting that out of the way.

Tilgrensende er godt definert når vi snakker om en graf. Vi kan tenke på et kart som representerer navigasjonsmuligheter på kartet - fra nå av "grafen".

Hvis kan knutepunktet kan ha det meste ett grytepunkt, er det fornuftig å snakke om at de er "tilstøtende". Merk: Jeg vil ikke begrense noder til å ha ett enkelt hestepunkt i det meste av grunner som vil bli åpenbare senere.

For å bygge grafen må vi vurdere ting som vegger, broer, stiger, teleporteringspunkter, eller til og med vurdere flyplass hvis det kan være spiller som kan fly. Hver knutepunkt representerer en traversabel plassering; hver forbindelse representerer en mulig bevegelse.

Merk: Kjenn størrelse og form av noder, og arbeid med faktisk tilstøtende noder. Ikke betrakte knuter et poeng. Ikke betrakt forbindelser som å ha lengde. Bruk også konvekse noder.

Grafen kunne ha vært forhåndskompilert (kartet ble opprettet av en designer); Ellers kan det opprettes på fly hvis kartet genereres tilfeldig.

  1. Alle spillere har like mulighet til å møte tilstøtende fiender.

Jeg vil anta at fiender er andre spillere. Again, just getting that out of the way.

Forutsatt at hver spiller gjør en tilfeldig spasertur, vil sannsynligheten for å finne en spiller på et gitt punkt - på en flat plass uten forhindringer - gis av en (Gaussisk) funksjon av avstanden til hestepunktet - fra nå av " funksjon".

Siden vi jobber på grafen, vil vi i stedet annotere verdiene på grafen.

  1. Kartstørrelsen behøver ikke å øke proporsjonal med antall spillere.

Hvis vi hadde begrensningen av å ha et enkelt gytepunkt per knutepunkt, så for å legge til flere spillere ville vi trenge mindre knuter. Hvis vi bestemmer grafen før vi vet hvor mange spillere vi vil ha, må vi kanskje dele underpunkter for det aktuelle spillet.

  1. Disse begrensningene håndheves ikke med vilkårlige ugjennomtrengelige mellomrom.

Jeg har ikke tenkt å legge til hindringer for å løse problemet. Au contraire , jeg trenger å jobbe rundt hindringene. Hvis de ikke var der, ville implementeringen være enklere.


Løsning

Vi prøver å plassere N hellingspoeng slik at sjansen for å møte en annen spiller på alle disse hestepunktene er like.

Vi kan få et mål på feilen som summen av forskjellene i sjansene til gjennomsnittet av sjansene. Vi prøver å minimere det (faktisk vil vi gjøre det 0).

For å gjøre det, må vi kjenne muligheten for å møte en spiller på hver knutepunkt i grafen.

For å beregne den sjansen, start med null. Siden sjansen for å finne en spiller på en gitt knutepunkt, når det ikke er noen spillere, er null. Og deretter, for hvert gytepunkt, gå grafen ved å legge til den merkede sjansen verdien av funksjonen for gjeldende gytepunkt.

Merknad 1: Legge til eller flytte et hestepunkt vil påvirke sjansen for å møte en spiller for hele kartet.

Merk 2: Å holde oversikt over hvor mye hvert gytepunkt påvirker sjansen, vil gjøre det enklere.

Merknad 3: Siden noder har størrelse, hvor nært du kan komme til feil = null, avhenger av størrelsen på noderne. Du kan være mer presis ved å arbeide med verdier (minimun og maksimal sjanse, avhengig av den spesielle posisjonen til hestepunktene i noden).

Plasser gytepoeng tilfeldig, og start deretter med å flytte dem på en slik måte at feilen blir mindre (betrakt en mulig bevegelse, og hvis feilen minker, hold den tilbake, ellers returner den). Og fortsett å gjøre det til vi ikke kan forbedre noe videre (for mange iterasjoner uten forbedring, eller feil er null).

Merk 4: Når du flytter et hestepunkt, kan du bruke sjansen til å møte en spiller (med unntak av hevepunktet du vil flytte) for å velge en ny posisjon for et hodepunkt som tilfeldig posisjon slik at du kan møte en spiller nærmere gjennomsnittet er mer sannsynlig. Jeg påminner deg om at det å flytte hestepunktet vil påvirke middelet.

Den forventede oppførelsen er at gytepunktet som er for tett sammen, beveger seg fra hverandre, og gytepunkter som er for langt fra hverandre kommer nærmere. Til de når likevekt.

Hvis du har flere gjengepunkter på en knute ved en hvilken som helst gjengivelse (det er lite sannsynlig, siden de skulle ha en tendens til å bevege seg fra hverandre, men det er mulig hvis du har store nok noder), splitt knutepunktet og fortsett å løse. Enhver deling av noden er gyldig.


Ovennevnte løsning vil nærme seg feil = null, men garantert ikke å nå null. Du kan gjøre er å kjøre den til den når et lokalt minimum ... I teorien kan du da dele knutepunkter for å gjøre det nøyaktig null ... Likevel svarer det til å justere kurstedkoordinatene!

Prøv simulert annealing for å flytte spissen i noden. Selv om det ærlig er, er det sannsynligvis ikke verdt det å plage med et slikt detaljnivå.


Jeg vil gjøre det klart at resultatet for et flatt kart uten hindringer ikke vil være jevnt fordelte poeng. I stedet, hvis kartet har kanter (det vil si hvis det ikke vikles rundt), så vil det være flere gresspunkter nærmere kantene, dette er fordi poeng i sentrum kan nås fra flere retninger, og øker sjansen for å støte på andre spillere der. Dermed peker ytterligere fra hverandre nær sentrum for å kompensere.


Zibelas 07/28/2017.

Det avhenger av hva slags spill du vil opprette og hvor raskt det er. Den perfekte jevnt fordelte fordeling er mulig på en sfære som verden (for eksempel Planetary Annihilation). Men er det et godt alternativ i spillet ditt? Selv om alle gyter på samme avstand, kan noen gyter fortsatt ha bedre fordel.

  • Nærmere / bedre våpen i rekkevidde / flere ressurser
  • Bedre omslag / mer skjult / oversikt
  • "Flyten" av spillerne, noen steder er mer attraktive enn andre (tenk på et fullstendig skogskart med et enkelt hus på ett sted, uansett hvor huset er, god sjanse for at folk sjekker det ut)

Er kartet ditt en fast en eller en prosessgjenopprettet en? Og prøvd å spille Age of Empires med 8 personer på et 2 personers kart? Det er ikke mulig å skalere spillerne uendelig uten å justere kartstørrelsen. Selv en urettferdig startplassering kan gi mye dynamikk i spillet (se Worms-serien). Ingen klagde på om du reiste rett i en stor klynge, så lenge din ene runde allianse med en annen spiller varte eller du ikke hadde de mest overlevende ormer etter første runde.

(Jeg vil legge til noen flere eksempler hvis jeg vet mer om din type spill)


Aric Fowler 07/28/2017.

Går etter noe som ikke er foreslått så langt: Gjør det slik at det ikke er noe senter på kartet. Det jeg mener med dette er at kantkanten går sammen på motsatt side. Dette ville ta mye programmeringsarbeid, men i praksis kan det gjøre nivået gjenta seg uendelig hvis du går i en retning. Dette betyr at det ikke er noe senter, og en tilfeldig gyteposisjon vil ikke ha noen fordeler eller ulemper.

Du kan gjøre dette ved å lage et flatt kart som er firkantet, og bli med hver kant til en kopi av motsatt kant. Når en spiller går av siden, blir de teleportert uten spillerens kunnskap til motsatt kant. Selvfølgelig vil du ikke teoretisk kunne se spillere på den andre siden av grensen. For å fikse dette, lag kloner av den spilleren som ser ut til å gå rundt på den andre siden av grensen slik at du kan se dem, og når du kjører mot dem, teleporterer du over og den faktiske spilleren står der hvor dummien var.

Alternativt kan hele kartet eksistere på utsiden av en sfære, men dette gjør koordinater vanskelig for gyting.

1 comments
2 Avery 07/29/2017
Eller lage et kart som, i sentrum, kan du jakte eller jakte mye lettere, og kan også finne løv lettere, men igjen er du mye mer mulig å bli jaget som dette, og i ikke-senter områder, gjør du slik at spillerne er mindre tilbøyelige til å finne andre brukere og plyndre, så hvis de vil ha mer loot, må de gå til sentrum, hvis de vil overleve lenger, må de være der de er. Så i utgangspunktet gjør ulempen med tilfeldige gyter en fordel.

dnk drone.vs.drones 07/28/2017.

Her er noen mulige løsninger:

  • Spy tilfeldig på omkretsen av sirkelen
  • Spy tilfeldig på radii (ikke gyting for å lukke sentrum)
  • Legg til en tilfeldig spiontidskomponent

Diagram over gytemekanismer

2 comments
Zanon 07/28/2017
Det andre bildet er et godt alternativ. Det løser problemet med det første alternativet hvor spilleren vet nøyaktig hvor alle andre spillere er.
Avery 07/29/2017
@Zanon men med første bilde spillere kan (og sannsynligvis vil) bevege seg unna før noen kommer dit. Den andre vil føre til urettferdig gyte, noen nær andre. Kanskje noe som dette, der det er 2 sirkler, og forskjellen mellom mindre og større er hvor de gyter, så som andre bilder, men mindre til senteret.

MrCranky 07/28/2017.

Grunnleggende tror jeg dette er et graffordelingsproblem. Forutsatt en dødsfallsituasjon (hver annen spiller er en fiende), må du modellere kartene dine som en sammenkoblet graf, og spore hvilken knutepunkt i grafen hver spiller er nærmest. Ikke alle knuter trenger å være et gytepunkt, men du trenger kompleksgrafen til modellavstand mellom gytepoeng. Ved gytetid, er du deretter iterating grafen og scoring hver sprøytegrense basert på om det nærliggende noder har spillere.

Den ideelle noden har da:

  • Ingen spillere i øyeblikket
  • Mer enn null spillere i noder i nærheten (et lite antall lenker unna)

Tenk deg at grafen din har blitt regularisert, og du trekker konsentriske soner rundt hver knute. Du straffer noden hvis de indre sonene allerede har spillere i dem, og belønner noder som har spillere på riktig avstand unna. Du vil oppfordre gyte nær nok til andre spillere at de raskt kan finne interesse, men ikke så nær at de hopper på før de har fått sjansen til å få sine lagre.

Du må øke kartstørrelsen når antall spillere vokser, men k må ikke være 1 eller høyere. Ditt verste tilfelle vil fortsatt være at hver knutepunkt på grafen har minst en spiller - i så fall er det ingen gode noder å bruke, og du må måtte lide den saken og gyte en spiller som vet at de vil lande rett på toppen av en annen. Scoringsalgoritmen skal likevel veie nesene slik at du gyter i knutepunktet med de færre andre spillerne.

Husk at kartgrafen må bygges grundig, med kjennskap til kartet, dets ruter, eventuelle chokepoints og effective avstand mellom knutepunktene, ikke den actual avstanden. Som i bruk noe som målt tid for å krysse mellom knuter fremfor avstand, for å ta hensyn til vanskeligere terreng. Også du trenger å stå for åpenhet vs dekning; to noder kan være fysisk langt fra hverandre, men fordi de er veldig åpne, kan det være at de er like sårbare som å gyte en spiller ved hver knutepunkt som om du hadde skapt dem rett ved siden av hverandre.

avgrensninger:

  • Legg til en midlertidig straff for å score hvis en spiller har hevdet den noden nylig, for å stoppe chokepoints fra forming (en endeløs strøm av spillere som kommer fra samme retning og blir plukket av)
  • Legg til tilfeldighet innenfor et område (f.eks. Velg de beste 3 noder og velg deretter tilfeldig mellom dem med samme sannsynlighet) for å få mer variasjon.
  • Legg til en innledende vekt til midten av kartet (eller de mest interessante punktene) når ingen ennå har spunnet, slik at du gyter på kjente steder, selv om hver knute har en score på null fordi ingen andre spillere er til stede.

Aaron 07/28/2017.

Noen få andre har allerede diskutert begrensningene i dine krav (kartet må skala på et tidspunkt for å hindre overbefolkning, etc.), og har til slutt unnviket det faktum at det sannsynligvis ikke er en "perfekt" plasseringsalgoritme. Når det sannsynligvis ikke er en "perfekt" algoritme, ser jeg alltid mot heuristikk. Du har flere kriterier som enten direkte eller indirekte er i strid med hverandre, sammen med et svært komplisert søkerom. Å finne en optimal løsning kan ikke være gjennomførbar eller praktisk, men med en liten innstilling kan en statistisk tilnærming utføre det aller fleste av tiden.

Adresserer ditt tredje og fjerde kriterium: "The map shouldn't have to expand."

Jeg vil sørge for at du i begynnelsen har en overflod av noder (dvs.: så tett som et navigasjonsnett for veibeskrivelse). Dette gjør beregningen av avstanden til andre spillere dyrere (ikke direkte nærliggende noder), men dette er ikke en prosess som vil skje mer enn en gang per runde (antar jeg). En bonus på dette er at du kan bruke et pre-rolled nav-bibliotek for de fleste av operasjonene dine. I tillegg vil dette respektere traversal rundt hindringer på en rettferdig måte hvor euklidisk avstand ikke kan (spillere i en labyrint kan plasseres nærmere sammen enn i et åpent felt)

Beregn heuristikk for dine ønskede gyteegenskaper:

Etter å ha tilfeldig plassert alle spillerne, beregne ytelsen til de omkringliggende noder basert på dine kriterier (avstand fra andre spillere, avstand til gyte osv.) Vektene av verdiene dine kan tweaked og manipuleres til å være ikke-lineære for å justere ytelsen du vil ha et sunt idealt tilfelle (flatt rektangulært rutenett uten hindringer), og ytelsen skal være lik når du legger til verden igjen. Derfra kan du bestemme hvor mange noder du skal søke, hva er terskelen for å flytte et utgangspunkt , og hvor mange iterasjoner du vil utføre før du ferdigstiller gyte og begynner spillet.


Anton Sherwood 07/29/2017.

Hvis spillefeltet er et topologisk torus (det vil si et rektangel hvor det går "utenom grensene" betyr det å gå inn på motsatt side), er dette sannsynligvis et godt svar: Spilleren j springer på x = (pjW/N) mod W, y = (qjH/N) mod H , hvor W,H er rektangelets dimensjoner, N er antall spillere, og p,q er heltall som skal bestemmes; de er tydelige, (sannsynligvis) relativt primære, og ikke så langt fra sqrt(N) . Hagepunktene danner et skråt "tapet" mønster.

Det antas at spillerne gjemmer seg bare i begynnelsen av spillet. Hvis de gyter senere, antar du at du vil sette dem så langt som mulig fra hvilken som helst spillers nåværende posisjon - i et vertex av Voronoi-diagrammet som er definert av de andre spillerne.


NotThatGuy 07/31/2017.

Hva med:

Hver spiller er omgitt av en ikke-gytende boks (eller sirkel).

Som i er det en firkant av en viss størrelse som gyter rundt hver spiller og følger den spilleren rundt - ingen annen spiller kan gyte innenfor den kvadraten.

Disse rutene påvirker bare gyting og ikke andre bevegelser i løpet av spillet.

Dette fungerer med enten bare gyting eller kontinuerlig gyting.

(Dots angir spillere og grønn indikerer mulig gyteområde for nye spillere)

Kartstørrelsen behøver ikke å øke proporsjonal med antall spillere

For å håndtere dette kan du gjøre en av to ting: (eller begge)

  • Reduser størrelsen på ikke-gyteboksene basert på antall spillere.
  • Tillat opptil X fiende spillere å gyte i hver boks.
    • Dette nummeret kan øke mens du går (starter ved 0).
    • Variant 1: Har en mindre, ikke-gyte boks og en større begrenset gyte boks.
    • Variant 2: Vanskelighetsgrader i henhold til hvor nært det nye gyte er til denne spilleren (hvis det er inne i esken) - kan være vanskelig å implementere effektivt.

Related questions

Hot questions

Language

Popular Tags