Jak jsem již napsal v minulém článku, předělávám pro ZX Spectrum Next velmi pěknou hru od PCH/UNREAL z Commodore 64. Popravdě mi nevadí na Commodoru tuto hru hrát, opravdu stojí za to a je udělaná velmi dobře - spoustu animací, překvapení atd... Nesnažím se okopírovat tuto hru 1:1 (vyjma pravidel), ale snažím se do hry přidat další věci, aby tento port měl i přidanou hodnotu. Jo a zmínil jsem se, že do hry přislíbil hudbu Martin Bórik, opravdu se máte na co těšit. Ale abych to neokecával dlouho (stejně jste to poznali z nadpisu), přidal jsem do Dice8Next CPU hráče. A v tomto článku bych rád uveřejnil strategii, podle které se řídí.
Musím se přiznat, že jsem se do toho vrhnul (jak je u mne zvykem) po hlavě a nějak jsem se nezabýval jak by měl CPU hráč vlastně "uvažovat" a proto jsem spoustu věcí několikrát přepisoval. Ani jsem neodhadl náročnost tohoto úkolu, protože ono to není moc jednoduché a ověřovat chování CPU hráče je těžké - vždy záleží na tom , jak hodí kostkami. Ale jen aby to nebylo takové nudné hraní s CPU protivníkem, zobrazuje se Vám, uvažování CPU hráče - vidíte na jaký bonus cílí (zní to jako blbost, ale popravdě mne baví koukat na uvažování počítače). Takže se pohodlně usaďte a zkuste mi poradit lepší strategii, než je tato:
CPU hraje stejně jako lidský hráč – má tři hody kostkami a na konci musí zaznamenat skóre do jedné z kategorií. Celý tah probíhá ve stavovém automatu:
Pokud kostky právě tvoří YACHT (50 bodů), LARGE STRAIGHT (40 bodů) nebo FULL HOUSE (25 bodů) a daná kategorie je ještě volná, CPU ji okamžitě zvolí bez dalšího uvažování.
Pokud CPU má kompletní Small Straight (4 po sobě jdoucí hodnoty, 30 bodů) a ještě zbývají hody, CPU záměrně neskóruje – místo toho drží tyto čtyři kostky a hodí pátou, protože šance na Large Straight (40 bodů) stojí za to.
Pokud má CPU tři nebo více šestek (preview ≥ 18), pětek (≥ 15) nebo čtyřek (≥ 12) a horní bonus (63 bodů) je ještě dosažitelný, CPU tuto kategorii upřednostní. Dosažitelnost se počítá přesně – sečtou se maxima zbývajících volných horních kategorií a porovnají s tím, kolik bodů ještě chybí do 63.
Pro všechny ostatní volné kategorie CPU spočítá tzv. rozhodovací skóre:
skóre = (preview × 4) + váha kategorie + urgentní bonus horní sekce − penalizace
CPU pak zvolí kategorii s nejvyšším celkovým skóre.
Jednou zvolený plán CPU nemění zbytečně. Přepne se pouze tehdy, pokud nová kategorie nabídne skóre o více než 4 body vyšší než aktuální plán. Tím se zabrání chaotickému přeskakování mezi volbami po každém hodu.
Pokud algoritmus nakonec vybere 3 OF A KIND nebo 4 OF A KIND a dominantní hodnota je 1, 2 nebo 3, CPU se ještě podívá, zda je odpovídající horní kategorie volná – a pokud ano, přepne se na ni. Drobné trojice nemá smysl utrácet do prémiových slotů.
Jakmile CPU ví, co chce, přidržuje kostky odpovídající plánu:
| Plán | Logika přidržení |
|---|---|
| Horní kategorie (jedničky–šestky) | Přidrží všechny kostky se správnou hodnotou |
| Trojice / Čtveřice | Přidrží dominantní hodnotu (tu, které je nejvíce); pokud žádný pár neexistuje, spadne na logiku „high dice" – drží 5/6, jinak 4, jinak nejvyšší jednu kostku |
| YACHT | Stejně jako trojice/čtveřice – dominantní hodnota, jinak high dice |
| Full House | Hledá dvě různé hodnoty s nejvyšší četností a přidrží obě skupiny (typicky pár + trojici nebo dva páry) |
| Straights | Analyzuje přítomnost hodnot 1–6 jako bitové pole a hledá okno s nejvíce zastoupenými hodnotami (1–4, 2–5, 3–6 pro Small; 1–5, 2–6 pro Large). Z každé potřebné hodnoty drží první nalezenou kostku. |
| CHANCE | Přidrží kostky s hodnotami 5 a 6; pokud žádné nejsou, drží čtyřky; v krajním případě jednu nejvyšší kostku |
Po každém přidržení CPU kontroluje, jestli má vůbec smysl házet znovu. Pokud ano, ale kategorie je „dost dobrá", zapíše skóre i když ještě má hody k dispozici. Pravidla:
Pokud CPU nemá žádnou kategorii, kde by v tuto chvíli bodovala, musí „obětovat" – zapsat nulu. Obětuje v pevně daném pořadí podle tabulky : ACES → TWOS → THREES → 3KIND → 4KIND → FOURS → SMALL → FIVES → FULL → CHANCE → LARGE → SIXES → YACHT. Nejlevnější horní kategorie padnou první, prémiové sloty (LARGE, SIXES, YACHT) se chrání co nejdéle.
V situaci, kdy CPU má 4 nebo 5 šestek (preview SIXES ≥ 24) a zároveň ještě potřebuje body do horního bonusu, CPU může upřednostnit zapsání šestek před YACHTem (50 bodů). Konkrétní pravidlo:
Těsně před zápisem skóre CPU vždy znovu přepočítá nejlepší kategorii podle aktuálního stavu kostek. Tím se zabrání tomu, aby zápis byl ovlivněn zastaralým plánem z předchozích hodů. CPU v Dice8 nehraje náhodně ani jen hladově. Kombinuje okamžité „uzamykání" hotových kombinací s dlouhodobou strategií – honbou za bonusem horní sekce a Large Straight. Vážené rozhodovací skóre vyvažuje aktuální zisk (preview), strategickou hodnotu kategorie a tlak na bonus, zatímco hysteréze 4 body brání přeskakování mezi plány. Při vynucených obětováních CPU zapisuje nuly v pořadí, které šetří prémiové sloty na později. A to je vše přátelé :)
1 Comment
Par postrehu po asi 300.000 odehranych her
1. Yachta ma prednost vzdy.
2. Bonus 35 bodu vlevo neni zase tak neco pokud chybi vpravo velka postupka
3. I covek zmeni strategii po kazdem hodu pokud si mysli, ze je „ta spravna“. To bych povolil a nebo vlozil nahodu do rozhodnuti. Pak to vypada jako necitelna strategie
4. Yachta ze sestek se mnohdy vyplati dat do sestek nebo do 4z … a tam by vaha byla pocet odehranych figur. Vubec bych se nebal dat sestkovou yachtu do figur a ne do yachty, pokud jsem v 1/3 hry.
Mozna me jeste neco napadne a pak to naroubuju do C64