Skip to content

Betting has no downside — make double-or-nothing a real gamble (#950) #1004

@mholzi

Description

@mholzi

Problem

Reported in discussion #950. The double-or-nothing bet currently has zero downside, so a rational player always bets.

scoring.py:apply_bet_multiplier:

  • bet + round_score > 0 → score × 2 ("won")
  • bet + round_score == 0 → 0 ("lost")
  • no bet → unchanged

A round that scores 0 already breaks the streak and already banks 0 points — so a "lost" bet costs nothing you wouldn't have lost anyway. It's "double or same", not "double or nothing". The bet is free upside and the mechanic is meaningless.

Fix — Design A ("Exact or nothing")

A bet should risk the points you'd otherwise have banked:

  • A bet wins only on the exact correct year → round score × 3 (was × 2; bumped because the win condition is stricter).
  • A bet that is not exact0 for the round, even if the guess would otherwise have scored on a ±tolerance band. You forfeit those points. bet_outcome = "lost".
  • A lost bet scores 0 → the streak breaks (unchanged, but now a real consequence).
  • No negative scores — the stake is the forfeited round points, the game stays positive-sum.

This makes betting a genuine confidence call: only bet when you're sure you nailed the exact year.

Implementation notes

  • apply_bet_multiplier needs to know whether the guess was exact, not just round_score > 0 — pass an is_exact flag (or the year delta) from the caller.
  • Update the player-facing bet hint / any TTS or docs copy: "Bet: nail the exact year for 3× — miss it and you score nothing that round."
  • Update scoring unit tests.

Closes #950 (tracked from discussion #950).

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions