časť 15
Čo sa dá povedať o jednej partii: záznam, analýza a skladba
Partia na 1,3 kB, graf šance na výhru, ktorý vie rozlíšiť šťastie od rozhodnutia, a skladba, ktorú zatiaľ nikto nepočul. Tri veci, ktoré vyrastajú z jedného nápadu: hra je deterministická.
Pôvodný Dice Wars mal tlačidlo História, ktoré po hre ukázalo, ako sa partia vyvíjala (podľa dobových recenzií). V Audamire z tohto tlačidla vznikli tri veci, ktoré sa dajú napísať jednou vetou: partia sa dá prehrať, partia sa dá rozobrať a partia sa dá zahrať ako skladba. Prvé dve existujú, tretia je zatiaľ nápad s presným plánom, ako zistiť, či stojí za to.
Všetky tri majú jeden základ, o ktorom sa hovorilo v článku o testovaní: celá náhoda hry je odvodená zo stavu, takže tá istá partia dopadne vždy rovnako.
Záznam: partia na jeden riadok
Partia sa dá opísať štyrmi vecami: nastaveniami, seedom, „soľou“ hodov a rozhodnutiami človeka. Všetko ostatné (hody, ťahy súperov, náhodné posily) sa dá z nich vypočítať. Typická partia z meraní (300 náhodných nastavení, nie len Kniežatstvá[1]) má 140 rozhodnutí, 1,3 kB ako JSON a 1,7 kB ako odkaz (najväčšia mala 5,5 kB). Rozhodnutie je jeden zápis s číslami: a12-13 je útok z územia 12 na 13, e koniec ťahu, r1 odpoveď na otázku o prehodení.
Takto vyzerá skutočný záznam jednej krátkej partie, rozfarbený podľa častí:
Z toho vyplývajú veci, ktoré hráč uvidí ako tlačidlá:
- Opakovanie v prehrávači: Prehrať a Pozastaviť, krok vpred a vzad, rýchlosť 0,5× až 8×, posuvník na kolo. Prehranie partie trvá asi 12 ms.
- Zdieľanie odkazom
#R=…alebo súborom.dwr.json. Nič sa nikam nenahráva, odkaz nesie celý záznam. - Kopírovať výsledok: jeden riadok a odkaz, ako pri Wordle. Napríklad (preložený príklad z dokumentácie)
Audamir · denná výzva 2026-10-19 · výhra za 12 kôl · 1 420 bodov · šťastie +2,1. - Hlásenie chyby nesie rozohranú partiu ako riadok
Record:, takže chyba sa dá zopakovať. - Posledných 20 partií sa uchováva v zariadení hráča.
Dve pasce, ktoré záznam odhalil
Dvojité stlačenie „Koniec ťahu“. Keby sa druhé stlačenie zaznamenalo ako druhé rozhodnutie, prehrávanie by skončilo ďalší ťah. Druhé stlačenie sa preto nepočíta.
Hráč sa pozrie na hod, potom odíde. Partia uložená uprostred útoku nesie „rozohraný útok“, ktorý sa po obnove zopakuje s rovnakým hodom, aby hráč nemohol po pohľade na výsledok zvoliť iný útok. Záznam to musí zvládnuť: rozhodnutia z neukončeného útoku sa z neho pri obnove vyberú a znova sa vyžiadajú.
Zmluva s minulosťou, druhýkrát
Rovnako ako pri generátore území vzniká pri zázname zmluva: ak sa zmenia pravidlá alebo AI, staré záznamy sa nedajú prehrať rovnako. Preto každý nesie číslo verzie pravidiel (RULES_VERSION) a záznam z inej verzie sa označí ako zastaraný a neprehráva sa. Pravidlo pre vývojára je v zozname: s každou zmenou, ktorá môže zmeniť partiu, zvýš číslo verzie. A pretože sa na to dá zabudnúť, stoja za tým zlaté záznamy: test prehrá uložené partie a ak sa výsledok zmenil bez zvýšenia čísla, zlyhá a povie, čo urobiť.
Pri revízii sa našla jedna závažná chyba. Uložená hra pri „Koniec ťahu“ niesla token konca ťahu, kým jej snímka ešte zodpovedala ťahu človeka. Po „Pokračovať“ sa ťah zahral znova, pridal sa druhý token a prehrávanie sa pokazilo. Oprava je v poradí: token sa zapíše až po uložení.
Analýza: kde sa partia rozhodla
Keď sa partia dá prehrať, dá sa z nej počítať. Tlačidlo Analýza (na konci hry, v karte záznamov a v prehrávači) odpovie na dve otázky: kde sa hra rozhodla a či to bolo šťastie alebo rozhodnutie.
Hlavná veličina je šanca na výhru po kolách. Počíta sa metódou Monte Carlo: z uloženej pozície z každého kola sa zvyšok hry odohrá mnohokrát a šanca je podiel partií, ktoré tím hráča vyhrá. Podobné grafy poznajú používatelia šachových serverov z rozborov partií.
Dôležitá je presná definícia. Za hráča hrá zástupná AI (proxy) úrovne 2, súperi hrajú na úrovni hry. Číslo teda znamená: tvoja šanca, keby za teba odtiaľto hrala táto AI. Nie je to výrok o tom, čo by urobil lepší alebo horší hráč.
Šťastie plus rozhodnutie
Zlomový útok (turning point) sa rozloží na dve časti. Pre útok so šancou p sa vyhodnotia tri pozície: pred útokom (V0), po výhre (Vw) a po prehre (Vl). A potom:
zmena = Vreal − V0
očakávané = p · Vw + (1 − p) · Vl
šťastie = Vreal − očakávané (čo kocky pridali k tomu, čo sľubovali šance)
rozhodnutie = očakávané − V0 (akú hodnotu mal útok podľa šancí)
zmena = šťastie + rozhodnutie
Je to tá istá myšlienka, ktorú pozná každý, kto počíta očakávanú hodnotu: útok so šancou 40 % môže byť dobrým rozhodnutím a aj tak sa prehrať. Analýza to vie povedať: pri každom zlomovom bode ukáže osobitne šťastie a osobitne rozhodnutie.
Takto to vyzerá na jednej skutočnej partii:
Šum, ktorý rozpráva príbehy
Analýza sa pokazila na jednej veci, a vďaka nej má dnes svoje pravidlo. V reálnej partii našla „zlomový bod“ so zmenou +8 bodov, ktorý bol len šumom z náhodných simulácií. Preto platí, že zlomový bod musí byť významný: zmena šance musí byť aspoň dvojnásobkom svojej štandardnej chyby, ktorá sa počíta spárovane zo simulácií so spoločnými hodmi („common random numbers“). Rozdelenie na šťastie a rozhodnutie sa slovne uvádza len vtedy, keď je aspoň 3 body a 1,5 násobok vlastnej chyby.
Dá sa jej veriť?
Pozerať sa na graf šance a veriť mu je lacné. Preto sa kalibrovala: jej predpovede sa porovnali so skutočnými výsledkami na 210 hrách.
- Brierovo skóre 0,0452 (0 je dokonalé, 0,25 je neustále hádanie 50 %).
- Bez skreslenia: priemerná predpovedaná šanca (51 %) sa rovná skutočnému podielu výhier (51 %).
- Šanca v prvom kole sa od podielu výhier rovnakej AI na iných mapách líši o +0,9 ± 1,5 %.
- Nezávislá vzorka dala 0,0431. Skupina predpovedí 80 až 90 %, ktorá v prvej vzorke vyzerala zle (95 % pri predpovedi 85 %), bola výsledkom náhody: v druhej vzorke sa splnilo 80 %.
Výpočet beží vo Workeri 0,6 až 1,4 s. Pri simulovanom pomalom procesore (telefón) to bolo 3,3 až 6,1 s. Rovnaký záznam dá vždy rovnaký graf: plán výpočtu je funkciou záznamu, nie hodín.
Analýza je hotová, overená a od 20. októbra zlúčená do hlavných vetiev hry (dev aj main). Otvorené otázky dostali odpovede a tie sú zapracované: úroveň proxy 2 ostáva, rozprávačka (Avatar[2]) ponúkne analýzu po nevyhratej hre a analýza je všade, kde existuje záznam hry.
Skladba z jednej partie
Tretia vec je ešte len nápad, a práve preto je pri nej vidieť, ako sa v projekte zaobchádza s nápadmi. Predstava je takáto: každá akcia v hre vydá zvuk a zvuky sa zložia do skladby, ktorá sleduje, ako partia išla. Niekoľko štýlov (techno, rock, ambient), dá sa vypnúť, počas hry hrá krátky záznam predchádzajúceho kola a po hre sa dá skladba prehrať alebo uložiť. Odkaz na záznam je zároveň skladba: nič sa neukladá, skladba je funkcia partie.
V pláne rozšírení (ROADMAP) je z toho nápadu pomerne nezvyčajný dokument:
- Hudba, nie hluk. Udalosti sa kvantizujú na rytmickú mriežku. Jedna tónina a stupnica na hru zo seedu. Jedno kolo je jeden takt. Každý hráč má hlas (farba hráča určuje zafarbenie tónu). Výška útoku vyplýva z jeho šance: pravdepodobný zásah znie konzonantne, prekvapenie ostro. Výhry sa riešia do akordových tónov, straty padajú, vyradenie hráča je kadencia.
- Hustota. Partia má 400 až 600 útokov. Skladateľ ich riedi: najprv vlastné udalosti, potom veľké zlomy, najviac okolo 16 udalostí na takt.
- Poctivé obmedzenia. Techno, chiptune a ambient sa dajú dobre syntetizovať z oscilátorov, rock prijateľne. „Klasika“ bez zvukových vzoriek bude znieť ako hracia skrinka a pad, orchester sa nesľubuje.
- Slučka, ktorá rastie, sa zmení na hluk asi po desiatich kolách, preto počas hry zahrá najviac jednotaktový prehľad predchádzajúceho kola.
A potom pravidlo, ktoré robí z nápadu projekt: prototyp bez rozhrania. Plán počíta s nástrojom tools/score.js (zatiaľ neexistuje), ktorý by zahral pár partií, zapísal súbory MIDI v troch štýloch a autor by si ich vypočul v ľubovoľnom prehrávači. Potom sa rozhodne, či sa pokračuje. Žiadne rozhranie, kým si autor prototyp nevypočuje. Kvalita zvuku rozhodne všetko.
Je to rovnaký princíp ako pri Boss duel: skús najmenšiu vec, ktorá nápad zabije, ak je zlý.
Čo si z toho odnášam
- Determinizmus je najlepšia investícia. Z jedného rozhodnutia (náhoda zo stavu) vyšli záznam, opakovanie, zdieľanie, hlásenie chýb, testovanie aj analýza.
- Zmluvy s minulosťou treba zapísať do testu. Číslo verzie bez testu je prianie.
- Meraj aj to, čo vyzerá ako meranie. Graf s dvomi desatinnými miestami nie je dôkaz. Kalibrácia predpovedí áno.
- Šum rozpráva príbehy. Bez pravidla významnosti ti simulácia ukáže „zlomy“, ktoré sú len náhoda.
- Nápady potrebujú vstupnú podmienku. Pri hudbe je to „najprv sa to musí dať počúvať“.
Zdroje a poznámky
- Záznam:
docs/DESIGN.md§28 (formát, overenie, revízia), nástrojnode tools/replay.js --games 300 --check. - Analýza:
docs/DESIGN.md§34 adocs/TUNING.md§26 (stav k 20. 10. 2026; zlúčené dodevajmainv ten istý deň); čísla kalibrácie z dokumentácie a z poznámok vývoja (Brierovo skóre 0,0452 a 0,0431, 210 hier, doby 0,6 až 1,4 s a 3,3 až 6,1 s). - Skladba:
docs/ROADMAP.md, kapitola 15 (návrh a prototyp, nič z toho ešte nie je postavené). - Tlačidlo História v pôvodnej hre: podľa dobových recenzií (JayIsGames, Gigazine), uvedených v pláne rozšírení.
- Obrázky (orientačné, z dnešného stavu hry, nie z 20. 10.; hra 0.119.0,
dev, commit25bc3d57, 6. 11. 2026): obe partie zahral nástroj hry so zástupnou AI na mieste hráča (playRecordedztools/realms/kastgard/games/stacks/replay.js), nie človek. Záznam na prvom obrázku je skutočný záznam formátu 2 (malá mapa, štvorcové políčka, jeden súper, seed LLF4A5, 623 B), jeden z najkratších zo 240 skúšaných (vybraný spomedzi vyhratých partií, ktoré nezačínajú koncom ťahu); prehrá sa (Replay.run) na kontrolné odtlačky aj výsledok, ktoré nesie, a tri mapy kreslíScenario.svgpri jeho prehrávaní. Veľkosť snímky obrazovky je súborassets/shots/sk/kastgard-map.webptohto webu (90 286 B); typická partia vo formáte 2 (3,2 kB) je zdocs/RECORD-V2.md§0. Graf šance je z inej partie (číslo hry BAE8MR, rovnaký druh nastavení, 22 kôl, 2 249 B záznamu), vybranej zo zhruba 200 partií, ktoré sa zahrali a analyzovali, ako jedna s jasným zlomom, v ktorom je šťastie aj rozhodnutie; čísla vrátil príkaznode tools/realms/kastgard/games/stacks/analysis.js --record BAE8MR.json --json(1 797 simulácií, pri opakovaní rovnaké). Zlom je útok v 7. kole so šancou 72 % (58 % → 81 %, šťastie +7,9 a rozhodnutie +15,5 bodu).