Reilut nopat, reilu peli
Jokainen backgammonin pelaaja, joka häviää viimeisen heiton tuplalle, on miettinyt sitä: ovatko nämä nopat reiluja? Se on oikea kysymys mille tahansa backgammon-sovellukselle. Tässä on tarkalleen, miten noppamme luodaan, miksi kukaan, me mukaan lukien, ei voi vääristää niitä, ja miten pelin loppukin pidetään rehellisenä.
Tarkista mikä tahansa päättynyt peli itse
Puhe on halpaa, joten tässä on se osa, jonka voit ajaa itse. Kun ottelu päättyy, paljastamme sen palvelinsiemenen, sitoumuksen, jonka julkaisimme ennen ensimmäistä heittoa, ja jokaisen lenkin, jonka kumpikin puoli julkaisi pelin aikana. Liitä paljastuspaketti alle tai hae ottelu sen tunnuksella: tämä sivu johtaa jokaisen nopan uudelleen tuosta tallenteesta, täsmälleen samalla laskennalla, jonka palvelimemme suorittivat, ja näyttää heitto heitolta, täsmäävätkö tallennetut arvot. Missään kohdassa sinun ei tarvitse uskoa meitä sanaan: laskenta on avointa ja kuka tahansa voi toistaa sen. Ainoa asia, jota tämä sivu ei tarkoituksella tee, on jakaa vihreää "todistettavasti reilu" -leimaa, koska se ei voisi ansaita sitä rehellisesti. Se ei näe koskaan niitä arvoja, jotka oma laitteesi kirjasi ja lukitsi ennen ensimmäistä heittoa, ja tallenne, jonka ketju on vaihdettu kokonaan huolelliseen väärennökseen, johtuu täällä aivan yhtä moitteettomasti. Vain tavu tavulta tehty vertailu laitteesi lukitsemiin arvoihin sulkee sen pois, ja ne arvot ovat vain sinun sovelluksessasi. Siksi "johdonmukainen" on tämän sivun rehellinen katto, ja vahvimman tuomion antaa sovelluksen Vahvista-näkymä.
Nopat: Todistettavasti reiluja, heitetään palvelimella
Jokainen heitto päättyneessä verkko-ottelussa syntyy pelipalvelimillamme, ja se on todistettavasti reilu ilman että sinun tarvitsee uskoa meitä sanaan. Ennen ensimmäistä heittoa julkaisemme sitoumuksen salaiseen siemeneen, josta nopat tulevat, ja kummankin pelaajan sovellus sitoutuu omaan ketjuunsa; kaikki tämä jäädytetään yhteen tallenteeseen ennen kuin kukaan heittää. Sen jälkeen jokainen heitto kuluttaa kummankin puolen ketjusta yhden tuoreen lenkin: vuorossa oleva pelaaja julkaisee omansa vuoron alussa, vastustaja vapauttaa omansa vasta kun se on lukittu, ja noppa johdetaan viimeisenä. Nopan viimeinen tuntematon syöte on siis aina laudan toisella puolella. Aloitusnopat eivät ole poikkeus: kumpaakaan ei ole olemassa ennen kuin molemmat puolet ovat antaneet osuutensa. Jokainen noppa on siten etukäteen sidottujen arvojen deterministinen tulos: kukaan, mekään emme, ei voi valita noppaa, vaihtaa sitä toiseen tai heittää sitä hiljaa uudelleen. Tämä on väite valmiin heiton arvosta eikä ulotu sen pidemmälle: se peruuntuuko ottelu, meneekö viesti perille ja kenen kello loppui, jäävät sen ulkopuolelle. Yllä oleva työkalu johtaa päättyneen pelin jokaisen nopan uudelleen julkaistusta tallenteesta, ja saman laskennan voi toistaa kuka tahansa. Mitä se ei voi tehdä, on vahvistaa että tallenne on sinun ottelusi: siihen tarvitaan arvot, jotka laitteesi lukitsi ennen peliä, ja ne ovat vain sinun sovelluksessasi, joten se viimeinen askel otetaan sovelluksen Vahvista-näkymässä.
Yhtä tärkeää on, missä heitto tapahtuu. Noppia ei koskaan luoda laitteellasi, puhelimesi vain näyttää heiton, jonka palvelin on jo tehnyt. Tuo yksi suunnitteluratkaisu poistaa koko noppahuijausten perheen: muokattu sovellus ei voi heittää uudelleen, viivepiikki ei voi kahdentaa heittoa, eikä mikään asiakaspuolen kikka voi kurkistaa seuraavaa lukua, sillä seuraava luku ei ole puhelimessasi luettavana: se johdetaan palvelimella, ja vasta kun molemmat puolet ovat vapauttaneet lenkkinsä sille vuorolle.
Eikä heittoja koskaan säädetä. Ei ole ”sitoutumiskäyrää”, ei paluumekaniikkaa, ei tukea tappioputkessa oleville pelaajille. Generaattori ei tiedä eikä välitä siitä, kuka voittaa.
Lauta: Varmennettu joka ainoalla siirrolla
Reiluista nopista olisi vähän hyötyä, jos lauta itse voisi ajautua tai sitä voisi peukaloida, joten peli toimii tiukalla palvelinvaltaisella mallilla. Laitteesi ei koskaan kerro palvelimelle, miltä lauta näyttää, se lähettää vain aikeesi (”siirrä tämä nappula 13-pisteestä 8-pisteeseen”). Palvelin tarkistaa siirron virallisia sääntöjä ja virallista lautaa vasten; laittomat siirrot yksinkertaisesti hylätään, väitti muokattu asiakas mitä tahansa.
Sitten tulee kaksoistarkistus: jokaisella tilapäivityksellä palvelin lähettää todellisen lauta-aseman tiiviin sormenjäljen (tiivisteen). Laitteesi laskee saman sormenjäljen paikallisesta laudastaan ja vertaa. Jos yksikin nappula poikkeaa, asiakas hylkää oman kopionsa ja synkronoi uudelleen palvelimelta. Molemmat pelaajat katsovat siis todistettavasti samaa peliä koko ajan, epäsynkronit korjaavat itsensä yhdellä edestakaisella, eikä ole hetkeä, jolloin vanhentuneella tai muokatulla laudalla voisi pelata.
Vastustajat: Glicko-2-vastinparit
Reiluus koskee myös sitä, ketä vastaan pelaat. Sijoitukset käyttävät täällä Glicko-2-järjestelmää, Elon nykyaikaista seuraajaa, joka seuraa sekä pelivahvuuttasi että järjestelmän varmuutta tuosta arviosta, joten uudet pelaajat päätyvät nopeasti oikealle tasolleen sen sijaan, että olisivat askelkiviä viidenkymmenen pelin ajan. Vastinparit yhdistävät sinut samantasoisiin vastustajiin, ja sijoitetut tulokset syötetään takaisin jokaisen pelin jälkeen.
Tulos: kun voitat, olet päihittänyt vertaisesi. Kun häviät, on jotain oikeaa opittavaa, useimmiten strategiaoppaissa.
Miltä reilut nopat oikeasti tuntuvat
Tässä epämukava totuus: aidosti satunnaiset nopat tuntuvat vaihtelevammilta kuin useimmat odottavat. Aito satunnaisuus tuottaa neljä tuplaa peräkkäin, turhia sisääntuloyrityksiä yhden pisteen lautaa vastaan ja viimeisen heiton ihmeitä, juuri niillä yleisyyksillä, jotka todennäköisyys ennustaa. Se, että 17/36-heitto epäonnistuu kahdesti peräkkäin, tapahtuu useammin kuin joka neljäs kerta. Muisti säilyttää kohtuuttomuudet ja hylkää arkisen, siksi jokaisella kokeneella verkkopelaajalla on ”huijatut nopat” -tarina, eikä yksikään tilastollinen tarkastus ole koskaan vahvistanut ainuttakaan niistä täällä.
Jos haluat kalibroida vaistosi, todennäköisyyden perusteiden opas esittää oikeat luvut: 36 yhdistelmää, osumatodennäköisyydet joka etäisyydelle, sisääntulon mahdollisuudet palkilta. Kun tietää, että tietty luku tulee 11 kertaa 36:sta, ”mahdoton epäonni” muuttuu ”ihan tavalliseksi tiistaiksi”.
Haluatko syvemmän teknisen version, generaattoriluokat, miten commit-reveal-todistus toimii ja ”huijattujen” putkien psykologian? Blogista löytyy: miten palvelinpuolen RNG oikeasti toimii.
Lupauksemme
- Palvelimella luodut, todistettavasti reilut nopat: niitä ei koskaan heitetä laitteella eikä säädetä kenenkään pelaajan tai tilanteen mukaan, ja ne johdetaan syötteistä, joihin molemmat puolet sitoutuvat ennen ensimmäistä heittoa; pelin päätyttyä jokainen noppa johdetaan uudelleen julkaistusta tallenteesta, ja sovellus vahvistaa että ottelu oli sinun.
- Sääntöjen valvonta lähteellä: palvelin validoi jokaisen siirron; muokatut asiakkaat eivät hyödy mitään.
- Jatkuva laudan varmennus: tiiviste tarkistetaan joka päivityksellä, itsestään korjautuva jokaisessa ristiriidassa.
- Taitoon perustuva parinmuodostus: Glicko-2-sijoitukset ja sijoitukseen perustuvat vastinparit.
Reilut nopat tarkoittavat, että ainoa jäljelle jäävä etu pöydässä on taito, ja taidon voi oppia. Aloita säännöistä, teroita sitä strategialla ja testaa se livenä: alla oleva pöytä on ilmainen, selaimessasi, ilman asennusta.