From c1f578be4269003339e9185f8f10d833e012c01b Mon Sep 17 00:00:00 2001 From: Andre Padez Date: Sun, 2 Nov 2025 17:13:44 +0000 Subject: [PATCH] fix: correct efficiency calculation direction - Efficiency now starts at 100% (perfect play) and decreases toward 0% (bad play) - Formula: (optimalSteps / keystrokes) * 100 - Clamped to 0-100 range - Examples: - 100 keystrokes / 100 optimal = 100% (perfect) - 120 keystrokes / 100 optimal = 83% (good) - 200 keystrokes / 100 optimal = 50% (fair) - 500 keystrokes / 100 optimal = 20% (poor) - Default 100% when no keystrokes yet --- src/useScore/useScore.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/useScore/useScore.ts b/src/useScore/useScore.ts index bf80764..8f58a18 100644 --- a/src/useScore/useScore.ts +++ b/src/useScore/useScore.ts @@ -50,7 +50,11 @@ export function useScore({ board, hero, gameStatusManager, keyManager, gameOver }, [gameStatus, board.mazeInstanceRef]); const optimalSteps = optimalRef.current; - const efficiency = optimalSteps > 0 ? Math.round((keystrokes / optimalSteps) * 100) : 0; + // Efficiency: 100% = optimal play, 0% = worst case + // Formula: (optimalSteps / keystrokes) * 100, clamped to 0-100 + const efficiency = optimalSteps > 0 && keystrokes > 0 + ? Math.max(0, Math.min(100, Math.round((optimalSteps / keystrokes) * 100))) + : 100; // Check custom gameOver condition if provided useEffect(() => {