diff --git a/src/main/java/ch/zhaw/pm2/racetrack/Game.java b/src/main/java/ch/zhaw/pm2/racetrack/Game.java index c644e6e..7530831 100644 --- a/src/main/java/ch/zhaw/pm2/racetrack/Game.java +++ b/src/main/java/ch/zhaw/pm2/racetrack/Game.java @@ -293,6 +293,48 @@ 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 + */ + private void calculateWinner(PositionVector start, PositionVector finish, int carIndex) { + List path = calculatePath(start, finish); + for (PositionVector point : path) { + 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; + } + } + } /** diff --git a/src/main/java/ch/zhaw/pm2/racetrack/Track.java b/src/main/java/ch/zhaw/pm2/racetrack/Track.java index a403626..0be8237 100644 --- a/src/main/java/ch/zhaw/pm2/racetrack/Track.java +++ b/src/main/java/ch/zhaw/pm2/racetrack/Track.java @@ -66,8 +66,8 @@ public class Track implements TrackSpecification { private ConfigSpecification.SpaceType finishTyp; /** - * Initialize a Track from the given track file. - * + * Initializes the Track from the given track File including the cars. + * Throws an corresponding error if one of the conditions are not met to build a track. * @param trackFile Reference to a file containing the track data * @throws FileNotFoundException if the given track file could not be found * @throws InvalidTrackFormatException if the track file contains invalid data (no tracklines, ...) @@ -126,7 +126,9 @@ public class Track implements TrackSpecification { //TODO: THIS /** - * @throws InvalidTrackFormatException + * Determines the finish line and saves it in a list, throws an Exception if none is found. + * + * @throws InvalidTrackFormatException thrown if no finish line is found */ private void findFinish() throws InvalidTrackFormatException { for (int i = 0; i < track.size(); i++) { @@ -238,8 +240,8 @@ public class Track implements TrackSpecification { /** * This Method will check if the Car would crash at the specific position * - * @param positionVector the position to check if the car could crash - * @return true if car would crash. Else false. + * @param positionVector the position to check if the car would crash + * @return true if crash otherwise false */ public boolean willCrashAtPosition(int carIndex, PositionVector positionVector) { char charAtPosition = track.get(positionVector.getY()).charAt(positionVector.getX()); @@ -252,10 +254,10 @@ public class Track implements TrackSpecification { } /** - * This Method will make the Car Crash. In Track and in the Car Object + * This Method will mark the Car as crashed inside the track and the car Object. * - * @param carIndex representing current Car - * @param crashPositionVector where the Crash did happen + * @param carIndex of car that will be marked as crashed + * @param crashPositionVector of the location of the crash */ public void carDoesCrash(int carIndex, PositionVector crashPositionVector) { PositionVector currentCarPosition = getCarPos(carIndex); @@ -271,7 +273,7 @@ public class Track implements TrackSpecification { * If the location is outside the track bounds, it is considered a wall. * * @param position The coordinates of the position to examine - * @return The type of track position at the given location + * @return The type of space at the desired position */ @Override public Config.SpaceType getSpaceType(PositionVector position) { @@ -287,9 +289,9 @@ public class Track implements TrackSpecification { } /** - * Return the number of cars. + * Return the number of cars that are located in a track * - * @return Number of cars + * @return number of cars as int */ @Override public int getCarCount() { @@ -363,6 +365,13 @@ public class Track implements TrackSpecification { return currentSpace.getValue(); } + /** + * Determines all points that lie between the two position vectors including the endpoint VectorPosition using the Bresenham algorithm. + * + * @param startPosition PositionVector of the finish coordinate + * @param endPosition PositionVector of the start coordinate + * @return ArrayList containing PositionVectors of all position that are between the start and finish including the finish position. + */ public ArrayList calculatePointsOnPath(PositionVector startPosition, PositionVector endPosition) { ArrayList pathList = new ArrayList<>(); // Use Bresenham's algorithm to determine positions. diff --git a/src/main/java/ch/zhaw/pm2/racetrack/UserInterface.java b/src/main/java/ch/zhaw/pm2/racetrack/UserInterface.java index b6c9e02..3ef450a 100644 --- a/src/main/java/ch/zhaw/pm2/racetrack/UserInterface.java +++ b/src/main/java/ch/zhaw/pm2/racetrack/UserInterface.java @@ -25,7 +25,6 @@ public class UserInterface { public UserInterface(String welcomeText) { textIO = TextIoFactory.getTextIO(); textTerminal = textIO.getTextTerminal(); - textTerminal.println(welcomeText + "\n"); } diff --git a/src/test/java/ch/zhaw/pm2/racetrack/GameTest.java b/src/test/java/ch/zhaw/pm2/racetrack/GameTest.java index 78b580b..2156708 100644 --- a/src/test/java/ch/zhaw/pm2/racetrack/GameTest.java +++ b/src/test/java/ch/zhaw/pm2/racetrack/GameTest.java @@ -187,8 +187,8 @@ class GameTest { private class interFace extends UserInterface { - private final PositionVector.Direction[] directions; - private final Integer[] instructions; + private PositionVector.Direction[] directions; + private Integer[] instructions; private int pointerDir,pointerInstruction;