Mechaniky z předlohy: tři nuly, vynulování skóre, vyhlášení vítěze #1

Merged
david-spacil merged 2 commits from agents/claude/tri-nuly-a-vitez into main 2026-08-20 17:58:28 +02:00
Owner

Přenos mechanik z kostky/kostky.py do počitadla. Kód je převzatý 1:1, přizpůsobené je jen názvosloví (players/aggr → hraci/score) a to, že skóre se sem zadává ručně místo házení kostkami.

Co přibylo

Vynulování po třech nulách — add_score()

Logika z větve elif inp == "k" v předloze. Když je zadaná hodnota 0, funkce se podívá na hraci[hrac][-2:]; pokud existují dva předchozí záznamy a jejich součet je 0, zapíše se -sum(hraci[hrac]) a vyskočí hláška „Po třech nulových hodech bylo vaše skóre vynulováno." Do historie se — stejně jako v předloze — uloží ta záporná srovnávací hodnota, ne 0, čímž se zároveň resetuje indikátor nulových hodů.

Kontrola a vyhlášení vítěze — check_win(), to_sorted_tuple(), win()

Doslova podle předlohy, včetně Counter kontroly remízy na prvním místě a výsledné tabulky „Pořadí / Hráč / Skóre". check_win() se volá jen když pointer == first, tedy až po dokončeném kole, aby měli všichni hráči stejný počet tahů.

Finální skóre — dotaz na konci char_create(), stejný prompt i try/except jako v předloze, výchozí 10 000.

Indikátor x/xx u hráče na tahu. V předloze je v řádku „Na tahu je…", tady je v promptu pro zadání skóre: Zadejte skóre hráče A (200xx/1000):.

Mimo předlohu

try/except ValueError kolem int(inp) při zadávání skóre — bez toho původní int(inp) shodil celou rozehranou hru při překlepu. Hláška je stejná jako u zadávání finálního skóre.

Druhý commit opravuje drobnou chybu, kterou jsem převzal z předlohy: [-2:][0] vrátí u seznamu s jediným záznamem tentýž prvek jako [-1:][0], takže se xx zobrazilo už po první nule. Na herní logiku to nemá vliv (vynulování má vlastní kontrolu len(last_two) > 1), jde jen o zobrazení. V předloze je na to založené kostky#32.

Ověření

Skriptované průchody hrou:

  • tři nuly za sebou vynulovaly skóre 200 → 0, hláška sedí
  • remíza 1000:1000 hru nezastavila, pokračovalo se do dalšího kola, pak vyhrál hráč s 1010
  • indikátor po opravě: před prvním tahem bez značky, po první nule x, po druhé xx
  • nečíselný vstup u skóre i u finálního skóre hru neshodí

🤖 Generated with Claude Code

Přenos mechanik z [kostky/kostky.py](https://gitea.spacilovi.eu/david-spacil/kostky/src/branch/main/kostky/kostky.py) do počitadla. Kód je převzatý 1:1, přizpůsobené je jen názvosloví (`players`/`aggr` → `hraci`/`score`) a to, že skóre se sem zadává ručně místo házení kostkami. ## Co přibylo **Vynulování po třech nulách** — `add_score()` Logika z větve `elif inp == "k"` v předloze. Když je zadaná hodnota 0, funkce se podívá na `hraci[hrac][-2:]`; pokud existují dva předchozí záznamy a jejich součet je 0, zapíše se `-sum(hraci[hrac])` a vyskočí hláška „Po třech nulových hodech bylo vaše skóre vynulováno." Do historie se — stejně jako v předloze — uloží ta záporná srovnávací hodnota, ne 0, čímž se zároveň resetuje indikátor nulových hodů. **Kontrola a vyhlášení vítěze** — `check_win()`, `to_sorted_tuple()`, `win()` Doslova podle předlohy, včetně `Counter` kontroly remízy na prvním místě a výsledné tabulky „Pořadí / Hráč / Skóre". `check_win()` se volá jen když `pointer == first`, tedy až po dokončeném kole, aby měli všichni hráči stejný počet tahů. **Finální skóre** — dotaz na konci `char_create()`, stejný prompt i `try/except` jako v předloze, výchozí 10 000. **Indikátor `x`/`xx`** u hráče na tahu. V předloze je v řádku „Na tahu je…", tady je v promptu pro zadání skóre: `Zadejte skóre hráče A (200xx/1000):`. ## Mimo předlohu `try/except ValueError` kolem `int(inp)` při zadávání skóre — bez toho původní `int(inp)` shodil celou rozehranou hru při překlepu. Hláška je stejná jako u zadávání finálního skóre. Druhý commit opravuje drobnou chybu, kterou jsem převzal z předlohy: `[-2:][0]` vrátí u seznamu s jediným záznamem tentýž prvek jako `[-1:][0]`, takže se `xx` zobrazilo už po první nule. Na herní logiku to nemá vliv (vynulování má vlastní kontrolu `len(last_two) > 1`), jde jen o zobrazení. V předloze je na to založené [kostky#32](https://gitea.spacilovi.eu/david-spacil/kostky/issues/32). ## Ověření Skriptované průchody hrou: - tři nuly za sebou vynulovaly skóre 200 → 0, hláška sedí - remíza 1000:1000 hru nezastavila, pokračovalo se do dalšího kola, pak vyhrál hráč s 1010 - indikátor po opravě: před prvním tahem bez značky, po první nule `x`, po druhé `xx` - nečíselný vstup u skóre i u finálního skóre hru neshodí 🤖 Generated with [Claude Code](https://claude.com/claude-code)
david-spacil added 2 commits 2026-08-20 17:57:12 +02:00
Převzato 1:1 z kostky/kostky.py a přizpůsobeno počitadlu:
- volitelné finální skóre při zakládání hry (výchozí 10 000)
- vynulování skóre po třech nulových hodech za sebou
- indikátor "x"/"xx" u hráče na tahu
- check_win() + to_sorted_tuple() + win() s výslednou tabulkou

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Sliceování [-2:][0] vrátí u seznamu s jediným záznamem tentýž
prvek jako [-1:][0], takže po první nule se zobrazilo rovnou "xx".
Nahrazeno přímým indexováním s kontrolou délky.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
david-spacil merged commit 5b109c2418 into main 2026-08-20 17:58:28 +02:00
david-spacil deleted branch agents/claude/tri-nuly-a-vitez 2026-08-20 17:58:28 +02:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: david-spacil/dice-counter#1