Audamir

časť 31

Dve hry na jednej doske: stavebnica, z ktorej sa skladajú Kolónia a Čiary

Kreslenie dosky, gestá, udalosti a mriežka sa za tri dni vytiahli z kódu kociek a 204 pôvodných scén sa kreslí volanie po volaní rovnako. Druhá hra, Čiary, na nich vznikla, no stále siahla do 14 súborov aplikácie.

· 12 min čítania

Kolónia, hra bez kociek na šesťuholníkovej doske, vznikla 26. októbra 2026 ako hosť na obrazovke kociek: figúrka sa v zápise tvárila ako dve kocky a prázdne políčko ako jedna (článok o Kolónii). Pre jednu hru takýto trik stačí, ďalšia by do spoločného kódu pridala vlastné odbočky (článok o cárstvách). Vízia z 28. októbra znie: doska pozná len tvar políčok a hranicu hracej plochy, to, čo na políčku stojí, je údaj, a pravidlá patria hre. Podľa nej sa 28. až 30. októbra kreslenie dosky, gestá, udalosti a mriežka vytiahli z kódu kociek do spoločných dielov, ktorým sa tu hovorí stavebnica. Na nej sa 30. októbra postavila druhá hra cárstva Taflgard[1], Čiary (anglicky Lines, v kóde chains).

Zistilo sa dvoje. Obrazovka hry kociek sa pri presune nezmenila ani o jedno volanie plátna: 204 pôvodných scén sa kreslí rovnako ako pred zmenou. Kolónia sa zmenila raz a zámerne, keď dve kocky nahradil disk, a všetkých dnešných 277 scén sa kreslí presne podľa zápisu. Pravidlo „nová hra pridá len svoje súbory“ zatiaľ neplatí: Čiary potrebovali 91 riadkov v 14 súboroch obalu aplikácie mimo svojho balíka.

Čo je stavebnica a prečo ju hra potrebovala

Pred zmenou bola doska geometria aj stav v jednom objekte. Vykresľovač mal 1 124 riadkov, pýtal sa pravidiel na štyroch miestach a čítal 27 polí jedného „vreca“ view. Kolónia sa do toho zmestila trikmi: figúrka bola políčko s dvoma kockami a vykresľovač poznal dve slová Kolónie, cp a jp. Služby (záznam, obraz hry, hudba, analýza) čítali prúd udalostí, ktorý vedela vyrobiť len hra kociek, a obraz hry si vlastníka políčka skladal z vyhratých útokov. Otočenie figúrky by nevidel.

Návrh sa drží jedného slova: tenká. Doska pozná tvary políčok, to, čo na nich stojí, ako údaj, a vie to nakresliť a prijať kliknutie. Pravidlá, AI, záznamy a algoritmy patria hre. Motor kociek sa neprepisuje, doska sa k nemu pripája čítacou projekciou jeho stavu, aby zlaté záznamy zostali tie isté. Člen rozhrania smie existovať len vtedy, keď ho potrebuje riadok kódu alebo keď bez neho zlyhala papierová hra.

Obrázok ukazuje stavebnicu pri práci: jeden ťah v Kolónii a v Čiarach. Je to ten istý tok ako v článku o architektúre pre hru s kockami, len zdvojený. Vstup dosky, udalosti a maliari s vykresľovačom sú spoločné, ovládač, pravidlá a popis dosky patria každej hre zvlášť.

Jeden ťah v Kolónii a Čiarach na spoločnej stavebniciSchéma jedného ťahu v dvoch hrách. Horný rad je Kolónia, dolný Čiary, stredný rad je stavebnica, ktorú používajú obe. Ťuk ide od vstupu (BoardInput) k ovládaču hry a ten k pravidlám, ktoré ťah overia a vykonajú. Každá hra si popíše dosku sama, maliari a vykresľovač kreslia na plátno spoločne. Čiarkované šípky a čiarkovaný rámček ukazujú, čo ešte nie je zapojené: udalosti, záznam a prehrávač pre Kolóniu a Čiary. Koniec partie je hotový.vstupovládač hrypravidlá a udalostipopis a maliariobrazBoardInputtap { cell }a druhé ťuknutieColonyViewovládač Kolónie:vyberie ťahChainsViewovládač Čiar:vyberie ťahPravidláKolónie overía vykoná ťahBoardEventsact: cestaset: pred a poPravidláČiar overía vykoná kameňColonyBoardview: popisjednej chvíleMaliaridie, piece, glyphkreslia položkyPopis doskyČiar: vlastnýpopis doskyVykresľovačnakreslí na plátnonevolá pravidláudalosti a záznamKolónia a Čiary ešte nemajúzáznam ani prehrávačkoniec partiefacts(): výsledok a dĺžkaskúsenosti, mince, úspechystavebnica: spoločná pre obe hryhra: Kolónia alebo Čiaryplán: zatiaľ nie je zapojenéčiarkovaná šípka: zatiaľ nie je zapojená
Jeden ťah v Kolónii a Čiarach na spoločnej stavebnici. Schéma je nakreslená z kódu oboch hier (0.122.0, 6. 11. 2026), tok ťahu v hre s kockami je v článku o architektúre. Modrý rámček je stavebnica, obyčajný patrí hre a čiarkovaný ešte nie je zapojený: Kolónia a Čiary zatiaľ nevolajú udalosti, záznam ani prehrávač. Koniec partie (facts) je hotový.

Diely, z ktorých sa stavebnica skladá (mriežka Lattice, pohľad dosky, maliari, vykresľovač, vstup BoardInput a udalosti BoardEvents), sa vytiahli v krokoch uvedených nižšie.

Na papieri sa prešli štyri hry: Kolónia, hra s radmi kameňov (neskôr Čiary), dáma a pexeso so skrytými kartami. Každá niečo rozbila, výsledkom sú deväť opráv. Ťah je cesta, nie dvojica, lebo dáma skáče cez viac políčok. Na jedenásť otázok dokumentu padli 29. októbra odpovede: najprv projekcia Stacks, až potom druhá hra; slot patrí hre a jeho id je id hry; v názve ani variante nie je ochranná známka; hranie z klávesnice až po prvej novej hre.

Ako sa dokázalo, že sa obrazovka nezmenila

Refaktor vykresľovača má jednu požiadavku: hráč nesmie vidieť rozdiel. Krok B1 (zlúčený 29. októbra o 13:09) preto zapísal vzhľad dosky skôr, než sa čokoľvek zmenilo. Nástroj kreslí scény na falošné plátno, ktoré si pamätá každé volanie (napríklad c1.lineTo(850,285.72)), zaokrúhľuje čísla na 0,01 a z poradia volaní robí 53-bitový odtlačok s kontrolným bodom každých 256 riadkov. Scéna je údaj, takže sa dá nakresliť rovnako v Node aj v stránke.

Pôvodný zápis mal 250 scén (204 z hry kociek a 46 z Kolónie) a 1,59 milióna volaní plátna. Skutočný zásah (odtieň hmly 0.28 na 0.3) padol presne na 5 scén s hmlou. V skutočnom Chromiu dalo rovnaké počty a odtlačky 250 z 250 scén ako v Node.

Po každom kroku sa korpus porovnal znova:

KrokKorpus po krokuČo ešte
B2 (vykresľovač číta pohľad)250 z 250 po každom zo štyroch commitovtri snímky bajt po bajte rovnaké
B3 (vstup)250 z 250 po každom z troch commitov25 mutácií súboru, každú zachytil aspoň jeden test
B4 (Kolónia na pohľade)204 scén kociek rovnakých po každom commite46 scén Kolónie zámerne prepísaných
B7 (prehrávač)277 z 277zlatý záznam prehrávača z kódu pred zmenou
B8 (Čiary)277 z 27729 nových scén Čiar

Prepis Kolónie na disky bol zámer: po maketách z 29. októbra padol výber na disk a scény Kolónie sa prepísali v commite. Graf ukazuje, čo sa tým získalo. Rozpočet pre ostatné dosky bol najviac +2 ms alebo +15 %; predvolená doska vyšla pri B2 o 0,3 ms (+18 %) pomalšia, teda v rozpočte.

Kolónia po prepise na disky: menej volaní a rýchlejšie kresleniePo prepise Kolónie na disky (krok B4, 30. 10. 2026): figúrka stojí 7 volaní namiesto 19, štart dosky hex58 klesol z 5 483 na 2 668 volaní a prekreslenie Kolónie z 1,3 na 0,9 ms. Dĺžka pruhu je hodnota po prepise v percentách hodnoty pred ním.figúrka: volania plátna7 namiesto 19 (−63 %)štart dosky hex58: volania2 668 namiesto 5 483 (−51 %)prekreslenie Kolónie: ms0,9 ms namiesto 1,3 (−31 %)dĺžka pruhu = hodnota po prepise v percentách hodnoty pred ním (100 %)
Kolónia pred a po prepise na disky (krok B4, 30. 10. 2026). Dĺžka pruhu je hodnota po prepise v percentách hodnoty pred ním, takže 100 % je bez zmeny.

Okrem plátna sa overilo, že sa nepohol motor: v rozdiele nie je žiadny zo 14 súborov, ktoré rozhodujú o hre, verzia pravidiel zostala 2 a verzia generátora 1. Odtlačkov baseline je 188 a zlaté záznamy (12 hier a 3 mapy) sa rovnajú bajt po bajte.

Kde korpus nestačil

Prvá verzia projekcie Stacks odpovedala za objekt, ktorý vyrobila, a nie za ten, ktorý držia ovládače. Korpus to nevidel, odhalil to až test puzzle-ui.

Druhý prípad je kruh. Test skladania udalostí porovnával výsledok s prehrávačom záznamov, a keď prehrávač začal čítať práve tie udalosti, test prestal niečo dokazovať. Dôkazom sa stal zlatý záznam vyrobený starým kódom: 15 záznamov a 4 111 krokov, pri každom odtlačok dosky, hráčov, ťahu, šípky, vety a ovládačov. K tomu 32 poškodených záznamov (6 264 krokov) a 60 náhodných hier (33 462 krokov), ktoré starý kód nahral sám.

Kroky v poradí

KrokZlúčenéČo sa presunulo
B129. 10., 13:09pevný zápis vzhľadu
B529. 10.Lattice: riadok, stĺpec, krok v smere pre štvorec a šesťuholník
B229. 10., 20:41vykresľovač číta pohľad dosky, 1 124 → 553 riadkov
B329. 10., 22:22BoardInput, nezná Kolóniu
B430. 10., 00:37Kolónia na pohľade, disk
B630. 10., 11:05BoardEvents, zatiaľ nič nenačítava
R2b-130. 10., 11:21Kolónia ako hra aplikácie
B730. 10., 13:25prehrávač číta udalosti dosky
B830. 10., 14:49Čiary, druhá hra na doske

Tri poznámky. Mriežka Lattice vznikla, lebo dáma, hra s radmi aj stôl s kartami potrebujú „o jedno doprava“, čo susedia podľa hrany nevedia. Nový súbor jadra sa zapisuje do šiestich zoznamov a chyba vyjde neskoro: prvý plný beh mal 9 zlyhaní v testoch zostavy. BoardInput posiela ovládaču tap s číslom políčka a príznakom, či treba druhé ťuknutie, takže druhá kópia pravidla „potvrď druhým ťuknutím“ zmizla.

BoardEvents pozná slovesá start, turn, round, pass, over a act. Slovesá place, remove, move, convert, count, reveal a hide hra neposiela, odvodzuje ich jedna čistá funkcia z obsahu políčok pred a po. Pri Kolónii sa preskúšalo 72 hier AI súperov a 192 hier náhodného hráča. Súbory zámerne nenačítal nikto, kým prvý čitateľ (B7) neukázal, či slovník nesie všetko, čo prehrávač chce. Nesie.

Hra, ktorá nie je len doska

Krok R2b-1 (30. októbra) urobil z Kolónie hru aplikácie: ukladá sa po každom ťahu, platí „jedna uložená hra, jedna karta prehliadača“ a hra má Restart a záložku štatistík. Dohraná hra zanechá riadok v histórii a počet v kontajneri cárstva. Kľúče sa písali prvýkrát, preto sa overili dátami starého kódu: uložené hry a profil sú bajt po bajte rovnaké. Tutoriál sa nepostavil, lebo lekcie sú kocky od základu.

Druhá hra na stavebnici

Čiary sú prvá hra, ktorá sa na doske písala, nie presúvala. Hráči striedavo kladú kameň a vyhráva prvý s len kameňmi v rade. Varianty sú údaj hry: tic (3 × 3, rad 3), gomoku (15 × 15, rad 5) a drop (7 × 6, rad 4, kameň padá). O hre je článok o troch v rade a článok o dĺžke radu. Prvý commit Čiar je z 30. októbra o 11:56 a zlúčené boli o 14:49. Je to čas commitov, nie čas práce: predchádzali mu dva dni stavebnice a papierový test.

Papierový test predpovedal päť vecí, ktoré nesedeli. Štyri sa vyriešili: hladká výplň, kameň, ktorý sleduje ukazovateľ, hľadanie ťahu v hre a stavový riadok ako text ovládača. Papierový test nevidel štyri veci. Pád kameňa v drop potrebuje výšku a čas, tieň leží na políčku, kam kameň dopadne, dotyková obrazovka musí pýtať druhé ťuknutie, lebo kameň sa nedá vziať späť. A najdôležitejšia bola cena obalu aplikácie.

Čo mimo balíka potrebovala druhá hra: 590 riadkov590 riadkov mimo balíka Čiar: 378 riadkov prekladov v deviatich katalógoch, 121 rast vykresľovača a 91 riadkov obalu aplikácie v 14 súboroch. Z obalu je 40 riadkov rozhodovacieho kódu (app.js 19, describe.js 10, rulesets.js 11) a 51 riadkov tabuliek a názvov.preklady v deviatich katalógoch378rast vykresľovača121obal: tabuľky a názvy51obal: rozhodovací kód40riadky mimo balíka chains, DESIGN §80.6
Riadky mimo balíka Čiar podľa DESIGN §80.6 (zlúčenie kroku B8, 30. 10. 2026). Obal je 91 riadkov v 14 súboroch, z toho rozhodovací kód 40 riadkov v troch súboroch.

Rozhodovací kód obalu nesú len tri súbory: app.js (19 riadkov), describe.js (10) a rulesets.js (11). Zvyšok obalu sú tabuľky a mená v zoznamoch, napríklad zoznamy súborov v index.html, sw.js a stránke kompatibility.

Pravidlo „nová hra pridá len svoje súbory“ je preto cieľ, nie stav. Tretia hra by sa dotkla tých istých 14 súborov, a preto má B9 začať obalom hry: jedným záznamom v manifeste pre obrazovku, služby, popis, názvy, dlaždicu a súbory. Dnes má app.js Kolóniu aj Čiary zapísané ručne na viacerých miestach: v zozname obrazoviek, tabuľke hier, tlačidlách „znova“ a „späť“ a pri štarte.

Z porovnania (§80.6) majú Kolónia a Čiary rovnakú slučku hry (147 a 142 riadkov), worker (21 a 21) a asi 70 % pohľadu. Spolu je to asi 500 z 1 536 riadkov kódu balíka. Ťahy, ich poradie a hodnota pozície sa líšia.

Jedna vec zo stavebnice sa ukázala ako nepotrebná ešte v ten istý deň. Maliar glyph vznikol pre písmená X a O v tic, no 30. októbra sa kríž a kruh na doske 3 × 3 nevyhovovali a commit z 17:22 dal tic disky ako ostatným variantom. Maliar zostal vo vykresľovači s jednotkovými testmi, no žiadny kód produktu ho nepýta.

Čo je hotové a čo len rozhodnuté

ČoStav
zápis vzhľadu, Lattice, pohľad dosky, BoardInput, BoardEvents, Čiary (B1 až B3, B5 až B8)hotové
Kolónia na pohľade dosky (disk) a ako hra aplikácie (B4, R2b-1)hotové
kameň a kocka ako vzhľady figúrkyv kóde, neponúkajú sa, kým Rokgard nemá šatník
klávesnica (B11), tutoriál Kolónie (R2b-1b), značky ovládača a jedna mapa animácií (B4b)rozhodnuté alebo plánované, nepostavené
záznam a prehrávač Kolónie (R2b-2), udalosti Čiarnepostavené
B9: obal hry, potom hľadanie a BotClient; B10 dáma, B12 pexesonepostavené, odhad M až L
platba za dohranú hruKolónia platí XP od R3b, Čiary nie

„Rozhodnuté“ nie je „hotové“. Platí to aj pre značky tvarov hráča (shapes): podľa DESIGN §71.4 ide o rozhodnutie podľa odporúčania, ktoré treba ešte potvrdiť.

Čo z toho plynie

  • Dôkaz sa zapisuje pred zmenou. Zoznam volaní vznikol so starým vykresľovačom a každý krok sa porovnával s ním. Bez neho by sa dalo povedať len „vyzerá rovnako“.
  • Dôkaz, ktorý číta tú istú vec, prestáva byť dôkazom. Test skladania udalostí sa stal kruhom, keď ho prehrávač začal čítať. Dôkaz sa musel presunúť na zlatý záznam z kódu pred zmenou.
  • Papierový test zachytí časť. Pád s výškou a dotykové potvrdenie ukázal až kód, cenu obalu až druhá hra. Maliar glyph prežil v produkte do 17:22, hoci pravidlo hovorí „žiadny člen bez používateľa“.
  • Dve kópie sú podklad na vyťahovanie. Kolónia a Čiary majú asi 500 spoločných riadkov z 1 536. Vyťahovanie pred druhou hrou by zafixovalo nezmeraný tvar.

Čo ostáva

Najbližší krok je B9: jeho prvá polovica je obal hry z manifestu, ktorý zruší tých 14 súborov. Potom ide stavebnica hľadania, záznam a prehrávač hier na doske, klávesnica a až potom dáma a pexeso. Ekonomika cárstiev (úroveň, žetóny, šatník, domovská obrazovka) je iná téma a čaká na kroky R3c1, R3e a R5.

Zdroje a poznámky

  • Návrh a rozhodnutia: docs/BOARD-KIT.md (kapitoly 0 až 2, tabuľka 6.5 s deviatimi opravami, kroky B0 až B12, jedenásť rozhodnutí z 29. 10. 2026). Vízia: docs/ROADMAP.md, kapitola 26.
  • Kroky a čísla: docs/DESIGN.md §65 až §80 (B1 až B8, §80.6 pre tabuľku súborov Čiar), §87 (maliar glyph) a §82 (platba).
  • Overené 31. 10. 2026 (hra 0.65.6): nástroje scén (277 a 29 rovnakých), fixtúry, baseline.json (188), zlaté záznamy a verzia pravidiel 2. Údaje zo sveta tu nie sú. Nepodarilo sa overiť: pixely nad tri snímky z B2, rýchlosť na telefóne (merania bežali v skrytom paneli), počty súborov z §80.6, „asi 70 %“ a „asi 500 riadkov“ (prebraté z DESIGN bez nového diff) a potvrdenie značiek tvarov (§71.4). Ani jeden test sa znova nespúšťal.

Poznámky

  1. Taflgard je meno cárstva doskových hier od 28. októbra 2026. Od 31. októbra 2026 sa to cárstvo volá Rokgard (dnes js/realms/rokgard/). ↩︎