č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.
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ášť.
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:
| Krok | Korpus po kroku | Čo ešte |
|---|---|---|
| B2 (vykresľovač číta pohľad) | 250 z 250 po každom zo štyroch commitov | tri snímky bajt po bajte rovnaké |
| B3 (vstup) | 250 z 250 po každom z troch commitov | 25 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 commite | 46 scén Kolónie zámerne prepísaných |
| B7 (prehrávač) | 277 z 277 | zlatý záznam prehrávača z kódu pred zmenou |
| B8 (Čiary) | 277 z 277 | 29 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.
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í
| Krok | Zlúčené | Čo sa presunulo |
|---|---|---|
| B1 | 29. 10., 13:09 | pevný zápis vzhľadu |
| B5 | 29. 10. | Lattice: riadok, stĺpec, krok v smere pre štvorec a šesťuholník |
| B2 | 29. 10., 20:41 | vykresľovač číta pohľad dosky, 1 124 → 553 riadkov |
| B3 | 29. 10., 22:22 | BoardInput, nezná Kolóniu |
| B4 | 30. 10., 00:37 | Kolónia na pohľade, disk |
| B6 | 30. 10., 11:05 | BoardEvents, zatiaľ nič nenačítava |
| R2b-1 | 30. 10., 11:21 | Kolónia ako hra aplikácie |
| B7 | 30. 10., 13:25 | prehrávač číta udalosti dosky |
| B8 | 30. 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.
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é
| Čo | Stav |
|---|---|
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úrky | v 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 Čiar | nepostavené |
B9: obal hry, potom hľadanie a BotClient; B10 dáma, B12 pexeso | nepostavené, odhad M až L |
| platba za dohranú hru | Koló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
glyphprež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 (maliarglyph) 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éhodiff) a potvrdenie značiek tvarov (§71.4). Ani jeden test sa znova nespúšťal.
Poznámky
- 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/). ↩︎