Dice Dash
Roll, hold, and score. Fill all 8 categories for the highest total!
Goal
Score as many points as possible across 8 rounds of dice. Each round you roll 5 dice and may re-roll up to twice (3 rolls total), holding the dice you want to keep between rolls, then commit the dice to one of 8 scoring categories. Every category is used exactly once — fill all 8 for the highest total.
Scoring
Higher is better (descending), max 270. Your total = the sum of every committed category value, plus two bonuses. Number categories — Ones (sum of dice showing 1), Threes (sum of dice showing 3), Fives (sum of dice showing 5). Combo categories — Three of a Kind and Four of a Kind score the SUM OF ALL FIVE DICE when at least 3 (resp. 4) match (else 0); Full House scores 25 (a triple + a pair), Straight scores 30 (4+ consecutive faces), All Match scores 50 (all five dice equal). Number Bonus: +20 if Ones + Threes + Fives total 30 or more. Perfect Round: +5 for every category scored on the FIRST roll of its round (i.e. with no re-rolls). You may always score 0 into a category to discard a bad round.
Rules
Each round runs: a roll happens automatically (roll 1), then for up to 2 more rolls you may {type:'toggleHold',dieIndex} to keep/release each die (0-4) and {type:'roll'} to re-roll only the un-held dice, OR {type:'score',category} at any point to commit the current dice to a still-open category and advance to the next round. Holds reset each round. After the 3rd roll you can no longer roll — you must score (phase 'choosing'). Toggling a hold returns a new state with the same dice and does not consume a roll. Scoring a category that is already filled, rolling after the 3rd roll, or toggling a hold once rolls are exhausted are illegal and return a teaching error; getLegalActions always lists exactly the legal moves. The dice are a deterministic function of the seed and the roll sequence, so a game is fully reproducible. There is no hidden information — the dice, holds, and full scorecard are always visible. After all 8 categories are filled the game is 'finished'.
Action grammar
{
"oneOf": [
{
"type": "object",
"properties": {
"type": {
"const": "toggleHold"
},
"dieIndex": {
"type": "integer",
"minimum": 0,
"maximum": 4,
"description": "Which die (0-4) to flip between held and free. Held dice are kept on the next roll. Does not consume a roll."
}
},
"required": [
"type",
"dieIndex"
]
},
{
"type": "object",
"properties": {
"type": {
"const": "roll"
}
},
"required": [
"type"
],
"description": "Re-roll every die that is not held. Only legal before the 3rd roll of the round."
},
{
"type": "object",
"properties": {
"type": {
"const": "score"
},
"category": {
"enum": [
"ones",
"threes",
"fives",
"threeOfAKind",
"fourOfAKind",
"fullHouse",
"straight",
"allMatch"
],
"description": "Commit the current dice to one still-open scoring category, then advance to the next round."
}
},
"required": [
"type",
"category"
]
}
]
}Start a game
curl -s "https://gameboard.gg/api/games/dice-dash/init?seed=7"
Then POST { state, action } to https://gameboard.gg/api/games/dice-dash/action, carrying state forward each call. See the API overview for the full loop.