From 4f6ab7b4bc668499648bfe29a2ff045c01193346 Mon Sep 17 00:00:00 2001 From: Fan-Wu Yang Date: Mon, 6 Mar 2017 15:46:19 +1300 Subject: [PATCH] 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)" --- .idea/misc.xml | 2 +- src/main/java/seng302/App.java | 17 +++++------- src/main/java/seng302/Boat.java | 2 ++ src/main/java/seng302/Event.java | 26 +++++++++--------- src/main/java/seng302/Race.java | 46 ++++++++++++++++++++++++++++++++ 5 files changed, 69 insertions(+), 24 deletions(-) create mode 100644 src/main/java/seng302/Race.java diff --git a/.idea/misc.xml b/.idea/misc.xml index 12ca2a0e..71de1e1f 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -45,7 +45,7 @@ - + diff --git a/src/main/java/seng302/App.java b/src/main/java/seng302/App.java index cec944bd..9c0824fe 100644 --- a/src/main/java/seng302/App.java +++ b/src/main/java/seng302/App.java @@ -2,11 +2,16 @@ package seng302; import java.util.ArrayList; +import java.util.LinkedList; public class App { public static void main( String[] args ) { + LinkedList test = new LinkedList<>(); + test.add(5); + test.add(1, 8); + Boat boat1 = new Boat("ORACLE TEAM USA"); Boat boat2 = new Boat("Artemis Racing"); 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[] boats = {all_boats[0], all_boats[1]}; - ArrayList events = new ArrayList(); - events.add(new Event("Start", boats)); - 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)); + Race race = new Race(boats); + race.simulateRace(); - for(Event event:events) { - System.out.println(event); - } } } diff --git a/src/main/java/seng302/Boat.java b/src/main/java/seng302/Boat.java index 939787f8..1b47ea77 100644 --- a/src/main/java/seng302/Boat.java +++ b/src/main/java/seng302/Boat.java @@ -1,5 +1,7 @@ package seng302; +import java.util.ArrayList; + /** * Created by fwy13 on 3/03/17. */ diff --git a/src/main/java/seng302/Event.java b/src/main/java/seng302/Event.java index 0fc0f92b..4c781dad 100644 --- a/src/main/java/seng302/Event.java +++ b/src/main/java/seng302/Event.java @@ -9,24 +9,24 @@ import java.util.Collections; */ public class Event { private String name; - private ArrayList 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.boats = new ArrayList<>(Arrays.asList(boats)); - - if(this.name != "Start") { - Collections.shuffle(this.boats); - } + this.boat = boat; + this.time = time; } - public String toString() { - String event = name + "\n\n"; + public void setTime(int time){ + this.time = time; + } - for(int i = 0; i < boats.size(); i++) { - event += i+1 + ". " + boats.get(i).getName()+"\n"; - } + public int getTime(){ + return this.time; + } - return event; + public String toString() { + return boat.getName() + " passed " + name + " at " + time; } } diff --git a/src/main/java/seng302/Race.java b/src/main/java/seng302/Race.java new file mode 100644 index 00000000..85ce03d6 --- /dev/null +++ b/src/main/java/seng302/Race.java @@ -0,0 +1,46 @@ +package seng302; + + +import java.util.*; + +/** + * Created by fwy13 on 3/03/17. + */ +public class Race { + Boat[] boats; + LinkedList events = new LinkedList(); + + 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()); + } + +}