yatzy — Яцзы
| Поле | Значение |
|---|---|
plugin_id |
yatzy |
| Выпуск шоу | S5e03 «Яцзы» |
| Версия spec | 0.1 |
| Игроки | 2–4 |
| Семейство | DiceAndScore |
| Tier | 1 |
Цель
Набрать наибольшую сумму очков, заполнив scorecard из 13 категорий. Классические правила Yatzy / Yahtzee.
Компоненты
| Элемент | Описание |
|---|---|
| Кости | 5× d6 |
| Scorecard | 13 категорий на игрока |
| Броски | До 3 за ход, с удержанием костей между бросками |
Категории scorecard
Верхняя секция: ones…sixes (сумма костей с данным номиналом).
Комбинации: three_of_kind, four_of_kind, full_house, small_straight, large_straight, yatzy, chance.
Бонус +35 при сумме верхней секции ≥ 63 (MVP default).
Ход
roll_dice— первый бросок (или послеkeep_dice).keep_dice{indices: number[]}— удержать кости, перебросить остальные (макс 2 reroll).score_category{category: string}— записать очки в категорию (один раз за игру).
После score_category — ход следующего игрока.
FSM
stateDiagram-v2
[*] --> AwaitRoll: turnStart
AwaitRoll --> Rolled: rollDice
Rolled --> Rolled: keepDice
Rolled --> Scored: scoreCategory
Scored --> CheckDone: nextPlayer
CheckDone --> AwaitRoll: moreCategories
CheckDone --> GameOver: allFilled
GameOver --> [*]
GameState
{
"phase": "Rolled",
"dice": [2, 3, 3, 5, 6],
"kept": [false, true, true, false, false],
"rolls_left": 2,
"current_player_id": "uuid",
"player_order": ["uuid1", "uuid2"],
"scorecards": {
"uuid1": {"ones": 3, "twos": null, "...": null}
},
"winner_id": null
}
Actions
| type | payload | phase |
|---|---|---|
roll_dice |
{} |
AwaitRoll |
keep_dice |
{indices: number[]} |
Rolled |
score_category |
{category: string} |
Rolled |
Победа
Все категории заполнены у всех → winner_id = max total score.
FR
FR-yatzy-01…05 — см. functional-requirements-games.md