Added single test to debug race process
This commit is contained in:
Generated
+2
-15
@@ -28,20 +28,7 @@
|
|||||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" project-jdk-name="1.8" project-jdk-type="JavaSDK">
|
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" project-jdk-name="1.8" project-jdk-type="JavaSDK">
|
||||||
<output url="file://$PROJECT_DIR$/out" />
|
<output url="file://$PROJECT_DIR$/out" />
|
||||||
</component>
|
</component>
|
||||||
<component name="masterDetails">
|
<component name="SvnConfiguration">
|
||||||
<states>
|
<configuration>$USER_HOME$/.subversion</configuration>
|
||||||
<state key="ProjectJDKs.UI">
|
|
||||||
<settings>
|
|
||||||
<last-edited>1.8</last-edited>
|
|
||||||
<splitter-proportions>
|
|
||||||
<option name="proportions">
|
|
||||||
<list>
|
|
||||||
<option value="0.2" />
|
|
||||||
</list>
|
|
||||||
</option>
|
|
||||||
</splitter-proportions>
|
|
||||||
</settings>
|
|
||||||
</state>
|
|
||||||
</states>
|
|
||||||
</component>
|
</component>
|
||||||
</project>
|
</project>
|
||||||
@@ -8,6 +8,9 @@ import javafx.scene.layout.BorderPane;
|
|||||||
import javafx.stage.Stage;
|
import javafx.stage.Stage;
|
||||||
import seng302.Controllers.Controller;
|
import seng302.Controllers.Controller;
|
||||||
import seng302.Controllers.MainController;
|
import seng302.Controllers.MainController;
|
||||||
|
import seng302.Model.BoatInRace;
|
||||||
|
import seng302.Model.ConstantVelocityRace;
|
||||||
|
import seng302.Model.Leg;
|
||||||
|
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.util.Scanner;
|
import java.util.Scanner;
|
||||||
|
|||||||
@@ -11,8 +11,14 @@ public class BoatInRace extends Boat {
|
|||||||
private Leg currentLeg;
|
private Leg currentLeg;
|
||||||
private double distanceTravelledInLeg;
|
private double distanceTravelledInLeg;
|
||||||
private GPSCoordinate currentPosition;
|
private GPSCoordinate currentPosition;
|
||||||
|
private long timeFinished;
|
||||||
|
|
||||||
BoatInRace(String name, double velocity) {
|
public void setTimeFinished(long timeFinished) {
|
||||||
|
this.timeFinished = timeFinished;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public BoatInRace(String name, double velocity) {
|
||||||
super(name, velocity);
|
super(name, velocity);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -37,6 +43,7 @@ public class BoatInRace extends Boat {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Calculates the bearing of the travel via map coordinates of the raceMarkers
|
* Calculates the bearing of the travel via map coordinates of the raceMarkers
|
||||||
* @return
|
* @return
|
||||||
|
|||||||
@@ -13,19 +13,18 @@ public class ConstantVelocityRace extends Race {
|
|||||||
* Initialiser for a Race with constant velocity.
|
* Initialiser for a Race with constant velocity.
|
||||||
* @param startingBoats array of boats
|
* @param startingBoats array of boats
|
||||||
* @param marks array of RaceMarkers that the boats need to pass in order to finish the course.
|
* @param marks array of RaceMarkers that the boats need to pass in order to finish the course.
|
||||||
* @param timescale integer that the race is at timescale = 1000ms
|
|
||||||
* @see Boat
|
* @see Boat
|
||||||
* @see Leg
|
* @see Leg
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public ConstantVelocityRace(BoatInRace[] startingBoats, Leg[] marks, int timescale) {
|
public ConstantVelocityRace(BoatInRace[] startingBoats, Leg[] marks) {
|
||||||
super(startingBoats, marks, timescale);
|
super(startingBoats, marks);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void updatePosition(BoatInRace boat, int millisecondsElapsed) {
|
protected void updatePosition(BoatInRace boat, int millisecondsElapsed) {
|
||||||
|
|
||||||
//distanceTravelled = velocity (nm p hr) * time taken to update loop
|
//distanceTravelled = velocity (nm p hr) * time taken to update loop
|
||||||
double distanceTravelled = boat.getVelocity() * TimeUnit.MILLISECONDS.toHours(millisecondsElapsed);
|
double distanceTravelled = boat.getVelocity() * millisecondsElapsed/3600000;
|
||||||
double totalDistanceTravelled = distanceTravelled + boat.getDistanceTravelledInLeg();
|
double totalDistanceTravelled = distanceTravelled + boat.getDistanceTravelledInLeg();
|
||||||
|
|
||||||
boat.setDistanceTravelledInLeg(totalDistanceTravelled);
|
boat.setDistanceTravelledInLeg(totalDistanceTravelled);
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import seng302.GraphCoordinate;
|
|||||||
* Created by cbt24 on 6/03/17.
|
* Created by cbt24 on 6/03/17.
|
||||||
*/
|
*/
|
||||||
public class Leg {
|
public class Leg {
|
||||||
private String name;
|
private String name; //nautical miles
|
||||||
private double distance;
|
private double distance;
|
||||||
|
|
||||||
|
|
||||||
@@ -19,10 +19,8 @@ public class Leg {
|
|||||||
* Leg Initialiser
|
* Leg Initialiser
|
||||||
* @param name Name of the Leg
|
* @param name Name of the Leg
|
||||||
* @param distance Total Distance located in the Race
|
* @param distance Total Distance located in the Race
|
||||||
* @param latitude Latitude of where it exists in the race (x coordinate)
|
|
||||||
* @param longitude Longitude of where it exists in the race (y coordinate)
|
|
||||||
*/
|
*/
|
||||||
public Leg(String name, double distance, double latitude, double longitude, GPSCoordinate start, GPSCoordinate end, int number) {
|
public Leg(String name, double distance, GPSCoordinate start, GPSCoordinate end, int number) {
|
||||||
this.name = name;
|
this.name = name;
|
||||||
this.distance = distance;
|
this.distance = distance;
|
||||||
this.startGPSCoordinate = start;
|
this.startGPSCoordinate = start;
|
||||||
|
|||||||
@@ -11,7 +11,6 @@ public abstract class Race {
|
|||||||
protected BoatInRace[] startingBoats;
|
protected BoatInRace[] startingBoats;
|
||||||
protected ArrayList<BoatInRace> finishingBoats = new ArrayList<>();
|
protected ArrayList<BoatInRace> finishingBoats = new ArrayList<>();
|
||||||
protected Leg[] legs;
|
protected Leg[] legs;
|
||||||
protected int timescale = 1000;
|
|
||||||
|
|
||||||
private int SLEEP_TIME = 1000; //time in milliseconds to pause in a paced loop
|
private int SLEEP_TIME = 1000; //time in milliseconds to pause in a paced loop
|
||||||
|
|
||||||
@@ -19,26 +18,26 @@ public abstract class Race {
|
|||||||
* Initailiser for Race
|
* Initailiser for Race
|
||||||
* @param boats Takes in an array of boats that are participating in the race.
|
* @param boats Takes in an array of boats that are participating in the race.
|
||||||
* @param marks Number of marks in order that the boats pass in order to complete the race.
|
* @param marks Number of marks in order that the boats pass in order to complete the race.
|
||||||
* @param timescale Number or milliseconds that = 1000ms.
|
|
||||||
*/
|
*/
|
||||||
public Race(BoatInRace[] boats, Leg[] marks, int timescale) {
|
public Race(BoatInRace[] boats, Leg[] marks) {
|
||||||
this.startingBoats = boats;
|
this.startingBoats = boats;
|
||||||
this.legs = marks;
|
this.legs = marks;
|
||||||
this.timescale = timescale;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void run() {
|
public void run() {
|
||||||
printStartingDetails();
|
preRace();
|
||||||
simulateRace();
|
simulateRace();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void printStartingDetails() {
|
private void preRace() {
|
||||||
//show the boats participating.
|
//show the boats participating.
|
||||||
System.out.println("Boats Participating:");
|
System.out.println("Boats Participating:");
|
||||||
System.out.println("====================");
|
System.out.println("====================");
|
||||||
for (int i = 0; i < startingBoats.length; i++) {
|
for (int i = 0; i < startingBoats.length; i++) {
|
||||||
System.out.println(i + 1 + ". " + startingBoats[i].getName() + ", Speed: " + Math.round(startingBoats[i].getVelocity() * 1.94384) + "kn");
|
System.out.println(i + 1 + ". " + startingBoats[i].getName() + ", Speed: " + Math.round(startingBoats[i].getVelocity() * 1.94384) + "kn");
|
||||||
|
startingBoats[i].setCurrentLeg(legs[0]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -60,7 +59,7 @@ public abstract class Race {
|
|||||||
totalTimeElapsed = System.currentTimeMillis() - timeRaceStarted;
|
totalTimeElapsed = System.currentTimeMillis() - timeRaceStarted;
|
||||||
for (BoatInRace boat : startingBoats) {
|
for (BoatInRace boat : startingBoats) {
|
||||||
updatePosition(boat, SLEEP_TIME);
|
updatePosition(boat, SLEEP_TIME);
|
||||||
checkPosition(boat);
|
checkPosition(boat, totalTimeElapsed);
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
timeLoopEnded = System.currentTimeMillis();
|
timeLoopEnded = System.currentTimeMillis();
|
||||||
@@ -73,15 +72,19 @@ public abstract class Race {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
protected void checkPosition(BoatInRace boat) {
|
protected void checkPosition(BoatInRace boat, long timeElapsed) {
|
||||||
|
|
||||||
if (boat.getDistanceTravelledInLeg() > boat.getCurrentLeg().getDistance()){
|
if (boat.getDistanceTravelledInLeg() > boat.getCurrentLeg().getDistance()){
|
||||||
//boat has passed onto new leg
|
//boat has passed onto new leg
|
||||||
Leg nextLeg = legs[boat.getCurrentLeg().getLegNumber() + 1];
|
if (boat.getCurrentLeg().getLegNumber() == legs.length - 1) {
|
||||||
boat.setCurrentLeg(nextLeg);
|
|
||||||
if (boat.getCurrentLeg().getLegNumber() > legs.length) {
|
|
||||||
//boat has finished
|
//boat has finished
|
||||||
|
boat.setTimeFinished(timeElapsed);
|
||||||
finishingBoats.add(boat);
|
finishingBoats.add(boat);
|
||||||
|
} else {
|
||||||
|
boat.setDistanceTravelledInLeg(boat.getDistanceTravelledInLeg() - boat.getCurrentLeg().getDistance());
|
||||||
|
Leg nextLeg = legs[boat.getCurrentLeg().getLegNumber() + 1];
|
||||||
|
boat.setCurrentLeg(nextLeg);
|
||||||
|
boat.setDistanceTravelledInLeg(boat.getDistanceTravelledInLeg());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -19,6 +19,6 @@ public class RaceMap {
|
|||||||
* @see GraphCoordinate
|
* @see GraphCoordinate
|
||||||
*/
|
*/
|
||||||
public GraphCoordinate convertGPS(double lat, double lon) {
|
public GraphCoordinate convertGPS(double lat, double lon) {
|
||||||
return new GraphCoordinate((int) (width * (lat - x1) / (x2 - x1)), (int) (height - (height * (lon - y1) / (y2 - y1))));
|
return new GraphCoordinate((int) (width * (lat - x1) / (x2 - x1)), (int) (height - (height * (lon - y1) / (y2 - y1))));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,24 @@
|
|||||||
|
package seng302;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
import seng302.Model.BoatInRace;
|
||||||
|
import seng302.Model.ConstantVelocityRace;
|
||||||
|
import seng302.Model.Leg;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by esa46 on 15/03/17.
|
||||||
|
*/
|
||||||
|
public class RaceTest {
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void singleBoatRaceRunsAndFinishes(){
|
||||||
|
|
||||||
|
BoatInRace boat = new BoatInRace("NZ", 240);
|
||||||
|
BoatInRace[] boats = new BoatInRace[] {boat};
|
||||||
|
Leg leg1 = new Leg("first leg", 1, new GPSCoordinate(0, 0), new GPSCoordinate(3, 4), 0);
|
||||||
|
Leg[] legs = new Leg[] {leg1};
|
||||||
|
ConstantVelocityRace race = new ConstantVelocityRace(boats, legs);
|
||||||
|
race.run();
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user