Fair terninger, fair play
Enhver backgammonspiller, der taber på en dobbelt i sidste kast, har undret sig: er disse terninger fair? Det er det rigtige spørgsmål at stille enhver backgammon-app. Her er præcis, hvordan vores terninger frembringes, hvorfor ingen, os selv iberegnet, kan skævvride dem, og hvordan resten af spillet også holdes ærligt.
Efterprøv selv ethvert afsluttet spil
Ord er billige, så her er den del, du selv kan køre. Når et parti slutter, afslører vi dets server-seed, den forpligtelse, vi offentliggjorde før første kast, og hvert led, som de to sider offentliggjorde undervejs. Indsæt afsløringspakken nedenfor, eller slå partiet op på dets id: denne side genudleder hver eneste terning ud fra den optegnelse, nøjagtig samme beregning som vores servere kørte, og viser dig kast for kast, om de gemte værdier passer. Intet af det kræver, at du tager os på ordet; regnestykket ligger åbent, og enhver kan gøre det efter. Det eneste, denne side bevidst ikke gør, er at uddele et grønt "beviseligt fair", for det kan den ikke fortjene ærligt. Den ser aldrig de værdier, din egen enhed skrev ned og låste før første kast, og en optegnelse, hvis kæde er skiftet helt ud med en omhyggelig forfalskning, genudledes her lige så fejlfrit. Kun en sammenligning byte for byte med det, din enhed låste, kan udelukke det, og de værdier har kun din app. Derfor er "sammenhængende" det ærlige loft på denne side, og den stærkeste afgørelse er den, Verificér-skærmen i appen kan give dig.
Terningerne: Beviseligt fair, kastet på serveren
Hvert kast i et afsluttet onlineparti bliver til på vores spilservere, og det er beviseligt fair, uden at du behøver tage os på ordet. Før første kast offentliggør vi en forpligtelse på det hemmelige seed, terningerne kommer af, og begge spilleres apps forpligter sig hver på deres egen kæde; det hele fryses i én optegnelse, før nogen overhovedet kaster. Derefter bruger hvert kast ét friskt led fra hver sides kæde: den, der er i tur, offentliggør sit i begyndelsen af turen, modstanderen slipper sit først, når dét er låst, og terningen udledes til sidst. Den sidste ukendte indgang til en terning ligger derfor altid på den anden side af brættet. Åbningsterningerne er ingen undtagelse, ingen af dem findes, før begge sider har bidraget. Hver terning er altså det deterministiske resultat af værdier, der er bundet på forhånd: ingen, os selv medregnet, kan vælge en terning, bytte den ud med en anden eller stille og roligt kaste den om. Det er en påstand om værdien af et færdigt kast, og den rækker ikke længere: om et parti bliver afbrudt, om en besked når frem, og hvis ur der løb ud, ligger alt sammen uden for den. Værktøjet ovenfor genudleder hver terning i et færdigt parti ud fra den offentliggjorte optegnelse, et regnestykke enhver kan gøre efter. Det, værktøjet ikke kan, er at bekræfte, at optegnelsen er dit parti: det kræver de værdier, din enhed låste før spillet, og dem har kun din app, så det sidste skridt sker på Verificér-skærmen i appen.
Lige så vigtigt er, hvor kastet sker. Terningerne frembringes aldrig på din enhed, din telefon viser blot et kast, serveren allerede har foretaget. Netop den designbeslutning fjerner hele familien af terningefusk: en ændret app kan ikke kaste om, et forsinkelsesudsving kan ikke fordoble et kast, og intet trick på klientsiden kan skæve til det næste tal, for det næste tal ligger ikke på din telefon til at blive læst: det udledes på serveren, og først når begge sider har sluppet deres led for den tur.
Og kastene justeres aldrig. Der er ingen »engagementskurve«, ingen comeback-mekanik, ingen håndsrækning til spillere i en tabsstime. Generatoren hverken ved eller bekymrer sig om, hvem der vinder.
Brættet: Verificeret ved hvert eneste træk
Fair terninger ville betyde lidt, hvis brættet selv kunne drive af eller pilles ved, så spillet kører efter en streng server-autoritativ model. Din enhed fortæller aldrig serveren, hvordan brættet ser ud, den sender kun din hensigt (»flyt denne brik fra 13-punktet til 8-punktet«). Serveren efterprøver det træk mod de officielle regler og det officielle bræt; ulovlige træk afvises simpelthen, uanset hvad en ændret klient hævder.
Så kommer dobbeltkontrollen: ved hver tilstandsopdatering udsender serveren et kompakt fingeraftryk (hash) af den sande brætstilling. Din enhed beregner det samme fingeraftryk ud fra sit lokale bræt og sammenligner. Hvis blot en enkelt brik afviger, kasserer klienten sin kopi og synkroniserer på ny fra serveren. Begge spillere ser derfor beviseligt det samme spil hele tiden, uoverensstemmelser heler sig selv på én rundtur, og der er intet vindue, hvor et forældet eller manipuleret bræt kan spilles på.
Modstanderne: Glicko-2-matchmaking
Fairness handler også om, hvem du møder. Placeringerne her bruger Glicko-2, en moderne afløser for Elo, der følger både din spillestyrke og systemets tiltro til det skøn, så nye spillere hurtigt nærmer sig deres sande niveau i stedet for at være trædesten i halvtreds spil. Matchmaking parrer dig med modstandere af sammenlignelig placering, og placerede resultater føres tilbage efter hvert spil.
Resultatet: når du vinder, har du overspillet en ligemand. Når du taber, er der noget virkeligt at lære, oftest i strategivejledningerne.
Hvordan fair terninger faktisk føles
Her er den ubehagelige sandhed: ægte tilfældige terninger føles mere lunefulde, end de fleste forventer. Ægte tilfældighed frembringer fire dobbelte i træk, forgæves indgange mod et etpunktsbræt og mirakler i sidste kast, netop i de hyppigheder, sandsynligheden forudsiger. At et 17/36-kast fejler to gange i træk sker mere end hver fjerde gang. Hukommelsen gemmer skandalerne og kasserer det rutineprægede, og derfor har hver erfaren onlinespiller en historie om »fuskede terninger«, og ingen statistisk gennemgang har nogensinde bekræftet en eneste af dem her.
Vil du kalibrere din intuition, lægger vejledningen i sandsynlighedens grundbegreber de rigtige tal frem: 36 kombinationer, rammeodds på hver afstand, indgangschancer fra baren. At vide, at et bestemt tal dukker op 11 gange ud af 36, forvandler »umulig uheld« til »en helt almindelig tirsdag«.
Vil du have den dybere tekniske version, generatorklasser, hvordan commit-reveal-beviset virker, og psykologien bag »fuskede« stimer? Bloggen har den: hvordan server-side RNG faktisk virker.
Vores løfte
- Servergenererede, beviseligt fair terninger: kastes aldrig på en enhed, justeres aldrig for nogen spiller eller situation og udledes af input, som begge sider forpligter sig på før første kast; når partiet er slut, kan hver terning genudledes af den offentliggjorte optegnelse, og appen bekræfter, at partiet var dit.
- Regelhåndhævelse ved kilden: hvert træk valideres af serveren; ændrede klienter vinder intet.
- Løbende brætverificering: hash-kontrolleret ved hver opdatering, selvhelende ved enhver uoverensstemmelse.
- Færdighedsbaseret parring: Glicko-2-placeringer og placeringsbaseret matchmaking.
Fair terninger betyder, at den eneste fordel, der er tilbage ved bordet, er færdighed, og færdighed kan læres. Begynd med reglerne, skærp den med strategi, og afprøv den live: bordet nedenfor er gratis, i din browser, uden installation.