Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions elevator-server/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,11 @@
<artifactId>jackson-jaxrs</artifactId>
<version>1.9.13</version>
</dependency>
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.3</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,9 @@ PlayerInfo getPlayerInfo() {
Integer score() {
return score.score;
}
Integer averageScore(){
return score.getAverageScore();
}

void reset(String message) {
building.reset();
Expand Down
2 changes: 2 additions & 0 deletions elevator-server/src/main/java/elevator/server/Player.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
import elevator.server.security.Password;
import elevator.server.security.RandomPassword;

import java.util.Date;

class Player implements Comparable<Player> {

final String email;
Expand Down
3 changes: 3 additions & 0 deletions elevator-server/src/main/java/elevator/server/PlayerInfo.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,17 +7,20 @@ 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;
public final boolean doorIsOpen;
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();
Expand Down
16 changes: 16 additions & 0 deletions elevator-server/src/main/java/elevator/server/Score.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -10,6 +15,7 @@
class Score {

Integer score;
DateTime started = new DateTime();

Score() {
score = 0;
Expand Down Expand Up @@ -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 ));
}
}
2 changes: 2 additions & 0 deletions elevator-server/src/main/webapp/partials/elevator.html
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,8 @@ <h2>From the ground to the highest level</h2>
<gravatar-image data-email="player.email" data-size="120" data-rating="pg" data-default="404" data-secure="true"></gravatar-image>
<h3 style="text-align: center;">{{player.pseudo}}</h3>
<h5 style="text-align: center;">{{playerInfo.score}} points</h5>
<h5 style="text-align: center;">( {{playerInfo.averageScore}} points )</h5>

<building player="playerInfo"></building>
<div ng-show="playerInfo.lastErrorMessage" class="alert alert-error">
<strong>Last error:</strong> {{playerInfo.lastErrorMessage}}
Expand Down
31 changes: 31 additions & 0 deletions elevator-server/src/test/java/elevator/server/ScoreTest.java
Original file line number Diff line number Diff line change
@@ -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;
Expand Down Expand Up @@ -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);
Expand Down