/** * Calcule le score du pendu à partir du nombre d'erreurs et du temps écoulé. * * Formule (simple et configurable) : * score = max(0, BASE - erreurs * ERROR_PENALTY - secondes * TIME_PENALTY_PER_SEC) * * @version 1.0 * @author Adrien * Date : 08-10-2025 * Licence : */ public final class Score { /** Score de départ. */ public static final int BASE = 1000; /** Malus par erreur. (6 erreurs max par défaut) */ public static final int ERROR_PENALTY = 120; /** Malus par seconde écoulée. */ public static final double TIME_PENALTY_PER_SEC = 1.0; private Score() {} /** * - nombre d'erreurs (>=0) * - temps écoulé en millisecondes * - score >= 0 */ public static int compute(int errors, long elapsedMillis) { if (errors < 0) errors = 0; double timePenalty = (elapsedMillis / 1000.0) * TIME_PENALTY_PER_SEC; int value = (int)Math.round(BASE - errors * ERROR_PENALTY - timePenalty); return Math.max(0, value); } }