mirror of
https://github.com/michaelrausch/Party-Parrots-At-Sea.git
synced 2026-05-09 14:28:43 +00:00
Removed Legs from the race, using coordinates instead
Tags: #implement #refactor #test #story[9]
This commit is contained in:
@@ -0,0 +1,17 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
|
||||||
|
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8" inherit-compiler-output="false">
|
||||||
|
<output url="file://$MODULE_DIR$/target/classes" />
|
||||||
|
<output-test url="file://$MODULE_DIR$/target/test-classes" />
|
||||||
|
<content url="file://$MODULE_DIR$">
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/target" />
|
||||||
|
</content>
|
||||||
|
<orderEntry type="inheritedJdk" />
|
||||||
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
|
<orderEntry type="library" scope="TEST" name="Maven: junit:junit:4.12" level="project" />
|
||||||
|
<orderEntry type="library" scope="TEST" name="Maven: org.hamcrest:hamcrest-core:1.3" level="project" />
|
||||||
|
<orderEntry type="library" name="Maven: com.googlecode.json-simple:json-simple:1.1.1" level="project" />
|
||||||
|
</component>
|
||||||
|
</module>
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"race-name": "AC35",
|
"race-name": "AC35",
|
||||||
"time-scale": 2.0,
|
"time-scale": 1.0,
|
||||||
"race-size": 6,
|
"race-size": 2,
|
||||||
"teams": [
|
"teams": [
|
||||||
{
|
{
|
||||||
"team-name": "Oracle Team USA",
|
"team-name": "Oracle Team USA",
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ import javafx.scene.Parent;
|
|||||||
import javafx.scene.Scene;
|
import javafx.scene.Scene;
|
||||||
import javafx.stage.Stage;
|
import javafx.stage.Stage;
|
||||||
|
|
||||||
|
|
||||||
public class App extends Application
|
public class App extends Application
|
||||||
{
|
{
|
||||||
@Override
|
@Override
|
||||||
@@ -17,6 +16,8 @@ public class App extends Application
|
|||||||
primaryStage.setTitle("RaceVision");
|
primaryStage.setTitle("RaceVision");
|
||||||
primaryStage.setScene(new Scene(root));
|
primaryStage.setScene(new Scene(root));
|
||||||
|
|
||||||
|
//OldApp.main(); // Run this to show how positions are updated
|
||||||
|
|
||||||
primaryStage.show();
|
primaryStage.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -7,10 +7,16 @@ public class Boat {
|
|||||||
|
|
||||||
private String teamName; // The name of the team, this is also the name of the boat
|
private String teamName; // The name of the team, this is also the name of the boat
|
||||||
private double velocity; // In meters/second
|
private double velocity; // In meters/second
|
||||||
|
private double lat; // Boats position
|
||||||
|
private double lon; // -
|
||||||
|
private double distanceToNextMark;
|
||||||
|
|
||||||
public Boat(String teamName) {
|
public Boat(String teamName) {
|
||||||
this.teamName = teamName;
|
this.teamName = teamName;
|
||||||
this.velocity = 10; // Default velocity
|
this.velocity = 10; // Default velocity
|
||||||
|
this.lat = 0.0;
|
||||||
|
this.lon = 0.0;
|
||||||
|
this.distanceToNextMark = 0.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -22,6 +28,7 @@ public class Boat {
|
|||||||
public Boat(String teamName, double boatVelocity) {
|
public Boat(String teamName, double boatVelocity) {
|
||||||
this.teamName = teamName;
|
this.teamName = teamName;
|
||||||
this.velocity = boatVelocity;
|
this.velocity = boatVelocity;
|
||||||
|
this.distanceToNextMark = 0.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -59,4 +66,27 @@ public class Boat {
|
|||||||
public void setVelocity(double velocity) {
|
public void setVelocity(double velocity) {
|
||||||
this.velocity = velocity;
|
this.velocity = velocity;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the boats location
|
||||||
|
*
|
||||||
|
* @param lat, the boats latitude
|
||||||
|
* @param lon, the boats longitude
|
||||||
|
*/
|
||||||
|
public void setLocation(double lat, double lon) {
|
||||||
|
this.lat = lat;
|
||||||
|
this.lon = lon;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDistanceToNextMark(double distance){
|
||||||
|
this.distanceToNextMark = distance;
|
||||||
|
}
|
||||||
|
|
||||||
|
public double getLatitude(){
|
||||||
|
return this.lat;
|
||||||
|
}
|
||||||
|
|
||||||
|
public double getLongitude(){
|
||||||
|
return this.lon;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -8,11 +8,12 @@ import java.util.Date;
|
|||||||
* event location such as leg.
|
* event location such as leg.
|
||||||
*/
|
*/
|
||||||
public class Event {
|
public class Event {
|
||||||
|
private Double time; // Time the event occurs
|
||||||
private long time; // Time the event occurs
|
|
||||||
private Boat boat;
|
private Boat boat;
|
||||||
private Leg leg; // Leg of the race the event occurs on
|
|
||||||
private boolean isFinishingEvent = false; // This event occurs when a boat finishes the race
|
private boolean isFinishingEvent = false; // This event occurs when a boat finishes the race
|
||||||
|
private Mark mark1; // This mark
|
||||||
|
private Mark mark2; // Next Mark
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Event class containing the time of specific event, related team/boat, and
|
* Event class containing the time of specific event, related team/boat, and
|
||||||
@@ -20,12 +21,13 @@ public class Event {
|
|||||||
*
|
*
|
||||||
* @param eventTime, what time the event happens
|
* @param eventTime, what time the event happens
|
||||||
* @param eventBoat, the boat that the event belongs to
|
* @param eventBoat, the boat that the event belongs to
|
||||||
* @param eventLeg, the leg the event happens on
|
|
||||||
*/
|
*/
|
||||||
public Event(long eventTime, Boat eventBoat, Leg eventLeg) {
|
public Event(Double eventTime, Boat eventBoat, Mark mark1, Mark mark2) {
|
||||||
this.time = eventTime;
|
this.time = eventTime;
|
||||||
this.boat = eventBoat;
|
this.boat = eventBoat;
|
||||||
this.leg = eventLeg;
|
//this.leg = eventLeg;
|
||||||
|
this.mark1 = mark1;
|
||||||
|
this.mark2 = mark2;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -34,14 +36,12 @@ public class Event {
|
|||||||
*
|
*
|
||||||
* @param eventTime, what time the event happens
|
* @param eventTime, what time the event happens
|
||||||
* @param eventBoat, the boat that the event belongs to
|
* @param eventBoat, the boat that the event belongs to
|
||||||
* @param eventLeg, the leg the event happens on
|
|
||||||
* @param isFinishingEvent, true if this event is the boat crossing the finishing line
|
|
||||||
*/
|
*/
|
||||||
public Event(long eventTime, Boat eventBoat, Leg eventLeg, boolean isFinishingEvent) {
|
public Event(Double eventTime, Boat eventBoat, Mark mark1) {
|
||||||
this.time = eventTime;
|
this.time = eventTime;
|
||||||
this.boat = eventBoat;
|
this.boat = eventBoat;
|
||||||
this.leg = eventLeg;
|
this.mark1 = mark1;
|
||||||
this.isFinishingEvent = isFinishingEvent;
|
this.isFinishingEvent = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -49,7 +49,7 @@ public class Event {
|
|||||||
*
|
*
|
||||||
* @return the time for event in millisecond
|
* @return the time for event in millisecond
|
||||||
*/
|
*/
|
||||||
public long getTime() {
|
public double getTime() {
|
||||||
return this.time;
|
return this.time;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -58,7 +58,7 @@ public class Event {
|
|||||||
*
|
*
|
||||||
* @param eventTime the time for event in millisecond
|
* @param eventTime the time for event in millisecond
|
||||||
*/
|
*/
|
||||||
public void setTime(long eventTime) {
|
public void setTime(double eventTime) {
|
||||||
this.time = eventTime;
|
this.time = eventTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -68,7 +68,7 @@ public class Event {
|
|||||||
* @return the string of time
|
* @return the string of time
|
||||||
*/
|
*/
|
||||||
public String getTimeString() {
|
public String getTimeString() {
|
||||||
return (new SimpleDateFormat("mm:ss:SSS")).format(new Date(time));
|
return (new SimpleDateFormat("mm:ss:SSS")).format(new Date(time.longValue()));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -89,30 +89,12 @@ public class Event {
|
|||||||
this.boat = eventBoat;
|
this.boat = eventBoat;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the involved location/leg
|
|
||||||
*
|
|
||||||
* @return the leg involved in the event
|
|
||||||
*/
|
|
||||||
public Leg getLeg() {
|
|
||||||
return this.leg;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the involved location/leg
|
|
||||||
*
|
|
||||||
* @param eventLeg the involved leg
|
|
||||||
*/
|
|
||||||
public void setLeg(Leg eventLeg) {
|
|
||||||
this.leg = eventLeg;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called when the boat in this event passes
|
* Called when the boat in this event passes
|
||||||
* the marker.
|
* the marker.
|
||||||
*/
|
*/
|
||||||
public void boatPassedMarker() {
|
public void boatPassedMarker() {
|
||||||
this.leg.addBoatToMarker(boat);
|
this.mark1.addBoat(boat);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -128,13 +110,45 @@ public class Event {
|
|||||||
* @return A string that details what happened in this event
|
* @return A string that details what happened in this event
|
||||||
*/
|
*/
|
||||||
public String getEventString() {
|
public String getEventString() {
|
||||||
String currentHeading = Integer.toString(this.getLeg().getHeading());
|
|
||||||
|
|
||||||
// This event is a boat finishing the race
|
// This event is a boat finishing the race
|
||||||
if (this.isFinishingEvent) {
|
if (this.isFinishingEvent) {
|
||||||
return (this.getTimeString() + ", " + this.getBoat().getTeamName() + " finished the race");
|
return (this.getTimeString() + ", " + this.getBoat().getTeamName() + " finished the race");
|
||||||
}
|
}
|
||||||
|
|
||||||
return (this.getTimeString() + ", " + this.getBoat().getTeamName() + " passed " + this.getLeg().getMarkerLabel() + " going heading " + currentHeading + "°");
|
return (this.getTimeString() + ", " + this.getBoat().getTeamName() + " passed " + this.mark1.getName() + " going heading " + this.getBoatHeading() + "°");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the distance between the two marks
|
||||||
|
*/
|
||||||
|
public double getDistanceBetweenMarks(){
|
||||||
|
return Math.sqrt(Math.pow(mark1.getLatitude()-mark2.getLatitude(), 2) + Math.pow(mark1.getLongitude()-mark2.getLongitude(), 2));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the boats heading
|
||||||
|
*/
|
||||||
|
public double getBoatHeading(){
|
||||||
|
double bearing = Math.atan2(mark2.getLatitude() - mark1.getLatitude(), mark2.getLongitude() - mark1.getLongitude());
|
||||||
|
if (bearing < 0) {
|
||||||
|
bearing += Math.PI * 2;
|
||||||
|
}
|
||||||
|
return bearing * 180 / Math.PI;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the mark the event happened on
|
||||||
|
* @return the mark
|
||||||
|
*/
|
||||||
|
public Mark getMark(){
|
||||||
|
return this.mark1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the next mark
|
||||||
|
* @return the next mark
|
||||||
|
*/
|
||||||
|
public Mark getNextMark(){
|
||||||
|
return this.mark2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,9 +12,11 @@ public class Mark {
|
|||||||
private ArrayList<Boat> boatOrder;
|
private ArrayList<Boat> boatOrder;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Represents the marker at the beginning of a leg
|
* Represents a marker
|
||||||
*
|
*
|
||||||
* @param name, the name of the marker
|
* @param name, the name of the marker*
|
||||||
|
* @param lat, the latitude of the marker
|
||||||
|
* @param lon, the longitude of the marker
|
||||||
*/
|
*/
|
||||||
public Mark(String name, double lat, double lon){
|
public Mark(String name, double lat, double lon){
|
||||||
this.name = name;
|
this.name = name;
|
||||||
@@ -23,6 +25,18 @@ public class Mark {
|
|||||||
this.boatOrder = new ArrayList<Boat>();
|
this.boatOrder = new ArrayList<Boat>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents the marker at the beginning of a leg
|
||||||
|
*
|
||||||
|
* @param name, the name of the marker
|
||||||
|
*/
|
||||||
|
public Mark(String name){
|
||||||
|
this.name = name;
|
||||||
|
this.lat = 0;
|
||||||
|
this.lon = 0;
|
||||||
|
this.boatOrder = new ArrayList<Boat>();
|
||||||
|
}
|
||||||
|
|
||||||
public void setName(String name){
|
public void setName(String name){
|
||||||
this.name = name;
|
this.name = name;
|
||||||
}
|
}
|
||||||
@@ -35,4 +49,11 @@ public class Mark {
|
|||||||
public Boat[] getBoats(){
|
public Boat[] getBoats(){
|
||||||
return this.boatOrder.toArray(new Boat[this.boatOrder.size()]);
|
return this.boatOrder.toArray(new Boat[this.boatOrder.size()]);
|
||||||
}
|
}
|
||||||
|
public double getLatitude(){
|
||||||
|
return this.lat;
|
||||||
|
}
|
||||||
|
|
||||||
|
public double getLongitude(){
|
||||||
|
return this.lon;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -7,7 +7,7 @@ import java.util.Map;
|
|||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
import java.io.FileNotFoundException;
|
import java.io.FileNotFoundException;
|
||||||
|
|
||||||
public class App {
|
public class OldApp {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Builds a race object for the AC35 course
|
* Builds a race object for the AC35 course
|
||||||
@@ -54,30 +54,22 @@ public class App {
|
|||||||
race.addBoat(new Boat(boatNames.get(i), (Double) (teams.get(i).get("velocity"))));
|
race.addBoat(new Boat(boatNames.get(i), (Double) (teams.get(i).get("velocity"))));
|
||||||
}
|
}
|
||||||
|
|
||||||
race.addLeg(new Leg(35, 100, "Start"));
|
// Add marks to race in order
|
||||||
race.addLeg(new Leg(10, 300, "Mark 1"));
|
race.addMark(new Mark("Start", 32.296038,-64.854401 ));
|
||||||
race.addLeg(new Leg(350, 400, "Leeward Gate"));
|
race.addMark(new Mark("Mid Mark", 32.292881,-64.843231 ));
|
||||||
race.addLeg(new Leg(10, 400, "Windward Gate"));
|
race.addMark(new Mark("Leeward Gate", 32.283808,-64.850012 ));
|
||||||
|
race.addMark(new Mark("Windward Gate", 32.309908,-64.833665 ));
|
||||||
Leg finishingLeg = new Leg(10, 400, "Leeward Gate");
|
race.addMark(new Mark("Finish", 32.318439,-64.837367 ));
|
||||||
finishingLeg.setFinishingLeg(true);
|
|
||||||
|
|
||||||
race.addLeg(finishingLeg);
|
|
||||||
|
|
||||||
return race;
|
return race;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main() {
|
||||||
Race race = null;
|
Race race = null;
|
||||||
String raceConfigFile;
|
String raceConfigFile;
|
||||||
|
|
||||||
if (args.length == 2 && args[0].equals("-f")){
|
raceConfigFile = "doc/examples/config.json";
|
||||||
raceConfigFile = args[1];
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
// Use default config
|
|
||||||
raceConfigFile = "doc/examples/config.json";
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
race = createRace(raceConfigFile);
|
race = createRace(raceConfigFile);
|
||||||
@@ -101,7 +93,7 @@ public class App {
|
|||||||
System.out.println("# Race Results ");
|
System.out.println("# Race Results ");
|
||||||
System.out.println("######################");
|
System.out.println("######################");
|
||||||
|
|
||||||
race.showRaceMarkerResults();
|
//race.showRaceMarkerResults();
|
||||||
race.displayFinishingOrder();
|
race.displayFinishingOrder();
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
@@ -8,9 +8,9 @@ import java.util.*;
|
|||||||
*/
|
*/
|
||||||
public class Race {
|
public class Race {
|
||||||
private ArrayList<Boat> boats; // The boats in the race
|
private ArrayList<Boat> boats; // The boats in the race
|
||||||
private ArrayList<Leg> legs; // The legs in the race
|
|
||||||
private ArrayList<Boat> finishingOrder; // The order in which the boats finish the race
|
private ArrayList<Boat> finishingOrder; // The order in which the boats finish the race
|
||||||
private PriorityQueue<Event> events; // The events that occur in the race
|
private PriorityQueue<Event> events; // The events that occur in the race
|
||||||
|
private ArrayList<Mark> marks; // Marks in the race
|
||||||
private int numberOfBoats = 0;
|
private int numberOfBoats = 0;
|
||||||
private long startTime = 0;
|
private long startTime = 0;
|
||||||
private double timeScale = 1;
|
private double timeScale = 1;
|
||||||
@@ -20,15 +20,15 @@ public class Race {
|
|||||||
*/
|
*/
|
||||||
public Race() {
|
public Race() {
|
||||||
this.boats = new ArrayList<Boat>();
|
this.boats = new ArrayList<Boat>();
|
||||||
this.legs = new ArrayList<Leg>();
|
|
||||||
this.finishingOrder = new ArrayList<Boat>();
|
this.finishingOrder = new ArrayList<Boat>();
|
||||||
|
this.marks = new ArrayList<Mark>();
|
||||||
|
|
||||||
// create a priority queue with a custom Comparator to order events
|
// create a priority queue with a custom Comparator to order events
|
||||||
this.events = new PriorityQueue<Event>(new Comparator<Event>() {
|
this.events = new PriorityQueue<Event>(new Comparator<Event>() {
|
||||||
@Override
|
@Override
|
||||||
public int compare(Event o1, Event o2) {
|
public int compare(Event o1, Event o2) {
|
||||||
Long time1 = o1.getTime();
|
Double time1 = o1.getTime();
|
||||||
Long time2 = o2.getTime();
|
Double time2 = o2.getTime();
|
||||||
|
|
||||||
// order event asc. by time. if tie appears, then order team
|
// order event asc. by time. if tie appears, then order team
|
||||||
// name alphabetically.
|
// name alphabetically.
|
||||||
@@ -123,25 +123,6 @@ public class Race {
|
|||||||
System.out.println(boats[i].getTeamName() + " Velocity: " + velocityKnots + " Knots/s");
|
System.out.println(boats[i].getTeamName() + " Velocity: " + velocityKnots + " Knots/s");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Adds a leg to the race
|
|
||||||
*
|
|
||||||
* @param leg, the leg to add to the race
|
|
||||||
*/
|
|
||||||
public void addLeg(Leg leg) {
|
|
||||||
this.legs.add(leg);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets legs array
|
|
||||||
*
|
|
||||||
* @return an array of legs
|
|
||||||
*/
|
|
||||||
public ArrayList<Leg> getLegs() {
|
|
||||||
return this.legs;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets time scale
|
* Sets time scale
|
||||||
*
|
*
|
||||||
@@ -156,18 +137,24 @@ public class Race {
|
|||||||
*/
|
*/
|
||||||
private void generateEvents() {
|
private void generateEvents() {
|
||||||
//calculate the time every boat passes each leg, and create an event
|
//calculate the time every boat passes each leg, and create an event
|
||||||
for (Boat boat : this.boats) {
|
|
||||||
long totalDistance = 0;
|
|
||||||
for (Leg leg : this.legs) {
|
|
||||||
long time = (long) (1000 * totalDistance / boat.getVelocity());
|
|
||||||
Event event = new Event(time, boat, leg);
|
|
||||||
events.add(event);
|
|
||||||
totalDistance += leg.getDistance();
|
|
||||||
|
|
||||||
// If finishing leg, add another event for when the boat finishes the race
|
for (Boat boat : this.boats) {
|
||||||
if (leg.getIsFinishingLeg()) {
|
double totalDistance = 0;
|
||||||
time = (long) (1000 * totalDistance / boat.getVelocity());
|
int numberOfMarks = this.marks.size();
|
||||||
event = new Event(time, boat, leg, true);
|
|
||||||
|
for(int i = 0; i < numberOfMarks; i++){
|
||||||
|
Double time = (Double) (1000 * totalDistance / boat.getVelocity());
|
||||||
|
|
||||||
|
// If there are marks after this event
|
||||||
|
if (i < numberOfMarks-1) {
|
||||||
|
Event event = new Event(time, boat, marks.get(i), marks.get(i + 1));
|
||||||
|
events.add(event);
|
||||||
|
totalDistance += event.getDistanceBetweenMarks();
|
||||||
|
|
||||||
|
}
|
||||||
|
// There are no more marks after this event
|
||||||
|
else{
|
||||||
|
Event event = new Event(time, boat, marks.get(i));
|
||||||
events.add(event);
|
events.add(event);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -192,6 +179,7 @@ public class Race {
|
|||||||
*/
|
*/
|
||||||
public void iterateEvents() {
|
public void iterateEvents() {
|
||||||
// iterates all events. ends when no event in events.
|
// iterates all events. ends when no event in events.
|
||||||
|
|
||||||
while (!events.isEmpty()) {
|
while (!events.isEmpty()) {
|
||||||
Event peekEvent = events.peek();
|
Event peekEvent = events.peek();
|
||||||
long currentTime = (long) ((System.currentTimeMillis() - this.startTime) * this.timeScale);
|
long currentTime = (long) ((System.currentTimeMillis() - this.startTime) * this.timeScale);
|
||||||
@@ -201,7 +189,13 @@ public class Race {
|
|||||||
|
|
||||||
// Display a summary of the event
|
// Display a summary of the event
|
||||||
System.out.println(nextEvent.getEventString());
|
System.out.println(nextEvent.getEventString());
|
||||||
nextEvent.boatPassedMarker();
|
|
||||||
|
// Display latitude and longitude
|
||||||
|
if (!nextEvent.getIsFinishingEvent()){
|
||||||
|
System.out.println(nextEvent.getMark().getLatitude() + ", " + nextEvent.getNextMark().getLongitude());
|
||||||
|
}
|
||||||
|
|
||||||
|
System.out.println();
|
||||||
|
|
||||||
// If event is a boat finishing the race
|
// If event is a boat finishing the race
|
||||||
if (nextEvent.getIsFinishingEvent()) {
|
if (nextEvent.getIsFinishingEvent()) {
|
||||||
@@ -230,20 +224,10 @@ public class Race {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Print the order in which the boats passed each marker
|
* Add a mark to the race (in order)
|
||||||
|
* @param mark, the mark to add
|
||||||
*/
|
*/
|
||||||
public void showRaceMarkerResults() {
|
public void addMark(Mark mark){
|
||||||
for (Leg leg : this.legs) {
|
this.marks.add(mark);
|
||||||
Boat[] boats = leg.getMarker().getBoats();
|
|
||||||
|
|
||||||
System.out.println("--- " + leg.getMarkerLabel() + " ---");
|
|
||||||
|
|
||||||
// Print the order in which the boats passed the marker
|
|
||||||
for (int i = 0; i < this.getNumberOfBoats(); i++) {
|
|
||||||
System.out.println("#" + Integer.toString(i + 1) + " - " + boats[i].getTeamName());
|
|
||||||
}
|
|
||||||
|
|
||||||
System.out.println("");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3,7 +3,7 @@ package seng302;
|
|||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import seng302.models.Boat;
|
import seng302.models.Boat;
|
||||||
import seng302.models.Event;
|
import seng302.models.Event;
|
||||||
import seng302.models.Leg;
|
import seng302.models.Mark;
|
||||||
|
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.assertEquals;
|
||||||
|
|
||||||
@@ -15,29 +15,24 @@ public class EventTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void getTimeString() throws Exception {
|
public void getTimeString() throws Exception {
|
||||||
Leg leg = new Leg(35, 100, "Start");
|
|
||||||
Boat boat = new Boat("testBoat");
|
Boat boat = new Boat("testBoat");
|
||||||
Event event = new Event(1231242, boat, leg);
|
Event event = new Event(1231242.2, boat, new Mark("mark1"), new Mark("mark2"));
|
||||||
assertEquals("20:31:242", event.getTimeString());
|
assertEquals("20:31:242", event.getTimeString());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* ensure all boats are added as they pass the marker
|
|
||||||
*/
|
|
||||||
@Test
|
@Test
|
||||||
public void boatOrderTest() throws Exception {
|
public void testBoatHeading() throws Exception {
|
||||||
Leg leg = new Leg(35, 100, "1");
|
Boat boat = new Boat("testBoat");
|
||||||
|
Event event = new Event(1231242.2, boat, new Mark("mark1", 142.5, 122.1), new Mark("mark2", 121.9,99.2));
|
||||||
|
|
||||||
Boat boat1 = new Boat("testBoat");
|
assertEquals(event.getBoatHeading(), 221.9733862944651, 1e-15);
|
||||||
Boat boat2 = new Boat("testBoat2");
|
}
|
||||||
|
|
||||||
Event event1 = new Event(1231242, boat1, leg);
|
@Test
|
||||||
Event event2 = new Event(1231242, boat2, leg);
|
public void testDistanceBetweenMarks() throws Exception {
|
||||||
|
Boat boat = new Boat("testBoat");
|
||||||
|
Event event = new Event(1231242.2, boat, new Mark("mark1", 142.5, 122.1), new Mark("mark2", 121.9,99.2));
|
||||||
|
|
||||||
event1.boatPassedMarker();
|
assertEquals(event.getDistanceBetweenMarks(), 30.80211031731429, 1e-15);
|
||||||
event2.boatPassedMarker();
|
|
||||||
|
|
||||||
assertEquals(event1.getLeg().getMarker().getBoats()[0].getTeamName(), "testBoat");
|
|
||||||
assertEquals(event2.getLeg().getMarker().getBoats()[1].getTeamName(), "testBoat2");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user