From 8ff70ab3ac552f6a5494e6b2959a33c94fafa182 Mon Sep 17 00:00:00 2001 From: Andrin Fassbind Date: Sun, 6 Mar 2022 15:15:39 +0100 Subject: [PATCH 1/7] -Method readFile done and tested -Method getSpaceType done and once tested --- .../java/ch/zhaw/pm2/racetrack/Track.java | 45 ++++++++++++++- .../java/ch/zhaw/pm2/racetrack/TrackTest.java | 55 +++++++++++++++++++ 2 files changed, 97 insertions(+), 3 deletions(-) create mode 100644 src/test/java/ch/zhaw/pm2/racetrack/TrackTest.java diff --git a/src/main/java/ch/zhaw/pm2/racetrack/Track.java b/src/main/java/ch/zhaw/pm2/racetrack/Track.java index 61deadf..68e5625 100644 --- a/src/main/java/ch/zhaw/pm2/racetrack/Track.java +++ b/src/main/java/ch/zhaw/pm2/racetrack/Track.java @@ -1,9 +1,13 @@ package ch.zhaw.pm2.racetrack; +import ch.zhaw.pm2.racetrack.given.ConfigSpecification; import ch.zhaw.pm2.racetrack.given.TrackSpecification; import java.io.File; import java.io.FileNotFoundException; +import java.util.ArrayList; +import java.util.List; +import java.util.Scanner; /** * This class represents the racetrack board. @@ -56,7 +60,7 @@ public class Track implements TrackSpecification { public static final char CRASH_INDICATOR = 'X'; // TODO: Add necessary variables - + private List track; /** * Initialize a Track from the given track file. * @@ -66,7 +70,32 @@ public class Track implements TrackSpecification { */ public Track(File trackFile) throws FileNotFoundException, InvalidTrackFormatException { // TODO: implementation - throw new UnsupportedOperationException(); + readFile(trackFile); + + //TODO: throw error again... + //throw new UnsupportedOperationException(); // was allready in !! + } + + /** + * This method reads the File and saves it to the track ArrayList Line by Line + * @param trackFile the File where the track has been documented + * @throws FileNotFoundException if the FilePath is invalid. + */ + private void readFile(File trackFile) throws FileNotFoundException { + track = new ArrayList<>(); + Scanner scanner = new Scanner(trackFile); + while (scanner.hasNextLine()) { + track.add(scanner.nextLine()); + } + } + + + /** + * + * @return the track + */ + public List getTrack() { + return track; } /** @@ -78,7 +107,17 @@ public class Track implements TrackSpecification { */ @Override public Config.SpaceType getSpaceType(PositionVector position) { - // TODO: implementation + // TODO: implementation // Done first tests passed but what to do with error + char charAtPosition = track.get(position.getY()).charAt(position.getX()); + + ConfigSpecification.SpaceType[] spaceTypes = ConfigSpecification.SpaceType.values(); + + for (ConfigSpecification.SpaceType spaceType : spaceTypes) { + if(spaceType.getValue() == charAtPosition) { + return spaceType; + } + } + throw new UnsupportedOperationException(); } diff --git a/src/test/java/ch/zhaw/pm2/racetrack/TrackTest.java b/src/test/java/ch/zhaw/pm2/racetrack/TrackTest.java new file mode 100644 index 0000000..7034a97 --- /dev/null +++ b/src/test/java/ch/zhaw/pm2/racetrack/TrackTest.java @@ -0,0 +1,55 @@ +package ch.zhaw.pm2.racetrack; + +import ch.zhaw.pm2.racetrack.given.ConfigSpecification; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.io.File; +import java.io.FileNotFoundException; +import java.lang.reflect.Array; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class TrackTest { + Track trackObj; + + @BeforeEach + void setup() { + File file = new File("C:\\Studium\\Semester2\\PM2\\Projekt1\\racetrack\\tracks\\challenge.txt"); + try { + trackObj = new Track(file); + + } catch (Exception e) { + System.err.println("Error in Test compareTrack" + e.getMessage()); + } + } + + @Test + void canReadFile() { + File file = new File("C:\\Studium\\Semester2\\PM2\\Projekt1\\racetrack\\tracks\\challenge.txt"); + Assertions.assertThrows(FileNotFoundException.class,() -> new Track(file)); + } + + /** + * Dirty test... + */ + @Test + void compareTrack() { + try { + List track = trackObj.getTrack(); + for (String s: track + ) { + System.out.println(s); + } + } catch (Exception e) { + System.err.println("Error in Test compareTrack" + e.getMessage()); + } + } + + @Test + void getSpaceTyp() { + Assertions.assertEquals(ConfigSpecification.SpaceType.FINISH_RIGHT,trackObj.getSpaceType(new PositionVector(22,24))); + } +} From 571728b6fda3fa13e4ceb4b26c95ea27198e1be6 Mon Sep 17 00:00:00 2001 From: Andrin Fassbind Date: Sun, 6 Mar 2022 16:10:18 +0100 Subject: [PATCH 2/7] - Method toString done --- .../java/ch/zhaw/pm2/racetrack/Track.java | 44 ++++++++++++++++--- .../java/ch/zhaw/pm2/racetrack/TrackTest.java | 22 ++++------ 2 files changed, 47 insertions(+), 19 deletions(-) diff --git a/src/main/java/ch/zhaw/pm2/racetrack/Track.java b/src/main/java/ch/zhaw/pm2/racetrack/Track.java index 68e5625..8e74c93 100644 --- a/src/main/java/ch/zhaw/pm2/racetrack/Track.java +++ b/src/main/java/ch/zhaw/pm2/racetrack/Track.java @@ -6,6 +6,7 @@ import ch.zhaw.pm2.racetrack.given.TrackSpecification; import java.io.File; import java.io.FileNotFoundException; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import java.util.Scanner; @@ -61,6 +62,8 @@ public class Track implements TrackSpecification { // TODO: Add necessary variables private List track; + private List cars; + /** * Initialize a Track from the given track file. * @@ -69,7 +72,9 @@ public class Track implements TrackSpecification { * @throws InvalidTrackFormatException if the track file contains invalid data (no tracklines, ...) */ public Track(File trackFile) throws FileNotFoundException, InvalidTrackFormatException { - // TODO: implementation + // TODO: + track = new ArrayList<>(); + cars = new ArrayList<>(); readFile(trackFile); //TODO: throw error again... @@ -78,20 +83,43 @@ public class Track implements TrackSpecification { /** * This method reads the File and saves it to the track ArrayList Line by Line + * * @param trackFile the File where the track has been documented * @throws FileNotFoundException if the FilePath is invalid. */ private void readFile(File trackFile) throws FileNotFoundException { - track = new ArrayList<>(); Scanner scanner = new Scanner(trackFile); while (scanner.hasNextLine()) { track.add(scanner.nextLine()); } } + public void findCar() { + ConfigSpecification.SpaceType[] spaceTypes = ConfigSpecification.SpaceType.values(); + ArrayList allSpaceTypesAsChar = new ArrayList<>(); + + for (ConfigSpecification.SpaceType spaceType : spaceTypes) { + allSpaceTypesAsChar.add(spaceType.getValue()); + } + + + for (String line : track) { + for (int i = 0; i < line.length(); i++) { + if (!allSpaceTypesAsChar.contains(line.charAt(i))) { + //TODO: CREATE CAR - ADD IT TO CARS - BUT CHECK THAT Symbol is not allready used for another car? + } + } + } + + } + + private void findFinish() { + //TODO: + + } + /** - * * @return the track */ public List getTrack() { @@ -111,9 +139,8 @@ public class Track implements TrackSpecification { char charAtPosition = track.get(position.getY()).charAt(position.getX()); ConfigSpecification.SpaceType[] spaceTypes = ConfigSpecification.SpaceType.values(); - for (ConfigSpecification.SpaceType spaceType : spaceTypes) { - if(spaceType.getValue() == charAtPosition) { + if (spaceType.getValue() == charAtPosition) { return spaceType; } } @@ -203,6 +230,11 @@ public class Track implements TrackSpecification { @Override public String toString() { // TODO: implementation - throw new UnsupportedOperationException(); + String str = ""; + for (String line : track) { + str += line+"\n"; + } + return str; + //throw new UnsupportedOperationException(); } } diff --git a/src/test/java/ch/zhaw/pm2/racetrack/TrackTest.java b/src/test/java/ch/zhaw/pm2/racetrack/TrackTest.java index 7034a97..c040580 100644 --- a/src/test/java/ch/zhaw/pm2/racetrack/TrackTest.java +++ b/src/test/java/ch/zhaw/pm2/racetrack/TrackTest.java @@ -7,9 +7,6 @@ import org.junit.jupiter.api.Test; import java.io.File; import java.io.FileNotFoundException; -import java.lang.reflect.Array; -import java.util.ArrayList; -import java.util.Arrays; import java.util.List; public class TrackTest { @@ -36,20 +33,19 @@ public class TrackTest { * Dirty test... */ @Test - void compareTrack() { - try { - List track = trackObj.getTrack(); - for (String s: track - ) { - System.out.println(s); - } - } catch (Exception e) { - System.err.println("Error in Test compareTrack" + e.getMessage()); - } + void printOutTrack() { + System.out.println(trackObj); } @Test void getSpaceTyp() { Assertions.assertEquals(ConfigSpecification.SpaceType.FINISH_RIGHT,trackObj.getSpaceType(new PositionVector(22,24))); } + + //TODO: + @Test + void findCarAtInit() { + trackObj.findCar(); + + } } From 007d8ee3937d6268cfb9a706056ce577b6cac252 Mon Sep 17 00:00:00 2001 From: Andrin Fassbind Date: Mon, 7 Mar 2022 17:49:55 +0100 Subject: [PATCH 3/7] =?UTF-8?q?-=20Methoden=20=C3=BCberarbeitet=20Teils=20?= =?UTF-8?q?provisorisch=20da=20genaue=20Umsetzung=20noch=20unklar=20Siehe?= =?UTF-8?q?=20TODO?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/ch/zhaw/pm2/racetrack/Track.java | 47 ++++++++++++++----- .../java/ch/zhaw/pm2/racetrack/TrackTest.java | 4 +- 2 files changed, 37 insertions(+), 14 deletions(-) diff --git a/src/main/java/ch/zhaw/pm2/racetrack/Track.java b/src/main/java/ch/zhaw/pm2/racetrack/Track.java index 8e74c93..688ee61 100644 --- a/src/main/java/ch/zhaw/pm2/racetrack/Track.java +++ b/src/main/java/ch/zhaw/pm2/racetrack/Track.java @@ -94,7 +94,7 @@ public class Track implements TrackSpecification { } } - public void findCar() { + public void addCar() { ConfigSpecification.SpaceType[] spaceTypes = ConfigSpecification.SpaceType.values(); ArrayList allSpaceTypesAsChar = new ArrayList<>(); @@ -113,6 +113,19 @@ public class Track implements TrackSpecification { } + private PositionVector findChar(char symbol) { + PositionVector vector = null; + for (int i = 0; i < track.size(); i++) { + String line = track.get(i); + for (int j = 0; j < line.length(); j++) { + if (line.charAt(j) == symbol) { + vector = new PositionVector(j,i); + } + } + } + return vector; + } + private void findFinish() { //TODO: @@ -155,8 +168,9 @@ public class Track implements TrackSpecification { */ @Override public int getCarCount() { - // TODO: implementation - throw new UnsupportedOperationException(); + // TODO: error??? + return cars.size(); + //throw new UnsupportedOperationException(); } /** @@ -167,8 +181,9 @@ public class Track implements TrackSpecification { */ @Override public Car getCar(int carIndex) { - // TODO: implementation - throw new UnsupportedOperationException(); + // TODO: error??? + return cars.get(carIndex); + //throw new UnsupportedOperationException(); } /** @@ -179,8 +194,9 @@ public class Track implements TrackSpecification { */ @Override public char getCarId(int carIndex) { - // TODO: implementation - throw new UnsupportedOperationException(); + // TODO: error??? + return cars.get(carIndex).getID(); + //throw new UnsupportedOperationException(); } /** @@ -191,8 +207,14 @@ public class Track implements TrackSpecification { */ @Override public PositionVector getCarPos(int carIndex) { - // TODO: implementation - throw new UnsupportedOperationException(); + // TODO: nextPosition or Position of Trackfile? + //Alternative 1 + return cars.get(carIndex).nextPosition(); + + //Alternative 2 //NULL aussschliessen falls umgesetzt. + return findChar(cars.get(carIndex).getID()); + + //throw new UnsupportedOperationException(); } /** @@ -203,8 +225,9 @@ public class Track implements TrackSpecification { */ @Override public PositionVector getCarVelocity(int carIndex) { - // TODO: implementation - throw new UnsupportedOperationException(); + // TODO: error??? + return cars.get(carIndex).getVelocity(); + //throw new UnsupportedOperationException(); } /** @@ -229,7 +252,7 @@ public class Track implements TrackSpecification { */ @Override public String toString() { - // TODO: implementation + // TODO: error??? String str = ""; for (String line : track) { str += line+"\n"; diff --git a/src/test/java/ch/zhaw/pm2/racetrack/TrackTest.java b/src/test/java/ch/zhaw/pm2/racetrack/TrackTest.java index c040580..6821ea9 100644 --- a/src/test/java/ch/zhaw/pm2/racetrack/TrackTest.java +++ b/src/test/java/ch/zhaw/pm2/racetrack/TrackTest.java @@ -44,8 +44,8 @@ public class TrackTest { //TODO: @Test - void findCarAtInit() { - trackObj.findCar(); + void addCarAtInit() { + trackObj.addCar(); } } From 15123b05bb5ae19a02c186a0a1bc470af3ce9054 Mon Sep 17 00:00:00 2001 From: Andrin Fassbind Date: Tue, 8 Mar 2022 11:27:05 +0100 Subject: [PATCH 4/7] =?UTF-8?q?-=20Methoden=20=C3=BCberarbeitet?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 1 + .../java/ch/zhaw/pm2/racetrack/Track.java | 96 ++++++++++++------- .../java/ch/zhaw/pm2/racetrack/TrackTest.java | 29 +++++- 3 files changed, 91 insertions(+), 35 deletions(-) diff --git a/build.gradle b/build.gradle index 37dcb87..669126f 100644 --- a/build.gradle +++ b/build.gradle @@ -29,6 +29,7 @@ dependencies { // beryx uses SLF4J. To remove warning, we add the implementation "no operation" implementation 'org.slf4j:slf4j-nop:2.+' + implementation 'junit:junit:4.13.1' // Use JUnit Jupiter API for testing. testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.2' diff --git a/src/main/java/ch/zhaw/pm2/racetrack/Track.java b/src/main/java/ch/zhaw/pm2/racetrack/Track.java index 688ee61..1c7dffc 100644 --- a/src/main/java/ch/zhaw/pm2/racetrack/Track.java +++ b/src/main/java/ch/zhaw/pm2/racetrack/Track.java @@ -63,6 +63,7 @@ public class Track implements TrackSpecification { // TODO: Add necessary variables private List track; private List cars; + private List finishLine; /** * Initialize a Track from the given track file. @@ -75,10 +76,10 @@ public class Track implements TrackSpecification { // TODO: track = new ArrayList<>(); cars = new ArrayList<>(); + finishLine = new ArrayList<>(); readFile(trackFile); - - //TODO: throw error again... - //throw new UnsupportedOperationException(); // was allready in !! + findFinish(); + addCar(); } /** @@ -94,43 +95,84 @@ public class Track implements TrackSpecification { } } - public void addCar() { + //TODO: MAKE PRIVATE + public void addCar() throws InvalidTrackFormatException { ConfigSpecification.SpaceType[] spaceTypes = ConfigSpecification.SpaceType.values(); - ArrayList allSpaceTypesAsChar = new ArrayList<>(); + List allSpaceTypesAsChar = new ArrayList<>(); + List usedSymbolForCar = new ArrayList<>(); for (ConfigSpecification.SpaceType spaceType : spaceTypes) { allSpaceTypesAsChar.add(spaceType.getValue()); } - for (String line : track) { + for (int j = 0; j < track.size(); j++) { + String line = track.get(j); for (int i = 0; i < line.length(); i++) { - if (!allSpaceTypesAsChar.contains(line.charAt(i))) { - //TODO: CREATE CAR - ADD IT TO CARS - BUT CHECK THAT Symbol is not allready used for another car? + char possibleCarChar = line.charAt(i); + if (!allSpaceTypesAsChar.contains(possibleCarChar)) { + if (usedSymbolForCar.contains(possibleCarChar)) { + throw new InvalidTrackFormatException(); + } + usedSymbolForCar.add(possibleCarChar); + cars.add(new Car(possibleCarChar, new PositionVector(i, j))); } } } } + private void findFinish() throws InvalidTrackFormatException { + for (int i = 0; i < track.size(); i++) { + String line = track.get(i); + for (int j = 0; j < line.length(); j++) { + if (line.charAt(j) == ConfigSpecification.SpaceType.FINISH_LEFT.getValue() || + line.charAt(j) == ConfigSpecification.SpaceType.FINISH_RIGHT.getValue() || + line.charAt(j) == ConfigSpecification.SpaceType.FINISH_DOWN.getValue() || + line.charAt(j) == ConfigSpecification.SpaceType.FINISH_UP.getValue()) { + finishLine.add(new PositionVector(j, i)); + } + } + } + if (finishLine.size() == 0) { + throw new InvalidTrackFormatException(); + } + ConfigSpecification.SpaceType finishTyp = getSpaceType(finishLine.get(0)); + for (PositionVector positionVector : finishLine) { + if (getSpaceType(positionVector) != finishTyp) { + throw new InvalidTrackFormatException(); + } + } + } + private PositionVector findChar(char symbol) { PositionVector vector = null; for (int i = 0; i < track.size(); i++) { String line = track.get(i); for (int j = 0; j < line.length(); j++) { if (line.charAt(j) == symbol) { - vector = new PositionVector(j,i); + vector = new PositionVector(j, i); } } } return vector; } - private void findFinish() { - //TODO: - + /** + * + * @return all Cars + */ + public List getCars() { + return cars; } + /** + * + * @return finishLine + */ + public List getFinishLine() { + return finishLine; + } /** * @return the track @@ -148,7 +190,8 @@ public class Track implements TrackSpecification { */ @Override public Config.SpaceType getSpaceType(PositionVector position) { - // TODO: implementation // Done first tests passed but what to do with error + + //TODO: RETURN NULL OR CUSTOM ERROR? char charAtPosition = track.get(position.getY()).charAt(position.getX()); ConfigSpecification.SpaceType[] spaceTypes = ConfigSpecification.SpaceType.values(); @@ -158,7 +201,7 @@ public class Track implements TrackSpecification { } } - throw new UnsupportedOperationException(); + return null; } /** @@ -168,9 +211,7 @@ public class Track implements TrackSpecification { */ @Override public int getCarCount() { - // TODO: error??? return cars.size(); - //throw new UnsupportedOperationException(); } /** @@ -181,9 +222,7 @@ public class Track implements TrackSpecification { */ @Override public Car getCar(int carIndex) { - // TODO: error??? return cars.get(carIndex); - //throw new UnsupportedOperationException(); } /** @@ -194,27 +233,20 @@ public class Track implements TrackSpecification { */ @Override public char getCarId(int carIndex) { - // TODO: error??? - return cars.get(carIndex).getID(); - //throw new UnsupportedOperationException(); + return cars.get(carIndex).getId(); } /** * Get the position of the specified car. + * Returns Null if carIndex not valid * * @param carIndex The zero-based carIndex number * @return A PositionVector containing the car's current position */ @Override public PositionVector getCarPos(int carIndex) { - // TODO: nextPosition or Position of Trackfile? - //Alternative 1 - return cars.get(carIndex).nextPosition(); - - //Alternative 2 //NULL aussschliessen falls umgesetzt. - return findChar(cars.get(carIndex).getID()); - - //throw new UnsupportedOperationException(); + return findChar(cars.get(carIndex).getId()); + //TODO: SHOULD WE GET CAR POSITION FROM TRACK STRING OR CAR OBJ } /** @@ -225,9 +257,7 @@ public class Track implements TrackSpecification { */ @Override public PositionVector getCarVelocity(int carIndex) { - // TODO: error??? return cars.get(carIndex).getVelocity(); - //throw new UnsupportedOperationException(); } /** @@ -252,12 +282,10 @@ public class Track implements TrackSpecification { */ @Override public String toString() { - // TODO: error??? String str = ""; for (String line : track) { - str += line+"\n"; + str += line + "\n"; } return str; - //throw new UnsupportedOperationException(); } } diff --git a/src/test/java/ch/zhaw/pm2/racetrack/TrackTest.java b/src/test/java/ch/zhaw/pm2/racetrack/TrackTest.java index 6821ea9..a4decfb 100644 --- a/src/test/java/ch/zhaw/pm2/racetrack/TrackTest.java +++ b/src/test/java/ch/zhaw/pm2/racetrack/TrackTest.java @@ -1,14 +1,17 @@ package ch.zhaw.pm2.racetrack; import ch.zhaw.pm2.racetrack.given.ConfigSpecification; +import org.junit.Before; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import java.io.File; import java.io.FileNotFoundException; +import java.util.ArrayList; import java.util.List; + public class TrackTest { Track trackObj; @@ -45,7 +48,31 @@ public class TrackTest { //TODO: @Test void addCarAtInit() { - trackObj.addCar(); + try { + trackObj.addCar(); + } catch (InvalidTrackFormatException e) { + e.printStackTrace(); + } } + + @Test + void findFinish() { + List expected = new ArrayList<>(); + expected.add(new PositionVector(22,22)); + expected.add(new PositionVector(22,23)); + expected.add(new PositionVector(22,24)); + Assertions.assertEquals(expected,trackObj.getFinishLine()); + } + + @Test + void makeTrackObj() { + try { + Track t1 = new Track(new File("C:\\Studium\\Semester2\\PM2\\Projekt1\\racetrack\\tracks\\challenge.txt")); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (InvalidTrackFormatException e) { + e.printStackTrace(); + } + } } From befc67f4f02363ef3e260d02a46188717f49c9f9 Mon Sep 17 00:00:00 2001 From: Andrin Fassbind Date: Thu, 10 Mar 2022 14:35:33 +0100 Subject: [PATCH 5/7] =?UTF-8?q?-=20Methoden=20=C3=BCberarbeitet?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/ch/zhaw/pm2/racetrack/Car.java | 10 +++- src/main/java/ch/zhaw/pm2/racetrack/Game.java | 7 ++- .../java/ch/zhaw/pm2/racetrack/Track.java | 49 +++++++++++++++---- 3 files changed, 53 insertions(+), 13 deletions(-) diff --git a/src/main/java/ch/zhaw/pm2/racetrack/Car.java b/src/main/java/ch/zhaw/pm2/racetrack/Car.java index 9b97c3d..dfcce64 100644 --- a/src/main/java/ch/zhaw/pm2/racetrack/Car.java +++ b/src/main/java/ch/zhaw/pm2/racetrack/Car.java @@ -48,6 +48,14 @@ public class Car implements CarSpecification { setPosition(position); } + public char getId() { + return id; + } + + public PositionVector getVelocity() { + return velocity; + } + /** * Set this Car position directly, regardless of current position and velocity. * This should only be used by the game controller in rare cases to set the crash or winning position. @@ -58,7 +66,7 @@ public class Car implements CarSpecification { @Override public void setPosition(final PositionVector position) { // TODO: implementation - throw new UnsupportedOperationException(); + this.position = position; } /** diff --git a/src/main/java/ch/zhaw/pm2/racetrack/Game.java b/src/main/java/ch/zhaw/pm2/racetrack/Game.java index 27609ca..b0204e9 100644 --- a/src/main/java/ch/zhaw/pm2/racetrack/Game.java +++ b/src/main/java/ch/zhaw/pm2/racetrack/Game.java @@ -127,6 +127,8 @@ public class Game implements GameSpecification { throw new UnsupportedOperationException(); } + + /** * Does indicate if a car would have a crash with a WALL space or another car at the given position. * @param carIndex The zero-based carIndex number @@ -135,7 +137,8 @@ public class Game implements GameSpecification { */ @Override public boolean willCarCrash(int carIndex, PositionVector position) { - // TODO: implementation - throw new UnsupportedOperationException(); + + + return true; } } diff --git a/src/main/java/ch/zhaw/pm2/racetrack/Track.java b/src/main/java/ch/zhaw/pm2/racetrack/Track.java index 1c7dffc..5cc9993 100644 --- a/src/main/java/ch/zhaw/pm2/racetrack/Track.java +++ b/src/main/java/ch/zhaw/pm2/racetrack/Track.java @@ -73,13 +73,12 @@ public class Track implements TrackSpecification { * @throws InvalidTrackFormatException if the track file contains invalid data (no tracklines, ...) */ public Track(File trackFile) throws FileNotFoundException, InvalidTrackFormatException { - // TODO: track = new ArrayList<>(); cars = new ArrayList<>(); finishLine = new ArrayList<>(); readFile(trackFile); findFinish(); - addCar(); + addCars(); } /** @@ -95,8 +94,8 @@ public class Track implements TrackSpecification { } } - //TODO: MAKE PRIVATE - public void addCar() throws InvalidTrackFormatException { + + private void addCars() throws InvalidTrackFormatException { ConfigSpecification.SpaceType[] spaceTypes = ConfigSpecification.SpaceType.values(); List allSpaceTypesAsChar = new ArrayList<>(); List usedSymbolForCar = new ArrayList<>(); @@ -159,7 +158,6 @@ public class Track implements TrackSpecification { } /** - * * @return all Cars */ public List getCars() { @@ -167,7 +165,6 @@ public class Track implements TrackSpecification { } /** - * * @return finishLine */ public List getFinishLine() { @@ -181,6 +178,32 @@ public class Track implements TrackSpecification { return track; } + /** + * This Method will update the Car on the track + * and will make the Car move to the next position + * @param carIndex representing the current Car + */ + public void moveCar(int carIndex) { + PositionVector positionVector = findChar(getCarId(carIndex)); + //Removes the Car at Current Pos + String line = track.get(positionVector.getY()); + line = line.substring(0,positionVector.getX()) + ConfigSpecification.SpaceType.TRACK.getValue() + line.substring(positionVector.getX()+1); + track.add(positionVector.getY(),line); + + //Adds Car at new Position + positionVector = cars.get(carIndex).nextPosition(); + line = track.get(positionVector.getY()); + line = line.substring(0,positionVector.getX()) + cars.get(carIndex).getId() + line.substring(positionVector.getX()+1); + track.add(positionVector.getY(),line); + + //Change position of car + getCar(carIndex).move(); + } + + public char getRealCharAtPosition(PositionVector positionVector) { + return track.get(positionVector.getY()).charAt(positionVector.getX()); + } + /** * Return the type of space at the given position. * If the location is outside the track bounds, it is considered a wall. @@ -191,7 +214,6 @@ public class Track implements TrackSpecification { @Override public Config.SpaceType getSpaceType(PositionVector position) { - //TODO: RETURN NULL OR CUSTOM ERROR? char charAtPosition = track.get(position.getY()).charAt(position.getX()); ConfigSpecification.SpaceType[] spaceTypes = ConfigSpecification.SpaceType.values(); @@ -246,7 +268,6 @@ public class Track implements TrackSpecification { @Override public PositionVector getCarPos(int carIndex) { return findChar(cars.get(carIndex).getId()); - //TODO: SHOULD WE GET CAR POSITION FROM TRACK STRING OR CAR OBJ } /** @@ -271,8 +292,16 @@ public class Track implements TrackSpecification { */ @Override public char getCharAtPosition(int y, int x, Config.SpaceType currentSpace) { - // TODO: implementation - throw new UnsupportedOperationException(); + char charAtPos = track.get(y).charAt(x); + for (Car car : cars) { + if(charAtPos == car.getId()) { + if(car.isCrashed()) { + return CRASH_INDICATOR; + } + return charAtPos; + } + } + return currentSpace.getValue(); } /** From 46e6b838c216f110e04fbbf0a96a70d9aa913fda Mon Sep 17 00:00:00 2001 From: Andrin Fassbind Date: Thu, 10 Mar 2022 14:43:34 +0100 Subject: [PATCH 6/7] =?UTF-8?q?-=20Methoden=20=C3=BCberarbeitet?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/ch/zhaw/pm2/racetrack/Track.java | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/main/java/ch/zhaw/pm2/racetrack/Track.java b/src/main/java/ch/zhaw/pm2/racetrack/Track.java index 5cc9993..2596103 100644 --- a/src/main/java/ch/zhaw/pm2/racetrack/Track.java +++ b/src/main/java/ch/zhaw/pm2/racetrack/Track.java @@ -193,15 +193,21 @@ public class Track implements TrackSpecification { //Adds Car at new Position positionVector = cars.get(carIndex).nextPosition(); line = track.get(positionVector.getY()); - line = line.substring(0,positionVector.getX()) + cars.get(carIndex).getId() + line.substring(positionVector.getX()+1); + line = line.substring(0,positionVector.getX()) + cars.get(carIndex).getID() + line.substring(positionVector.getX()+1); track.add(positionVector.getY(),line); //Change position of car getCar(carIndex).move(); } - public char getRealCharAtPosition(PositionVector positionVector) { - return track.get(positionVector.getY()).charAt(positionVector.getX()); + /** + * This Method will check if the Car could crash at the specific position + * @param positionVector the position to check if the car could crash + * @return true if car would crash. Else false. + */ + public boolean willCrashAtPosition(PositionVector positionVector) { + char charAtPosition = track.get(positionVector.getY()).charAt(positionVector.getX()); + return charAtPosition != ConfigSpecification.SpaceType.TRACK.value; } /** @@ -255,7 +261,7 @@ public class Track implements TrackSpecification { */ @Override public char getCarId(int carIndex) { - return cars.get(carIndex).getId(); + return cars.get(carIndex).getID(); } /** @@ -267,7 +273,7 @@ public class Track implements TrackSpecification { */ @Override public PositionVector getCarPos(int carIndex) { - return findChar(cars.get(carIndex).getId()); + return findChar(cars.get(carIndex).getID()); } /** @@ -294,7 +300,7 @@ public class Track implements TrackSpecification { public char getCharAtPosition(int y, int x, Config.SpaceType currentSpace) { char charAtPos = track.get(y).charAt(x); for (Car car : cars) { - if(charAtPos == car.getId()) { + if(charAtPos == car.getID()) { if(car.isCrashed()) { return CRASH_INDICATOR; } From c4ea4d1920e59a2c06f2e56b8386dabc42ba930b Mon Sep 17 00:00:00 2001 From: Andrin Fassbind Date: Thu, 10 Mar 2022 14:58:54 +0100 Subject: [PATCH 7/7] =?UTF-8?q?-=20Crash=20Methoden=20hinzugef=C3=BCgt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/ch/zhaw/pm2/racetrack/Track.java | 45 ++++++++++++++----- 1 file changed, 33 insertions(+), 12 deletions(-) diff --git a/src/main/java/ch/zhaw/pm2/racetrack/Track.java b/src/main/java/ch/zhaw/pm2/racetrack/Track.java index 2596103..e89b960 100644 --- a/src/main/java/ch/zhaw/pm2/racetrack/Track.java +++ b/src/main/java/ch/zhaw/pm2/racetrack/Track.java @@ -157,6 +157,12 @@ public class Track implements TrackSpecification { return vector; } + private void drawCharOnTrackIndicator(PositionVector positionVector, char symbol) { + String line = track.get(positionVector.getY()); + line = line.substring(0,positionVector.getX()) + symbol + line.substring(positionVector.getX()+1); + track.add(positionVector.getY(),line); + } + /** * @return all Cars */ @@ -184,22 +190,24 @@ public class Track implements TrackSpecification { * @param carIndex representing the current Car */ public void moveCar(int carIndex) { - PositionVector positionVector = findChar(getCarId(carIndex)); - //Removes the Car at Current Pos - String line = track.get(positionVector.getY()); - line = line.substring(0,positionVector.getX()) + ConfigSpecification.SpaceType.TRACK.getValue() + line.substring(positionVector.getX()+1); - track.add(positionVector.getY(),line); - - //Adds Car at new Position - positionVector = cars.get(carIndex).nextPosition(); - line = track.get(positionVector.getY()); - line = line.substring(0,positionVector.getX()) + cars.get(carIndex).getID() + line.substring(positionVector.getX()+1); - track.add(positionVector.getY(),line); - + makeCarMoveInTrack(carIndex); //Change position of car getCar(carIndex).move(); } + /** + * This class does change the Position of the car only in the track. + * @param carIndex + */ + private void makeCarMoveInTrack(int carIndex) { + PositionVector positionVector = findChar(getCarId(carIndex)); + //Removes the Car at Current Pos + drawCharOnTrackIndicator(positionVector,ConfigSpecification.SpaceType.TRACK.getValue()); + //Adds Car at new Position + positionVector = cars.get(carIndex).nextPosition(); + drawCharOnTrackIndicator(positionVector,cars.get(carIndex).getID()); + } + /** * This Method will check if the Car could crash at the specific position * @param positionVector the position to check if the car could crash @@ -210,6 +218,19 @@ public class Track implements TrackSpecification { return charAtPosition != ConfigSpecification.SpaceType.TRACK.value; } + /** + * This Method will make the Car Crash. In Track and in the Car Object + * @param carIndex representing current Car + * @param positionVector where the Crash did happen + */ + public void carDoesCrash(int carIndex,PositionVector positionVector) { + Car car = cars.get(carIndex); + car.crash(); + makeCarMoveInTrack(carIndex); + drawCharOnTrackIndicator(new PositionVector(positionVector.getX()+1,positionVector.getY()),CRASH_INDICATOR); + + } + /** * Return the type of space at the given position. * If the location is outside the track bounds, it is considered a wall.