Gør det tilfældige spawn point retfærdigt?

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

Hvis alle spillere bliver spildt i tilfældige positioner samme afstand fra nabostillede spillere, vil antallet af spillere være proportional med sandsynligheden for, at deres gydepositioner er uretfærdige. De tættere spillere gyder til midten af ​​kortet, jo mere sandsynligt de er at støde på andre spillere, og jo mindre sandsynlige er de at overleve, sammenlignet med spillere på kanten af ​​kortet. Lad os antage, at alle spillere er spurgt på samme tid.

Er der en måde at forme gydepunkter på eller ændre kortet, så:

  1. Alle spillere har et begrænset antal tilstødende fjender.
  2. Alle spillere har lige chance for at støde på tilstødende fjender.
  3. Kortstørrelse behøver ikke at stige i forhold til antallet af spillere.
  4. Disse begrænsninger håndhæves ikke med vilkårlige uigennemtrængelige mellemrum.

Svaret behøver ikke at være perfekt, bare selvfølgelig bedre end alternativet. Ud af boksen tænker velkommen.

5 Comments
10 Zibelas 07/28/2017
Krydder i en cirkel?
1 inappropriateCode 07/28/2017
@Zibelas Traditionelle tilgang, men overtræder krav 3, og med mange spillere skaber dette et stort kort og tomt interiør.
4 Zibelas 07/28/2017
Det afhænger af din type spil. (2D / 3D, respawn / sidste mand stående osv.) Perfekt gyde er i så fald kun muligt på en boldform verden (mere spiller, tættere gyde, men du kan garantere at de har samme afstand). På en 2D verden med faste grænser har du altid mindre grænsende spillere, da du ikke har plads til at gyde dem. Hvis det er et 3D-spil, kan du have flere lag.
1 RothX 07/28/2017
Jeg tror, ​​det ville hjælpe med at vide, hvilken slags spil du laver. Det lyder som en slags krigsspil, men hvad er detaljerne? Er det en skydespil? Begynder du med alle dine våben, eller skal du undersøge og finde ting? Hvad er sejrens tilstand? Hvor lang tid forventes en kamp at vare?
3 Jan 'splite' K. 07/28/2017
Ikke for fuldt svar, men jeg tror alle prøver for "fair & balanced spawn" som ... er ikke sjovt. Se på fremragende PUBG (og andre Battle Royale) gyde: Spillere kan "gyde" (godt springe og lande ...) næsten hvor som helst de vil - hvis du vil have konflikt og drama, vælger du sted hvor de fleste spillere lander / gyder. Høj risiko høj belønning, men kun hvis spiller ønsker det. Du kan lande et sted i skov, du har tid til at forberede dig selv - lav risiko lav belønning, men nogle spillere kan foretrække det (som mig for eksempel;)). Det er ikke tilfældigt, det er spillernes valg.

9 Answers


Philipp 07/28/2017.

Lad spillerne vælge deres startsteder selv.

I begyndelsen af ​​spillet, spawn alle spillere i midten af ​​kortet, men uden nogen måde at skade de andre spillere. De bliver nødt til at svømme ud og erhverve midlerne til at engagere hinanden (bygge en base, hente et våben, samle ressourcer osv.)

Der er enten lidt held og kort viden involveret i at finde en god start placering tidligt (afhængigt af om du bruger proceduremæssige eller håndlavede kort). Men hvornår og hvor man skal afregne er for det meste en strategisk beslutning. At implementere tidligt giver dig en fordel, men sætter dig i en farlig position. Plukker din base forsigtigt sætter dig bag i det tidlige spil, men kan være en afgørende fordel i midten og sen spillet.

5 comments
14 Shashimee 07/28/2017
+1 til brug af Hunger Games 1 film gydesystem.
3 Philipp 07/28/2017
@Shashimee Jeg tror faktisk, jeg har set denne metode først i Anno 1602. Jeg tror også, at nogle af de tidlige C & C-spil havde det som en valgfri multiplayer-spilmulighed (men jeg er ikke sikker på, om jeg husker det korrekt).
3 Zibelas 07/28/2017
@Philipp MULE for commodore 64 omkring 15 år ældre og lad dig også vælge dine stillinger :)
Dent7777 07/28/2017
Derefter løber du ind i spørgsmålet, hvor du efterfølges til dit spawn. Dette kunne naturligvis være ønsket spilmekaniker, men det kunne også være yderst frustrerende og ikke noget, du beslutter dig for i dit spil. Det ville være en god idé at få tegnene til at være usynlige og spillere-kollisionsfrie og finde deres base før spillet startes.
Kroltan 07/28/2017
Det er den metode, der bruges af "Vampyrism" og "Tree Tag" -linjen af ​​brugerdefinerede gamemoder på Warcraft 3. Det virker bedst, da alle spillere er allierede (i hvert fald oprindeligt) og modstanderne frigives senere.

Theraot 07/28/2017.

Forstå kravene

  1. Alle spillere har et begrænset antal tilstødende fjender.

Først og fremmest snakker vi om spillernes spawner, ikke den aktuelle position af spillerne på et givet tidspunkt i spillet. Just getting that out of the way.

Tilstødende er veldefineret, når vi taler om en graf. Vi kan tænke på et kort, der repræsenterer navigation på kortet - fra nu af "grafen".

Hvis kan knude kan have højst et spawn punkt, så taler de om at være "tilstødende" fornuftigt. Bemærk: Jeg vil ikke begrænse knuder til at have ét enkelt gydepunkt, af grunde, der vil fremgå senere.

For at opbygge grafen skal vi overveje ting som vægge, broer, stiger, teleportationspunkter eller endda overveje flyplads, hvis der kunne være en spiller, der kan flyve. Hver knap repræsenterer et traversabelt sted; hver forbindelse repræsenterer en mulig bevægelse.

Bemærk: Kend størrelse og form af noderne, og arbejde med faktisk tilstødende knuder. Overvej ikke knuder et punkt. Overvej ikke, at forbindelser har længde. Brug også konvekse knuder.

Grafen kunne have været forkompileret (kortet blev oprettet af en designer); ellers kan den oprettes på flyve, hvis kortet genereres tilfældigt.

  1. Alle spillere har lige chance for at støde på tilstødende fjender.

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

Forudsat at hver spiller foretager en tilfældig gåtur, vil sandsynligheden for at finde en spiller på et givet tidspunkt - på et flade rum uden forhindringer - blive givet af en (Gaussisk) funktion af afstanden til sprængpunktet - fra nu af " fungere".

Da vi arbejder på grafen, vil vi i stedet annotere værdierne på grafen.

  1. Kortstørrelse behøver ikke at stige i forhold til antallet af spillere.

Hvis vi havde begrænsningen af ​​at have et enkelt gydepunkt pr knude, så for at tilføje flere spillere ville vi have brug for mindre knuder. Hvis vi bestemmer grafen, før vi ved, hvor mange spillere vi har, må vi muligvis inddele knuder for det pågældende spil.

  1. Disse begrænsninger håndhæves ikke med vilkårlige uigennemtrængelige mellemrum.

Jeg har ikke til hensigt at tilføje forhindringer for at løse problemet. Au contraire , jeg har brug for at arbejde omkring hindringerne. Hvis de ikke var der, ville implementeringen være enklere.


Løsning

Vi forsøger at placere N spawn points, så chancen for at støde på en anden spiller på alle disse spawn points er ens.

Vi kan få en foranstaltning af fejlen som summen af ​​forskellene mellem chancerne for middelmængden af ​​chancerne. Vi forsøger at minimere det (vi vil faktisk gøre det 0).

For at gøre det skal vi kende chancen for at møde en spiller på hver knudepunkt i grafen.

For at beregne denne chance, start med nul. Da chancen for at finde en spiller på en given knude, er der ingen spillere, når der ikke er nogen spillere. Og derefter, for hvert spawn punkt, gå grafen tilføje den annoterede chance værdien af ​​funktionen for det aktuelle spawn punkt.

Note 1: Tilføjelse eller flytning af et spilpunkt vil påvirke chancen for at støde på en spiller for hele kortet.

Note 2: At holde øje med, hvor meget hvert spawn punkt påvirker chancen, vil gøre tingene lettere.

Note 3: Da nodene har størrelse, hvor tæt du kan komme til fejl = nul afhænger af nodens størrelse. Du kan være mere præcis ved at arbejde med værdier (minimun og maksimal chance, afhængigt af den særlige position af kropspunkterne i noden).

Placer gydepunkter tilfældigt, og start derefter med at flytte dem på en sådan måde, at fejlen bliver mindre (overvej en mulig bevægelse, og hvis årsagen til fejlen falder, hold den, ellers vend den igen). Og fortsæt med at gøre det, indtil vi ikke kan forbedre yderligere (for mange iterationer uden forbedring, eller fejl er nul).

Note 4: Når du flytter et spawnpunkt, kan du bruge chancen for at støde på en spiller (med undtagelse af det spawnpunkt du flytter) til tilfældigt at vælge en ny position for et spawn punkt, sådan som en chance for at møde en spiller tættere på den gennemsnitlige er mere sandsynligt. Jeg minder dig om at flytte sprængpunktet vil påvirke middelværdien.

Den forventede adfærd er, at gydepunkt, der er for tæt sammen, går adskilt, og der er tættere spildpunkter, der er for langt fra hinanden. Indtil de når ligevægt.

Hvis du ved en given iteration har flere spawn points på en knude (hvilket er usandsynligt, da de skal have tendens til at bevæge sig fra hinanden, men det er muligt, hvis du har store nok knudepunkter), split knuden og fortsæt med at løse. Enhver deling af noden er gyldig.


Ovennævnte løsning vil nærme sig fejl = nul, men garanteres ikke at nå nul. Du kan gøre, er at køre den, indtil den når et lokalt minimum ... I teorien kan du derefter opdele knuder for at gøre det nøjagtigt nul ... Men det svarer til at tilpasse kurstedkoordinaterne!

Prøv simuleret glødning for at flytte gydepunktet i knuden. Selv om det ærligt er, er det nok ikke værd at bryde med et sådant detaljeringsniveau.


Jeg vil gerne gøre det klart, at resultatet for et fladt kort fri for forhindringer ikke vil være ensartede fordelte punkter. I stedet, hvis kortet har kanter (det vil sige, hvis det ikke ombrydes), så vil der være mere spawn point tættere på kanterne, det vil sige fordi punkter i centrum kan nås fra flere retninger, hvilket øger chancen for at støde på andre spillere der. Dermed peger man længere fra hinanden nær centrum for at kompensere.


Zibelas 07/28/2017.

Det afhænger af, hvilken type spil du vil oprette, og hvor hurtigt det er. Den perfekte jævnt fordelte fordeling er mulig på en kugle som verden (for eksempel Planetary Annihilation). Men er det en rimelig løsning i dit spil? Selvom alle mennesker gyder på samme afstand, kan nogle gyder stadig have en bedre fordel.

  • Tættere / bedre våben inden for rækkevidde / flere ressourcer
  • Bedre omslag / mere skjult / oversigt
  • spillernes "flow" er nogle steder mere attraktive end andre (tænk på et fuldskovskort med et enkelt hus på ét sted, uanset hvor huset er, god chance for at folk tjekker det)

Er dit kort en fast en eller en proceduremæssig genereret? Og nogensinde forsøgt at spille Age of Empires med 8 personer på et 2 person kort? Det er ikke muligt at skalere spillerne uendelig uden at tilpasse kortstørrelsen. Selv en uretfærdig startplacering kan medføre meget dynamik i spillet (se Worms serien). Ingen klagede, hvis du sprang ret i en stor klynge, så længe din ene runde alliance med en anden spiller varede eller du ikke havde de mest overlevende orme efter første runde.

(Jeg vil tilføje et par eksempler, hvis jeg ved mere om din type spil)


Aric Fowler 07/28/2017.

Går til noget, der ikke er foreslået hidtil: Lav det så der er ikke noget center på kortet. Hvad jeg mener med dette er, at kortkanterne går ind på de modsatte sider. Dette ville tage en masse programmeringsarbejde, men i praksis kan det gøre niveauet gentage sig uendeligt, hvis du går i en retning. Det betyder, at der ikke er noget center, og en tilfældig gydeposition vil ikke have fordele eller ulemper.

Du kan gøre dette ved at lave et fladt kort, som er firkantet, og tilslutte hver kant til en kopi af den modsatte kant. Når en spiller går væk fra siden, teleporteres de uden spillerens viden til den modsatte kant. Selvfølgelig ville du ikke kunne se spillere på den anden side af grænsen. For at løse dette skal du oprette kloner af den spiller, som synes at gå rundt på den anden side af grænsen, så du kan se dem, og når du løber hen imod dem, tæller du over og den aktuelle spiller stod, hvor dummien var.

Alternativt kan hele kortet eksistere på ydersiden af ​​en kugle, men dette gør koordinater vanskelige for gydning.

1 comments
2 Avery 07/29/2017
Eller lav et kort, som i centrum kan du jage eller jage meget lettere, og du kan også finde løv lettere, men igen er det meget mere muligt at blive jaget som dette og i ikke-centrale områder så spillere er mindre tilbøjelige til at finde andre brugere og loot, så hvis de vil have mere loot, skal de gå til centrum, hvis de vil overleve længere, bliver de nødt til at blive hvor de er. Så grundlæggende gør ulempen ved tilfældige gyder en fordel.

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

Her er nogle mulige løsninger:

  • Spy tilfældigt på omkredsen af ​​cirklen
  • Spy tilfældigt på radii (ikke gydning for at lukke midten)
  • Tilføj en tilfældig spildtidskomponent

Diagram af gytningsmekanismer

2 comments
Zanon 07/28/2017
Andet billede er en god mulighed. Det løser problemet med den første mulighed, hvor spilleren ved præcis, hvor alle andre spillere er placeret.
Avery 07/29/2017
@Zanon dog med første billede spillere kan (og sandsynligvis vil) flytte væk, før nogen kommer der. Andet vil forårsage uretfærdigt gyde, nogle tæt på andre. Måske noget som dette, hvor der er 2 cirkler, og forskellen mellem mindre og større er, hvor de gyder, så som andet billede, men mindre til midten.

MrCranky 07/28/2017.

Grundlæggende mener jeg, at dette er et graffordelingsproblem. Hvis man antager en dødsfaldssituation (hver anden spiller er en fjende), skal du modellere dine kort som en sammenkoblet graf og spore hvilken knude på grafen hver spiller er tættest på. Ikke alle knudepunkter skal være et gydepunkt, men du har brug for den komplekse graf til modelafstande mellem gydepunkter. Ved gytetiden gentager du derefter grafen og scorer hver sprøjtegrund, baseret på om det i nærheden af ​​knudepunkter har spillere.

Den ideelle knude har så:

  • Ingen spillere i øjeblikket i det
  • Mere end nul spillere i knudepunkter i nærheden (et lille antal links væk)

Forestil dig at din graf er blevet reguleret, og du tegner koncentriske zoner rundt om hver knudepunkt. Du straffer noden, hvis de indre zoner allerede har spillere i dem, og belønner noder, der har spillere i den rette afstand væk. Du vil opmuntre til at gyde nær nok til andre spillere, så de hurtigt kan finde interesse, men ikke så tæt på at de hopper på, før de har haft chancen for at få deres lejer.

Du skal øge kortstørrelsen, da antallet af spillere vokser, men k må ikke være 1 eller større. Dit værste tilfælde vil stadig være, at hver knude på grafen har mindst en spiller - i så fald er der ingen gode knuder at bruge, og du bliver nødt til at lide den sag og gyde en spiller, der ved at de vil land lige oven på en anden. Scoringsalgoritmen skal stadig vægte knuderne, så du springer i knuden med de færrest andre spillere.

Husk på, at din kortgraf skal være omhyggeligt bygget med kendskab til kortet, dets ruter, eventuelle chokepoints og effective afstand mellem knudepunkter, ikke den actual afstand. Som i brug noget som målt tid til at krydse mellem knuder frem for afstand for at tage højde for mere vanskeligt terræn. Også du er nødt til at redegøre for åbenhed vs dækning; to noder kan være fysisk langt fra hinanden, men fordi de er meget åbne, kan gyde en spiller ved hver knude betyde, at de er lige så sårbare, som om du havde skabt dem lige ved siden af ​​hinanden.

justeringer:

  • Tilføj en midlertidig straf for at score, hvis en spiller har skabt det pågældende knude for nylig for at stoppe chokepoints fra at danne (en endeløs strøm af spillere, der kommer fra samme retning og bliver plukket)
  • Tilføj tilfældighed inden for en rækkevidde (fx vælg de bedste 3 noder og vælg derefter tilfældigt mellem dem med samme sandsynlighed) for at få mere variation.
  • Tilføj en indledende vægt til midten af ​​kortet (eller de mest interessante punkter), når ingen endnu har sprøjtet, så du kaster på kendte steder, selvom hver knude har en score på nul, fordi ingen andre spillere er til stede.

Aaron 07/28/2017.

Et par andre har allerede diskuteret begrænsningerne af dine krav (kort skal skaleres på et tidspunkt for at forhindre overfyldning osv.) Og har i sidste ende undgået, at der sandsynligvis ikke er en "perfekt" placeringsalgoritme. Når der sandsynligvis ikke er nogen "perfekt" algoritme, ser jeg altid mod heuristik. Du har flere kriterier, der enten direkte eller indirekte er i modstrid med hinanden, sammen med et meget kompliceret søgeområde. At finde en optimal løsning kan ikke være gennemførlig eller praktisk, men med en lille indstilling kan en statistisk tilgang udføre det meste af flertallet af tiden.

Adressering af dit tredje og fjerde kriterium: "The map shouldn't have to expand."

Jeg ville sørge for, at i begyndelsen har du en overflod af noder (dvs.: så tæt som et navigationsnet til stiindsamling). Dette gør beregningen af ​​afstanden til andre spillere dyrere (ikke direkte naboknuder), men det er ikke en proces, der vil ske mere end en gang pr. Runde (jeg antager). En bonus af dette er, at du kan bruge et pre-rolled nav bibliotek til de fleste af dine operationer. Derudover vil dette respektere traversal omkring forhindringer på en retfærdig måde, hvor euklidisk afstand måske ikke (spillere i en labyrint kan placeres tættere sammen end i et åbent felt)

Beregn heuristik for dine ønskede kendetegn:

Efter tilfældigt at placere alle spillerne, skal du beregne udførelsen af ​​de omkringliggende knudepunkter baseret på dine kriterier (afstand fra andre spillere, afstand til gyde osv.) Vægten af ​​dine værdier kan tweaked og manipuleres til at være ikke-lineære for at justere præstationen du vil have et smurt idealisk tilfælde (fladt rektangulært gitter uden forhindringer), og forestillingen skal være ens, når du tilføjer verden tilbage i. Derefter kan du bestemme, hvor mange knudepunkter der skal søges, hvad er tærsklen for at flytte et udgangspunkt , og hvor mange iterationer du vil udføre, før du færdiggør gyden og begynder spillet.


Anton Sherwood 07/29/2017.

Hvis spillefeltet er et topologisk torus (det vil sige et rektangel, hvor det går "ude af grænsen" betyder at komme ind på den modsatte side), er dette sandsynligvis et godt svar: spiller j springer ved x = (pjW/N) mod W, y = (qjH/N) mod H , hvor W,H er rektangelets dimensioner, N er antallet af spillere, og p,q er heltal, der skal bestemmes; de er forskellige, (sandsynligvis) relativt primære, og ikke for langt fra sqrt(N) . Græspunkterne danner et skråt "tapet" mønster.

Det forudsætter at spillerne kun gyder i starten af ​​spillet. Hvis de gyder senere, tror jeg, at du vil sætte dem så langt som muligt fra enhver spilleres nuværende position - i et hjørne af Voronoi diagrammet defineret af de andre spillere.


NotThatGuy 07/31/2017.

Hvad med:

Hver spiller er omgivet af en ikke-gydende boks (eller cirkel).

Som i er der en firkant af en vis størrelse, der springer rundt om hver spiller og følger den pågældende spiller rundt - ingen anden spiller kan gyde inden for denne firkant.

Disse kvadrater påvirker kun gydning og ikke nogen anden bevægelse under spillet.

Dette virker med enten førstegangs gytning eller kontinuerlig gydning.

(Prikker angiver spillere og grønt indikerer mulig gydeområde for nye spillere)

Kortstørrelse behøver ikke at stige i forhold til antallet af spillere

For at håndtere dette kan du gøre en af ​​to ting: (eller begge)

  • Reducer størrelsen af ​​de ikke-gydende kasser baseret på antallet af spillere.
  • Tillad op til X fjende spillere til at gyde i hver boks.
    • Dette nummer kan øges, når du går (fra 0).
    • Variant 1: Har en mindre, ikke-gydeboks og en større, begrænset gydeboks.
    • Variant 2: Vægt sandsynligheder i henhold til hvor tæt den nye gyde er til denne spiller (hvis den er inde i boksen) - kan være svært at implementere effektivt.

Related questions

Hot questions

Language

Popular Tags