mirror of
https://github.com/michaelrausch/Party-Parrots-At-Sea.git
synced 2026-05-09 06:18:44 +00:00
Added function to generate events for race
- added generateEvents() for creating event into a priority queue - added iterateEvents() to pull out events when time passing - changed default velocity to 70 just for testing. Pls change it back after testing #story[5] #implement
This commit is contained in:
@@ -9,7 +9,7 @@ public class Boat
|
||||
{
|
||||
// The name of the team, this is also the name of the boat
|
||||
private String teamName = null;
|
||||
private float velocity = 0;
|
||||
private float velocity = 70; // please set this one to a reasonable num!!!!!, i set it just for testing ;)
|
||||
|
||||
public Boat(String teamName) {
|
||||
this.teamName = teamName;
|
||||
|
||||
@@ -1,21 +1,34 @@
|
||||
package seng302;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Random;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.*;
|
||||
|
||||
|
||||
public class Race {
|
||||
private ArrayList<Boat> boats;
|
||||
private ArrayList<Leg> legs;
|
||||
private PriorityQueue<Event> events;
|
||||
private int numberOfBoats = 0;
|
||||
private long startTime = 0;
|
||||
private int timeScale = 1;
|
||||
|
||||
public Race() {
|
||||
boats = new ArrayList<Boat>();
|
||||
legs = new ArrayList<Leg>();
|
||||
this.boats = new ArrayList<Boat>();
|
||||
this.legs = new ArrayList<Leg>();
|
||||
// create a priority queue within custom Comparator to order events
|
||||
this.events = new PriorityQueue<Event>(new Comparator<Event>() {
|
||||
@Override
|
||||
public int compare(Event o1, Event o2) {
|
||||
Long time1 = o1.getTime();
|
||||
Long time2 = o2.getTime();
|
||||
// order event asc. by time. if tie appears, then order team
|
||||
// name alphabetically.
|
||||
if (time1 != time2) {
|
||||
return time1.compareTo(time2);
|
||||
} else {
|
||||
return o1.getBoat().getTeamName().compareTo(o2.getBoat().getTeamName());
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -107,6 +120,7 @@ public class Race {
|
||||
|
||||
/**
|
||||
* Gets legs array
|
||||
*
|
||||
* @return an array of legs
|
||||
*/
|
||||
public ArrayList<Leg> getLegs() {
|
||||
@@ -114,7 +128,26 @@ public class Race {
|
||||
}
|
||||
|
||||
/**
|
||||
* Temporary method used to generated all the events.
|
||||
*/
|
||||
private void generateEvents() {
|
||||
|
||||
//calculate the time for every boat passes each leg, and create an event
|
||||
for (Boat boat : this.boats) {
|
||||
long totalDistance = 0;
|
||||
for (Leg leg : this.legs) {
|
||||
totalDistance += leg.getDistance();
|
||||
long time = (long) (1000 * totalDistance / (boat.getVelocity() * this.timeScale));
|
||||
Event event = new Event(time, boat, leg);
|
||||
events.add(event);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Note: this function is useless so far
|
||||
* Calculates how far a boat has travelled in meter
|
||||
*
|
||||
* @param velocity the velocity of boat
|
||||
* @return a float number of distance the boat has been travelled
|
||||
*/
|
||||
@@ -124,15 +157,36 @@ public class Race {
|
||||
return timeElapse * velocity;
|
||||
}
|
||||
|
||||
/**
|
||||
* Micheal, here is a demo function shows you how to iterate all events
|
||||
*/
|
||||
public void iterateEvents() {
|
||||
// iterates all events. ends when no event in events.
|
||||
while (!events.isEmpty()) {
|
||||
Event peekEvent = events.peek();
|
||||
long currentTime = System.currentTimeMillis() - this.startTime;
|
||||
if (currentTime > peekEvent.getTime()) {
|
||||
// pull out the event
|
||||
Event nextEvent = events.poll();
|
||||
// I just simply print it out for testing
|
||||
System.out.println(nextEvent.getTimeString() + ", " +
|
||||
nextEvent.getBoat().getTeamName() + " passed " +
|
||||
nextEvent.getLeg().getMarkerLabel());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
Start the race and print each marker with the order
|
||||
in which the boats passed that marker
|
||||
*/
|
||||
public void startRace() {
|
||||
// record start time.
|
||||
generateEvents();
|
||||
this.startTime = System.currentTimeMillis();
|
||||
iterateEvents();
|
||||
|
||||
for (Leg leg : this.legs.toArray(new Leg[legs.size()])){
|
||||
for (Leg leg : this.legs) {
|
||||
Boat[] boats = this.getShuffledBoats();
|
||||
|
||||
System.out.println("--- " + leg.getMarkerLabel() + " ---");
|
||||
|
||||
Reference in New Issue
Block a user