Added simulation of a race with randomised time events. This is reported in time order and shown in the console which is displayed as "Boat passed Mark at 60 (seconds)"

This commit is contained in:
Fan-Wu Yang
2017-03-06 15:46:19 +13:00
parent 2148c1e06d
commit 4f6ab7b4bc
5 changed files with 69 additions and 24 deletions
+1 -1
View File
@@ -45,7 +45,7 @@
</list> </list>
</option> </option>
</component> </component>
<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 (1)" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/out" /> <output url="file://$PROJECT_DIR$/out" />
</component> </component>
<component name="SvnConfiguration"> <component name="SvnConfiguration">
+7 -10
View File
@@ -2,11 +2,16 @@ package seng302;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.LinkedList;
public class App public class App
{ {
public static void main( String[] args ) public static void main( String[] args )
{ {
LinkedList<Integer> test = new LinkedList<>();
test.add(5);
test.add(1, 8);
Boat boat1 = new Boat("ORACLE TEAM USA"); Boat boat1 = new Boat("ORACLE TEAM USA");
Boat boat2 = new Boat("Artemis Racing"); Boat boat2 = new Boat("Artemis Racing");
Boat boat3 = new Boat("Emirates Team New Zealand"); Boat boat3 = new Boat("Emirates Team New Zealand");
@@ -16,16 +21,8 @@ public class App
Boat[] all_boats = {boat1, boat2, boat3, boat4, boat5, boat6}; Boat[] all_boats = {boat1, boat2, boat3, boat4, boat5, boat6};
Boat[] boats = {all_boats[0], all_boats[1]}; Boat[] boats = {all_boats[0], all_boats[1]};
ArrayList<Event> events = new ArrayList<Event>(); Race race = new Race(boats);
events.add(new Event("Start", boats)); race.simulateRace();
events.add(new Event("Mark", boats));
events.add(new Event("Leeward Gate", boats));
events.add(new Event("Windward Gate", boats));
events.add(new Event("Leeward Gate", boats));
events.add(new Event("Finish", boats));
for(Event event:events) {
System.out.println(event);
}
} }
} }
+2
View File
@@ -1,5 +1,7 @@
package seng302; package seng302;
import java.util.ArrayList;
/** /**
* Created by fwy13 on 3/03/17. * Created by fwy13 on 3/03/17.
*/ */
+13 -13
View File
@@ -9,24 +9,24 @@ import java.util.Collections;
*/ */
public class Event { public class Event {
private String name; private String name;
private ArrayList<Boat> boats; private Boat boat;
private int time;
public Event(String name, Boat boats[]){ public Event(String name, Boat boat, int time){
this.name = name; this.name = name;
this.boats = new ArrayList<>(Arrays.asList(boats)); this.boat = boat;
this.time = time;
}
if(this.name != "Start") { public void setTime(int time){
Collections.shuffle(this.boats); this.time = time;
} }
public int getTime(){
return this.time;
} }
public String toString() { public String toString() {
String event = name + "\n\n"; return boat.getName() + " passed " + name + " at " + time;
for(int i = 0; i < boats.size(); i++) {
event += i+1 + ". " + boats.get(i).getName()+"\n";
}
return event;
} }
} }
+46
View File
@@ -0,0 +1,46 @@
package seng302;
import java.util.*;
/**
* Created by fwy13 on 3/03/17.
*/
public class Race {
Boat[] boats;
LinkedList<Event> events = new LinkedList<Event>();
public Race(Boat[] boats){
this.boats = boats;
}
public void simulateRace(){
String[] marks = {"Mark", "Leeward Gate", "Windward Gate", "Leeward Gate", "Finish"};
randomiseRace(marks);
//printRace();
for (Event event: events) {
Timer timer = new Timer();
timer.schedule(new TimerTask(){
@Override
public void run(){
System.out.println(event);
}
}, event.getTime() * 1000);
}
}
public void randomiseRace(String[] eventNames){
Random rand = new Random();
for (Boat boat: this.boats){
events.add(new Event("Start", boat, 0));
int prevTime = 0;
for (String markName: eventNames){
int time = rand.nextInt(12) + 6;
events.add(new Event(markName, boat, prevTime + time));
prevTime += time;
}
}
Collections.sort(events, (o1, o2) -> o1.getTime() - o2.getTime());
}
}