refactor: separate score calculation from score management

BREAKING CHANGES:
- Remove timeLimit from GameOptions (use gameOver function instead)
- Remove finalScore from ScoreManager (pure data collection only)
- Remove rows/cols parameters from useScore
- Remove finalScore calculation logic from useScore hook

ADDITIONS:
- Create calculateMazeScore() utility function
- ScoreManager now only returns raw metrics: timeValue, keystrokes, optimalSteps, efficiency, distToKey, distToExit
- Score calculation moved to consumer (calculateMazeScore takes scoreManager + mazeSize)
- Example app now uses calculateMazeScore to compute final score on game-won

BENEFITS:
- ScoreManager is now a pure data collector with no side effects
- Scoring algorithm is reusable and testable in isolation
- Game-over conditions fully controlled via gameOver option
- Clear separation of concerns: collection vs calculation
This commit is contained in:
2025-11-02 17:04:21 +00:00
parent 060c8abb24
commit 0749aba648
8 changed files with 46 additions and 41 deletions
-1
View File
@@ -11,7 +11,6 @@ export * from './useScore/types';
export type GameOptions = {
rows: number;
cols: number;
timeLimit?: number;
gameOver?: boolean | ((scoreManager: ScoreManager) => boolean);
};