{
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);