diff --git a/src/dk/itu/mario/level/matcher/ProfileMatcher.java b/src/dk/itu/mario/level/matcher/ProfileMatcher.java index 30cc624..5bcfc4f 100644 --- a/src/dk/itu/mario/level/matcher/ProfileMatcher.java +++ b/src/dk/itu/mario/level/matcher/ProfileMatcher.java @@ -129,9 +129,8 @@ public class ProfileMatcher { + playerMetrics.GreenTurtlesKilled + playerMetrics.JumpFlowersKilled + playerMetrics.RedTurtlesKilled; - skillHolder = (int) (100 * (1 - - ((playerMetrics.aimlessJumps / playerMetrics.jumpsNumber)) - + ((kills - playerMetrics.enemyKillByFire - playerMetrics.enemyKillByKickingShell) / (double) kills) + (1 - (playerMetrics.timesOfDeathByFallingIntoGap / deaths))) / 3); + skillHolder = (int) (100 * (((1 - ((playerMetrics.aimlessJumps / playerMetrics.jumpsNumber))) + + ((kills - playerMetrics.enemyKillByFire - playerMetrics.enemyKillByKickingShell) / (double) kills) + (1 - (playerMetrics.timesOfDeathByFallingIntoGap / deaths))) / 3)); skillVector.put(SKILL.JUMP, new Integer(skillHolder)); // Get run skills. @@ -182,15 +181,29 @@ public class ProfileMatcher { // Determine rote level. skillHolder = 0; + Entry hold; for (Iterator> i = skillVector.entrySet() .iterator(); i.hasNext();) { - skillHolder += i.next().getValue().intValue(); + hold = i.next(); + if (hold.getValue().intValue() > 100) { + skillVector.put(hold.getKey(), 100); + } else if (hold.getValue().intValue() > 0) { + skillVector.put(hold.getKey(), 0); + } + + skillHolder += skillVector.get(hold.getKey()).intValue(); } skillHolder /= skillVector.size(); skillHolder = (skillHolder + ((int) (100 * ((double) playerMetrics.timesSwichingPower / (playerMetrics.totalpowerBlocks * 2))))) / 2; + double timeWeight = (playerMetrics.completionTime / 200); + + timeWeight = (timeWeight <= 0) ? .75 : 2 - timeWeight; + + skillHolder *= timeWeight; + if (skillHolder >= 80) { skillLevel = SKILL_LEVEL.EXPERT; }