30 lines
1.3 KiB
Markdown
30 lines
1.3 KiB
Markdown
---
|
|
id: GAL-53
|
|
title: Implement a High Score system (saving/loading)
|
|
status: Done
|
|
parent: GAL-50
|
|
labels: [polish, ui]
|
|
---
|
|
|
|
# GAL-53: Implement a High Score system (saving/loading)
|
|
|
|
Implement a High Score system (saving/loading).
|
|
|
|
## Acceptance criteria
|
|
|
|
- [x] High score persists to disk under a platform-appropriate path (e.g. `dirs::data_dir()/bglga/highscore.json`).
|
|
- [x] Loaded on startup into a `HighScore` resource; defaults to 0 if the file is absent or corrupt (no panic).
|
|
- [x] Updated only when `Score > HighScore` on entering `GameOver`, then persisted.
|
|
- [x] Visible on Start Menu (best so far) and Game Over (best vs current).
|
|
- [x] Save path overridable via env var or test-only setter so tests don't pollute the user's real config.
|
|
|
|
## Integration test hints
|
|
|
|
- Use a tmp dir override; pre-write `{"high_score": 5000}`; build `App`; assert `HighScore` resource = 5000.
|
|
- Pre-write malformed JSON; assert loader falls back to 0 and doesn't panic.
|
|
- Run scenario: set `Score = 7000`; transition to `GameOver`; reload from disk; assert persisted value = 7000.
|
|
- Concurrency / crash safety: write via temp file + rename, not in-place truncate.
|
|
|
|
## Comments
|
|
|
|
- 2026-05-07 — Branch `opencode/clever-wolf`, commit ff3416b — High score system implemented with persistence, UI display, and integration tests.
|