diff --git a/Klassendiagramm.drawio b/Klassendiagramm.drawio
index afde28c..99e08e5 100644
--- a/Klassendiagramm.drawio
+++ b/Klassendiagramm.drawio
@@ -1 +1 @@
-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
\ No newline at end of file
+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
\ No newline at end of file
diff --git a/src/main/java/ch/zhaw/pm2/racetrack/Game.java b/src/main/java/ch/zhaw/pm2/racetrack/Game.java
index 1486983..11e03d1 100644
--- a/src/main/java/ch/zhaw/pm2/racetrack/Game.java
+++ b/src/main/java/ch/zhaw/pm2/racetrack/Game.java
@@ -26,8 +26,11 @@ public class Game implements GameSpecification {
this.userInterface = userInterface;
}
-
- public boolean initPhase() throws InvalidTrackFormatException {
+ /**
+ * This method will initialize the game. Therefore it interacts with the user via UserInterface
+ * @return true if the initialization is completed. Returns false if there is an error.
+ */
+ public boolean initPhase() {
File folder = new File("tracks");
File[] listOfFiles = folder.listFiles();
if (listOfFiles.length > 0) {
@@ -35,8 +38,17 @@ public class Game implements GameSpecification {
for (File file : listOfFiles) {
tracks.add(file.getName());
}
+
File selectedTrack = listOfFiles[userInterface.selectOption("Select Track file", tracks)];
- selectTrack(selectedTrack);
+ try {
+ selectTrack(selectedTrack);
+ } catch (FileNotFoundException e) {
+ userInterface.printInformation("There is an unexpected Error with the trackfile Path. Add trackfiles only to tracks path. Exit the Game and Fix the Problem");
+ return false;
+ } catch (InvalidTrackFormatException e) {
+ userInterface.printInformation("There is an unexpected Error with the trackfile. Format does not match specifications! Exit the Game and Fix the Problem");
+ return false;
+ }
List moveStrategies = new ArrayList<>();
moveStrategies.add("Do not move Strategy");
moveStrategies.add("User Move Strategy");
@@ -63,7 +75,6 @@ public class Game implements GameSpecification {
} catch (FileNotFoundException e) {
userInterface.printInformation("There is no Move-List implemented. Choose another Strategy!");
}
- //TODO: Backslash kompatibel für Linux
break;
case 4:
filePath = ".\\follower\\" + selectedTrack.getName().split("\\.")[0] + "_points.txt";
@@ -86,17 +97,11 @@ public class Game implements GameSpecification {
/**
* The functionality was taken out of init to automate testing
- *
* @param selectedTrack
*/
- Track selectTrack(File selectedTrack) {
- try {
- track = new Track(selectedTrack);
- return track;
- } catch (FileNotFoundException | PositionVectorNotValid | InvalidTrackFormatException e) {
- e.printStackTrace();
- }
- return null;
+ Track selectTrack(File selectedTrack) throws InvalidTrackFormatException,FileNotFoundException {
+ track = new Track(selectedTrack);
+ return track;
}
/**
@@ -198,9 +203,8 @@ public class Game implements GameSpecification {
* for this turn
*/
@Override
- public void doCarTurn(Direction acceleration) throws PositionVectorNotValid {
+ public void doCarTurn(Direction acceleration) throws PositionVectorNotValidException {
track.getCar(currentCarIndex).accelerate(acceleration);
-
PositionVector crashPosition = null;
List positionList = calculatePath(track.getCarPos(currentCarIndex), track.getCar(currentCarIndex).nextPosition());
for (int i = 0; i < positionList.size(); i++) {
@@ -221,7 +225,12 @@ public class Game implements GameSpecification {
}
}
- public String gamePhase() throws PositionVectorNotValid {
+ /**
+ * This method implements the gameflow in a while loop. If there is a winner. The method will return its carid.
+ *
+ * @return the ID of the winning car return null if there is no winner.
+ */
+ public String gamePhase() {
while (carsMoving() && getWinner() == NO_WINNER) {
userInterface.printTrack(track);
Direction direction;
@@ -230,7 +239,12 @@ public class Game implements GameSpecification {
track.getCar(currentCarIndex).setMoveStrategy(new DoNotMoveStrategy());
direction = track.getCar(currentCarIndex).getMoveStrategy().nextMove();
}
- doCarTurn(direction);
+ try {
+ doCarTurn(direction);
+ } catch (PositionVectorNotValidException e) {
+ e.printStackTrace();
+ userInterface.printInformation("There has been an unexpected Error. It seems that the trackfile is not Valid. Please do only use the given trackfiles. Otherwise please check that your selfmade tracks have borders arround the track.");
+ }
switchToNextActiveCar();
}
userInterface.printTrack(track);
@@ -275,41 +289,46 @@ public class Game implements GameSpecification {
}
+ /**
+ * This method will check if a car is passing the finishline.
+ * If the car is passing the finishline in the wrong direction, the car will lose a winpoint.
+ * If the car is passing the finishline in the correct direction, the car will gain a winpoint.
+ * @param start the startposition of the car
+ * @param finish the expected finishpositon of the car after the move
+ * @param carIndex of the current player.
+ */
private void calculateWinner(PositionVector start, PositionVector finish, int carIndex) {
List path = calculatePath(start, finish);
for (PositionVector point : path) {
- if (track.getSpaceType(point) != null) {
- switch (track.getSpaceType(point)) {
- case FINISH_UP:
- if (start.getY() < finish.getY()) {
- track.getCar(carIndex).increaseWinPoints();
- } else if (start.getY() > finish.getY()) {
- track.getCar(carIndex).deductWinPoints();
- }
- break;
- case FINISH_DOWN:
- if (start.getY() > finish.getY()) {
- track.getCar(carIndex).increaseWinPoints();
- } else if (start.getY() < finish.getY()) {
- track.getCar(carIndex).deductWinPoints();
- }
- break;
- case FINISH_RIGHT:
- if (start.getX() < finish.getX()) {
- track.getCar(carIndex).increaseWinPoints();
- } else if (start.getX() > finish.getX()) {
- track.getCar(carIndex).deductWinPoints();
- }
- break;
- case FINISH_LEFT:
- if (start.getX() > finish.getX()) {
- track.getCar(carIndex).increaseWinPoints();
- } else if (start.getX() < finish.getX()) {
- track.getCar(carIndex).increaseWinPoints();
- }
- break;
- }
-
+ switch (track.getSpaceType(point)) {
+ case FINISH_UP:
+ if (start.getY() < finish.getY()) {
+ track.getCar(carIndex).increaseWinPoints();
+ } else if (start.getY() > finish.getY()) {
+ track.getCar(carIndex).deductWinPoints();
+ }
+ break;
+ case FINISH_DOWN:
+ if (start.getY() > finish.getY()) {
+ track.getCar(carIndex).increaseWinPoints();
+ } else if (start.getY() < finish.getY()) {
+ track.getCar(carIndex).deductWinPoints();
+ }
+ break;
+ case FINISH_RIGHT:
+ if (start.getX() < finish.getX()) {
+ track.getCar(carIndex).increaseWinPoints();
+ } else if (start.getX() > finish.getX()) {
+ track.getCar(carIndex).deductWinPoints();
+ }
+ break;
+ case FINISH_LEFT:
+ if (start.getX() > finish.getX()) {
+ track.getCar(carIndex).increaseWinPoints();
+ } else if (start.getX() < finish.getX()) {
+ track.getCar(carIndex).increaseWinPoints();
+ }
+ break;
}
}
}
@@ -323,7 +342,7 @@ public class Game implements GameSpecification {
* @return A boolean indicator if the car would crash with a WALL or another car.
*/
@Override
- public boolean willCarCrash(int carIndex, PositionVector position) throws PositionVectorNotValid {
+ public boolean willCarCrash(int carIndex, PositionVector position) throws PositionVectorNotValidException {
return track.willCrashAtPosition(carIndex, position);
}
diff --git a/src/main/java/ch/zhaw/pm2/racetrack/InvalidFileFormatException.java b/src/main/java/ch/zhaw/pm2/racetrack/InvalidFileFormatException.java
index 6655e69..f530593 100644
--- a/src/main/java/ch/zhaw/pm2/racetrack/InvalidFileFormatException.java
+++ b/src/main/java/ch/zhaw/pm2/racetrack/InvalidFileFormatException.java
@@ -4,6 +4,7 @@ package ch.zhaw.pm2.racetrack;
* Class for Exception when invalid Fileformat is used.
*/
public class InvalidFileFormatException extends Exception {
+ public InvalidFileFormatException(){super();}
public InvalidFileFormatException(String errorMessage) {
super(errorMessage);
}
diff --git a/src/main/java/ch/zhaw/pm2/racetrack/Main.java b/src/main/java/ch/zhaw/pm2/racetrack/Main.java
index 83bf6d8..c1ed7f4 100644
--- a/src/main/java/ch/zhaw/pm2/racetrack/Main.java
+++ b/src/main/java/ch/zhaw/pm2/racetrack/Main.java
@@ -5,7 +5,7 @@ import java.util.List;
public class Main {
- public static void main(String[] args) throws InvalidTrackFormatException, PositionVectorNotValid {
+ public static void main(String[] args) {
UserInterface userInterface = new UserInterface("Hello and Welcome to Racetrack by Team02-\"AngryNerds\"");
while (true) {
Game game = new Game(userInterface);
diff --git a/src/main/java/ch/zhaw/pm2/racetrack/PositionVectorNotValid.java b/src/main/java/ch/zhaw/pm2/racetrack/PositionVectorNotValid.java
deleted file mode 100644
index 2b70333..0000000
--- a/src/main/java/ch/zhaw/pm2/racetrack/PositionVectorNotValid.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package ch.zhaw.pm2.racetrack;
-
-public class PositionVectorNotValid extends Throwable {
- public PositionVectorNotValid(String message) {
- super(message);
- }
-
- public PositionVectorNotValid() {}
-}
diff --git a/src/main/java/ch/zhaw/pm2/racetrack/PositionVectorNotValidException.java b/src/main/java/ch/zhaw/pm2/racetrack/PositionVectorNotValidException.java
new file mode 100644
index 0000000..e3d75b2
--- /dev/null
+++ b/src/main/java/ch/zhaw/pm2/racetrack/PositionVectorNotValidException.java
@@ -0,0 +1,9 @@
+package ch.zhaw.pm2.racetrack;
+
+public class PositionVectorNotValidException extends Throwable {
+ public PositionVectorNotValidException(String message) {
+ super(message);
+ }
+
+ public PositionVectorNotValidException() {}
+}
diff --git a/src/main/java/ch/zhaw/pm2/racetrack/Track.java b/src/main/java/ch/zhaw/pm2/racetrack/Track.java
index e4eeaa7..b3c9d5d 100644
--- a/src/main/java/ch/zhaw/pm2/racetrack/Track.java
+++ b/src/main/java/ch/zhaw/pm2/racetrack/Track.java
@@ -72,7 +72,7 @@ public class Track implements TrackSpecification {
* @throws FileNotFoundException if the given track file could not be found
* @throws InvalidTrackFormatException if the track file contains invalid data (no tracklines, ...)
*/
- public Track(File trackFile) throws FileNotFoundException, InvalidTrackFormatException, PositionVectorNotValid {
+ public Track(File trackFile) throws FileNotFoundException, InvalidTrackFormatException {
track = new ArrayList<>();
cars = new ArrayList<>();
finishLine = new ArrayList<>();
@@ -123,11 +123,10 @@ public class Track implements TrackSpecification {
}
}
- //TODO: SAVE Finish somewhere maybe?
+ //TODO: THIS
/**
- * Checks if there is a finish line in the track if there is no finish line found throws a Exception.
*
- * @throws InvalidTrackFormatException if there is no finish Line found in the track
+ * @throws InvalidTrackFormatException
*/
private void findFinish() throws InvalidTrackFormatException {
for (int i = 0; i < track.size(); i++) {
@@ -175,7 +174,7 @@ public class Track implements TrackSpecification {
* Method that places a character at a chosen position
*
* @param positionVector position where char will be placed
- * @param symbol char that should be placed at desired position
+ * @param symbol char that should be placed at desired position
*/
private void drawCharOnTrackIndicator(PositionVector positionVector, char symbol) {
String line = track.get(positionVector.getY());
@@ -184,17 +183,18 @@ public class Track implements TrackSpecification {
track.add(positionVector.getY(), line);
}
//TODO: check if this method is okay and needed
+
/**
* Determines if a location is valid PositionVector inside the track
*
* @param positionVector of location that has to be checked
- * @throws PositionVectorNotValid if the PositionVector does not lie on the track.
+ * @throws PositionVectorNotValidException if the PositionVector does not lie on the track.
*/
- private void isPositionVectorOnTrack(PositionVector positionVector) throws PositionVectorNotValid {
+ private void isPositionVectorOnTrack(PositionVector positionVector) throws PositionVectorNotValidException {
try {
track.get(positionVector.getY()).charAt(positionVector.getX());
} catch (IndexOutOfBoundsException e) {
- throw new PositionVectorNotValid();
+ throw new PositionVectorNotValidException();
}
}
@@ -257,7 +257,7 @@ public class Track implements TrackSpecification {
* @param positionVector the position to check if the car would crash
* @return true if crash otherwise false
*/
- public boolean willCrashAtPosition(int carIndex, PositionVector positionVector) throws PositionVectorNotValid {
+ public boolean willCrashAtPosition(int carIndex, PositionVector positionVector) throws PositionVectorNotValidException {
isPositionVectorOnTrack(positionVector); //TODO: remove this line? Or Method?
char charAtPosition = track.get(positionVector.getY()).charAt(positionVector.getX());
if (getCarId(carIndex) == charAtPosition) return false;
diff --git a/src/main/java/ch/zhaw/pm2/racetrack/given/GameSpecification.java b/src/main/java/ch/zhaw/pm2/racetrack/given/GameSpecification.java
index c9148e5..4810ad1 100644
--- a/src/main/java/ch/zhaw/pm2/racetrack/given/GameSpecification.java
+++ b/src/main/java/ch/zhaw/pm2/racetrack/given/GameSpecification.java
@@ -1,7 +1,7 @@
package ch.zhaw.pm2.racetrack.given;
import ch.zhaw.pm2.racetrack.PositionVector;
-import ch.zhaw.pm2.racetrack.PositionVectorNotValid;
+import ch.zhaw.pm2.racetrack.PositionVectorNotValidException;
import java.util.List;
@@ -19,11 +19,11 @@ public interface GameSpecification {
int getWinner();
- void doCarTurn(PositionVector.Direction acceleration) throws PositionVectorNotValid;
+ void doCarTurn(PositionVector.Direction acceleration) throws PositionVectorNotValidException;
void switchToNextActiveCar();
List calculatePath(PositionVector startPosition, PositionVector endPosition);
- boolean willCarCrash(int carIndex, PositionVector position) throws PositionVectorNotValid;
+ boolean willCarCrash(int carIndex, PositionVector position) throws PositionVectorNotValidException;
}
diff --git a/src/test/java/ch/zhaw/pm2/racetrack/GameTest.java b/src/test/java/ch/zhaw/pm2/racetrack/GameTest.java
index 908375c..a956fac 100644
--- a/src/test/java/ch/zhaw/pm2/racetrack/GameTest.java
+++ b/src/test/java/ch/zhaw/pm2/racetrack/GameTest.java
@@ -7,6 +7,7 @@ import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.Assertions;
import java.io.File;
+import java.io.FileNotFoundException;
import java.util.List;
import static ch.zhaw.pm2.racetrack.Game.NO_WINNER;
import static ch.zhaw.pm2.racetrack.PositionVector.Direction.*;
@@ -35,7 +36,12 @@ class GameTest {
void setup() {
userInterface = new UserInterface("Test");
game = new Game(userInterface);
- track = game.selectTrack(new File(TRACK_FILE_PATH));
+ try {
+ track = game.selectTrack(new File(TRACK_FILE_PATH));
+ } catch (InvalidTrackFormatException | FileNotFoundException e) {
+ e.printStackTrace();
+ Assertions.fail();
+ }
game.selectMoveStrategy(track.getCar(CAR_INDEX_ONE), new UserMoveStrategy(new UserInterface("Testing"), CAR_INDEX_ONE, track.getCarId(CAR_INDEX_ONE)));
game.selectMoveStrategy(track.getCar(CAR_INDEX_TWO), new UserMoveStrategy(new UserInterface("Testing"), CAR_INDEX_TWO, track.getCarId(CAR_INDEX_TWO)));
@@ -93,7 +99,12 @@ class GameTest {
void setup() {
userInterface = new UserInterface("Test");
game = new Game(userInterface);
- track = game.selectTrack(new File(TRACK_FILE_PATH));
+ try {
+ track = game.selectTrack(new File(TRACK_FILE_PATH));
+ } catch (InvalidTrackFormatException | FileNotFoundException e) {
+ e.printStackTrace();
+ Assertions.fail();
+ }
game.selectMoveStrategy(track.getCar(CAR_INDEX_ONE), new UserMoveStrategy(new UserInterface("Testing"), CAR_INDEX_ONE, track.getCarId(CAR_INDEX_ONE)));
game.selectMoveStrategy(track.getCar(CAR_INDEX_TWO), new UserMoveStrategy(new UserInterface("Testing"), CAR_INDEX_TWO, track.getCarId(CAR_INDEX_TWO)));
@@ -104,8 +115,8 @@ class GameTest {
try {
game.doCarTurn(RIGHT);
Assertions.assertEquals(new PositionVector(1, 0), game.getCarVelocity(0));
- } catch (PositionVectorNotValid positionVectorNotValid) {
- positionVectorNotValid.printStackTrace();
+ } catch (PositionVectorNotValidException positionVectorNotValidException) {
+ positionVectorNotValidException.printStackTrace();
}
}
@@ -114,8 +125,8 @@ class GameTest {
try {
game.doCarTurn(PositionVector.Direction.UP);
Assertions.assertTrue(game.onlyOneCarLeft());
- } catch (PositionVectorNotValid positionVectorNotValid) {
- positionVectorNotValid.printStackTrace();
+ } catch (PositionVectorNotValidException positionVectorNotValidException) {
+ positionVectorNotValidException.printStackTrace();
}
}
}
@@ -169,23 +180,15 @@ class GameTest {
UP_RIGHT,
RIGHT,
RIGHT}));
- try {
- game.initPhase();
- Assertions.assertEquals("a",game.gamePhase());
- } catch (InvalidTrackFormatException | PositionVectorNotValid e) {
- e.printStackTrace();
- }
+ game.initPhase();
+ Assertions.assertEquals("a",game.gamePhase());
}
@Test
void crashA() {
game = new Game(new interFace("Test",new Integer[]{0,2,2},new PositionVector.Direction[]{UP}));
- try {
- game.initPhase();
- Assertions.assertEquals("b",game.gamePhase());
- } catch (InvalidTrackFormatException | PositionVectorNotValid e) {
- e.printStackTrace();
- }
+ game.initPhase();
+ Assertions.assertEquals("b",game.gamePhase());
}
}
diff --git a/src/test/java/ch/zhaw/pm2/racetrack/TrackTest.java b/src/test/java/ch/zhaw/pm2/racetrack/TrackTest.java
index d5cff22..a19e607 100644
--- a/src/test/java/ch/zhaw/pm2/racetrack/TrackTest.java
+++ b/src/test/java/ch/zhaw/pm2/racetrack/TrackTest.java
@@ -21,10 +21,11 @@ public class TrackTest {
File file = new File(".\\tracks\\challenge.txt");
try {
trackObj = new Track(file);
-
- } catch (Exception | PositionVectorNotValid e) {
- System.err.println("Error in Test compareTrack" + e.getMessage());
+ } catch (FileNotFoundException | InvalidTrackFormatException e) {
+ e.printStackTrace();
+ Assertions.fail();
}
+
}
@Test
@@ -79,7 +80,7 @@ public class TrackTest {
track.add("##################################################");
track.add("##################################################");
Assertions.assertLinesMatch(track, trackObj.getTrack());
- } catch (FileNotFoundException | InvalidTrackFormatException | PositionVectorNotValid e) {
+ } catch (FileNotFoundException | InvalidTrackFormatException e) {
e.printStackTrace();
}
}
@@ -115,8 +116,8 @@ public class TrackTest {
Assertions.assertFalse(trackObj.willCrashAtPosition(0, new PositionVector(7, 22)));
//Car will not Crash and is on finishLine
Assertions.assertFalse(trackObj.willCrashAtPosition(0, trackObj.getFinishLine().get(0)));
- } catch (PositionVectorNotValid positionVectorNotValid) {
- positionVectorNotValid.printStackTrace();
+ } catch (PositionVectorNotValidException positionVectorNotValidException) {
+ positionVectorNotValidException.printStackTrace();
Assertions.fail("Test should not throw error");
}
}
@@ -126,8 +127,8 @@ public class TrackTest {
void makeCarCrash() {
try {
trackObj.carDoesCrash(0, new PositionVector(6, 22));
- } catch (PositionVectorNotValid positionVectorNotValid) {
- positionVectorNotValid.printStackTrace();
+ } catch (PositionVectorNotValidException positionVectorNotValidException) {
+ positionVectorNotValidException.printStackTrace();
Assertions.fail("Test should not throw exception");
}
Assertions.assertEquals(Track.CRASH_INDICATOR, trackObj.getTrack().get(22).charAt(6));
@@ -146,7 +147,7 @@ public class TrackTest {
try {
trackObj = new Track(file);
- } catch (Exception | PositionVectorNotValid e) {
+ } catch (InvalidTrackFormatException | FileNotFoundException e) {
System.err.println("Error in Test compareTrack" + e.getMessage());
}
}
@@ -168,8 +169,8 @@ public class TrackTest {
@Test
@DisplayName("Invalid Position Vector used")
void invalidPositionVector() {
- Assertions.assertThrows(PositionVectorNotValid.class, () -> trackObj.willCrashAtPosition(0, new PositionVector(100, 200)));
- Assertions.assertThrows(PositionVectorNotValid.class, () -> trackObj.carDoesCrash(1,new PositionVector(200,100)));
+ Assertions.assertThrows(PositionVectorNotValidException.class, () -> trackObj.willCrashAtPosition(0, new PositionVector(100, 200)));
+ Assertions.assertThrows(PositionVectorNotValidException.class, () -> trackObj.carDoesCrash(1,new PositionVector(200,100)));
}
}