From 749406c28f539adbd128bb4652f20ccdd2bb0a6d Mon Sep 17 00:00:00 2001 From: Francois Wauquier Date: Sat, 28 Sep 2013 13:27:28 +0200 Subject: [PATCH] 10 min score --- elevator-server/pom.xml | 5 +++ .../java/elevator/server/ElevatorGame.java | 3 ++ .../src/main/java/elevator/server/Player.java | 2 ++ .../main/java/elevator/server/PlayerInfo.java | 3 ++ .../src/main/java/elevator/server/Score.java | 16 ++++++++++ .../src/main/webapp/partials/elevator.html | 2 ++ .../test/java/elevator/server/ScoreTest.java | 31 +++++++++++++++++++ 7 files changed, 62 insertions(+) diff --git a/elevator-server/pom.xml b/elevator-server/pom.xml index efab0aa..4dc74d3 100644 --- a/elevator-server/pom.xml +++ b/elevator-server/pom.xml @@ -41,6 +41,11 @@ jackson-jaxrs 1.9.13 + + joda-time + joda-time + 2.3 + junit junit diff --git a/elevator-server/src/main/java/elevator/server/ElevatorGame.java b/elevator-server/src/main/java/elevator/server/ElevatorGame.java index e52c67e..e6309d3 100644 --- a/elevator-server/src/main/java/elevator/server/ElevatorGame.java +++ b/elevator-server/src/main/java/elevator/server/ElevatorGame.java @@ -103,6 +103,9 @@ PlayerInfo getPlayerInfo() { Integer score() { return score.score; } + Integer averageScore(){ + return score.getAverageScore(); + } void reset(String message) { building.reset(); diff --git a/elevator-server/src/main/java/elevator/server/Player.java b/elevator-server/src/main/java/elevator/server/Player.java index a86eacf..364a9e4 100644 --- a/elevator-server/src/main/java/elevator/server/Player.java +++ b/elevator-server/src/main/java/elevator/server/Player.java @@ -3,6 +3,8 @@ import elevator.server.security.Password; import elevator.server.security.RandomPassword; +import java.util.Date; + class Player implements Comparable { final String email; diff --git a/elevator-server/src/main/java/elevator/server/PlayerInfo.java b/elevator-server/src/main/java/elevator/server/PlayerInfo.java index 27a9b58..52e08cd 100644 --- a/elevator-server/src/main/java/elevator/server/PlayerInfo.java +++ b/elevator-server/src/main/java/elevator/server/PlayerInfo.java @@ -7,6 +7,7 @@ public class PlayerInfo implements Serializable { public final String pseudo; public final String email; public final int score; + public final int averageScore; public final int[] peopleWaitingTheElevator; public final int elevatorAtFloor; public final int peopleInTheElevator; @@ -14,10 +15,12 @@ public class PlayerInfo implements Serializable { public final String lastErrorMessage; public final String state; + public PlayerInfo(ElevatorGame game, Player player) { email = player.email; pseudo = player.pseudo; score = game.score(); + averageScore = game.averageScore(); peopleWaitingTheElevator = game.waitingUsersByFloors(); elevatorAtFloor = game.floor(); peopleInTheElevator = game.travelingUsers(); diff --git a/elevator-server/src/main/java/elevator/server/Score.java b/elevator-server/src/main/java/elevator/server/Score.java index 35d61e9..e956099 100644 --- a/elevator-server/src/main/java/elevator/server/Score.java +++ b/elevator-server/src/main/java/elevator/server/Score.java @@ -2,6 +2,11 @@ import elevator.User; import elevator.engine.ElevatorEngine; +import org.joda.time.DateTime; +import org.joda.time.Duration; +import org.joda.time.LocalDateTime; + +import java.util.Date; import static java.lang.Math.abs; import static java.lang.Math.max; @@ -10,6 +15,7 @@ class Score { Integer score; + DateTime started = new DateTime(); Score() { score = 0; @@ -66,4 +72,14 @@ public int hashCode() { return score; } + + int getAverageScore(){ + DateTime now = new DateTime(); + return getAverageScore(now); + } + + protected int getAverageScore(DateTime now){ + long elapsed = (int)new Duration(started, now).getStandardSeconds(); + return (int)(score*(10f*60 / elapsed )); + } } diff --git a/elevator-server/src/main/webapp/partials/elevator.html b/elevator-server/src/main/webapp/partials/elevator.html index efbcf46..fb36c09 100644 --- a/elevator-server/src/main/webapp/partials/elevator.html +++ b/elevator-server/src/main/webapp/partials/elevator.html @@ -43,6 +43,8 @@

From the ground to the highest level

{{player.pseudo}}

{{playerInfo.score}} points
+
( {{playerInfo.averageScore}} points )
+
Last error: {{playerInfo.lastErrorMessage}} diff --git a/elevator-server/src/test/java/elevator/server/ScoreTest.java b/elevator-server/src/test/java/elevator/server/ScoreTest.java index 847013b..1884541 100644 --- a/elevator-server/src/test/java/elevator/server/ScoreTest.java +++ b/elevator-server/src/test/java/elevator/server/ScoreTest.java @@ -1,6 +1,7 @@ package elevator.server; import elevator.User; +import org.joda.time.DateTime; import org.junit.Test; import static java.lang.String.format; @@ -82,6 +83,36 @@ public void should_loose_10_points() { assertThat(loose.score).isEqualTo(-10); } + @Test + public void should_average_score() { + Score score = new Score(); + score.score=100; + score.started=new DateTime(2013,9,28,9,0); + int averageScore = score.getAverageScore(new DateTime(2013,9,28,9,1)); + { + assertThat(averageScore).isEqualTo(1000); + } + } + @Test + public void should_average_score_with_precision() { + Score score = new Score(); + score.score=202; + score.started=new DateTime(2013,9,28,9,0); + int averageScore = score.getAverageScore(new DateTime(2013,9,28,9,2)); + { + assertThat(averageScore).isEqualTo(1010); + } + } + @Test + public void should_average_score_after_10min() { + Score score = new Score(); + score.score=1100; + score.started=new DateTime(2013,9,28,9,0); + int averageScore = score.getAverageScore(new DateTime(2013,9,28,9,11)); + { + assertThat(averageScore).isEqualTo(1000); + } + } private User user(int floor, int floorToGo, int tickToGo, int tickToWait) { User user = mock(User.class);