refactoring done in several classes
This commit is contained in:
		
							parent
							
								
									bc0dd52360
								
							
						
					
					
						commit
						31ec1e9e64
					
				| 
						 | 
				
			
			@ -3,14 +3,12 @@ package ch.zhaw.pm2.racetrack;
 | 
			
		|||
import ch.zhaw.pm2.racetrack.given.CarSpecification;
 | 
			
		||||
import ch.zhaw.pm2.racetrack.strategy.MoveStrategy;
 | 
			
		||||
 | 
			
		||||
import java.util.Vector;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Class representing a car on the racetrack.
 | 
			
		||||
 * Uses {@link PositionVector} to store current position on the track grid and current velocity vector.
 | 
			
		||||
 * Each car has an identifier character which represents the car on the race track board.
 | 
			
		||||
 * Each car has an identifier character which represents the car on the racetrack board.
 | 
			
		||||
 * Also keeps the state, if the car is crashed (not active anymore). The state can not be changed back to uncrashed.
 | 
			
		||||
 * The velocity is changed by providing an acelleration vector.
 | 
			
		||||
 * The velocity is changed by providing an acceleration vector.
 | 
			
		||||
 * The car is able to calculate the endpoint of its next position and on request moves to it.
 | 
			
		||||
 */
 | 
			
		||||
public class Car implements CarSpecification {
 | 
			
		||||
| 
						 | 
				
			
			@ -46,7 +44,8 @@ public class Car implements CarSpecification {
 | 
			
		|||
 | 
			
		||||
    /**
 | 
			
		||||
     * Constructor for class Car
 | 
			
		||||
     * @param id unique Car identification
 | 
			
		||||
     *
 | 
			
		||||
     * @param id       unique Car identification
 | 
			
		||||
     * @param position initial position of the Car
 | 
			
		||||
     */
 | 
			
		||||
    public Car(char id, PositionVector position) {
 | 
			
		||||
| 
						 | 
				
			
			@ -59,16 +58,16 @@ public class Car implements CarSpecification {
 | 
			
		|||
     *
 | 
			
		||||
     * @return id of the car.
 | 
			
		||||
     */
 | 
			
		||||
    public char getID(){
 | 
			
		||||
    public char getID() {
 | 
			
		||||
        return id;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void increaseWinPoints() {
 | 
			
		||||
        winPoints ++;
 | 
			
		||||
        winPoints++;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void deductWinPoints() {
 | 
			
		||||
        winPoints --;
 | 
			
		||||
        winPoints--;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public int getWinPoints() {
 | 
			
		||||
| 
						 | 
				
			
			@ -80,9 +79,10 @@ public class Car implements CarSpecification {
 | 
			
		|||
     *
 | 
			
		||||
     * @return velocity current velocity of the car.
 | 
			
		||||
     */
 | 
			
		||||
    public PositionVector getVelocity(){
 | 
			
		||||
    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.
 | 
			
		||||
| 
						 | 
				
			
			@ -95,8 +95,7 @@ public class Car implements CarSpecification {
 | 
			
		|||
    public void setPosition(final PositionVector position) {
 | 
			
		||||
        if (position.getX() < 0 || position.getY() < 0) {
 | 
			
		||||
            throw new IllegalArgumentException();
 | 
			
		||||
        }
 | 
			
		||||
        else {
 | 
			
		||||
        } else {
 | 
			
		||||
            this.position = position;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -109,7 +108,7 @@ public class Car implements CarSpecification {
 | 
			
		|||
     */
 | 
			
		||||
    @Override
 | 
			
		||||
    public PositionVector nextPosition() {
 | 
			
		||||
        return new PositionVector(position.getX() + velocity.getX(),position.getY() + velocity.getY());
 | 
			
		||||
        return new PositionVector(position.getX() + velocity.getX(), position.getY() + velocity.getY());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
| 
						 | 
				
			
			@ -123,11 +122,10 @@ public class Car implements CarSpecification {
 | 
			
		|||
     */
 | 
			
		||||
    @Override
 | 
			
		||||
    public void accelerate(PositionVector.Direction acceleration) {
 | 
			
		||||
        if(acceleration.vector.getX() < -1 || acceleration.vector.getX() > 1||
 | 
			
		||||
        if (acceleration.vector.getX() < -1 || acceleration.vector.getX() > 1 ||
 | 
			
		||||
            acceleration.vector.getY() < -1 || acceleration.vector.getY() > 1) {
 | 
			
		||||
            throw new IllegalArgumentException();
 | 
			
		||||
        }
 | 
			
		||||
        else {
 | 
			
		||||
        } else {
 | 
			
		||||
            velocity = new PositionVector(velocity.getX() + acceleration.vector.getX(),
 | 
			
		||||
                velocity.getY() + acceleration.vector.getY());
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -161,6 +159,7 @@ public class Car implements CarSpecification {
 | 
			
		|||
 | 
			
		||||
    /**
 | 
			
		||||
     * Set move strategy
 | 
			
		||||
     *
 | 
			
		||||
     * @param moveStrategy Strategy to be implemented
 | 
			
		||||
     */
 | 
			
		||||
    public void setMoveStrategy(MoveStrategy moveStrategy) {
 | 
			
		||||
| 
						 | 
				
			
			@ -169,6 +168,7 @@ public class Car implements CarSpecification {
 | 
			
		|||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get current move strategy
 | 
			
		||||
     *
 | 
			
		||||
     * @return MoveStrategy
 | 
			
		||||
     */
 | 
			
		||||
    public MoveStrategy getMoveStrategy() {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -275,7 +275,6 @@ public class Game implements GameSpecification {
 | 
			
		|||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    private void calculateWinner(PositionVector start, PositionVector finish, int carIndex) {
 | 
			
		||||
        List<PositionVector> path = calculatePath(start, finish);
 | 
			
		||||
        for (PositionVector point : path) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,6 +1,5 @@
 | 
			
		|||
package ch.zhaw.pm2.racetrack;
 | 
			
		||||
 | 
			
		||||
import java.io.FileNotFoundException;
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -17,19 +16,17 @@ public class Main {
 | 
			
		|||
                optionsNewGame.add("exit");
 | 
			
		||||
                optionsNewGame.add("new game");
 | 
			
		||||
                String winnerText;
 | 
			
		||||
                if(winner == null){
 | 
			
		||||
                if (winner == null) {
 | 
			
		||||
                    winnerText = "There was no winner.";
 | 
			
		||||
                }
 | 
			
		||||
                else {
 | 
			
		||||
                } else {
 | 
			
		||||
                    winnerText = "The Winner was Car " + winner;
 | 
			
		||||
                }
 | 
			
		||||
                int selectedOption = userInterface.selectOption(winnerText + "\nStart new Game?", optionsNewGame);
 | 
			
		||||
                if(selectedOption == 0) {
 | 
			
		||||
                if (selectedOption == 0) {
 | 
			
		||||
                    userInterface.quit("Thank you and goodbye\npress enter to close the application.");
 | 
			
		||||
                    break;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            else {
 | 
			
		||||
            } else {
 | 
			
		||||
                userInterface.quit("The initialisation of the game failed. Press enter to close the application.");
 | 
			
		||||
                break;
 | 
			
		||||
            }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -7,8 +7,8 @@ package ch.zhaw.pm2.racetrack;
 | 
			
		|||
 * Created by mach 21.01.2020
 | 
			
		||||
 */
 | 
			
		||||
public final class PositionVector {
 | 
			
		||||
    private int x; // horizontal component (position / velocity)
 | 
			
		||||
    private int y; // vertical component (position / velocity)
 | 
			
		||||
    private final int x; // horizontal component (position / velocity)
 | 
			
		||||
    private final int y; // vertical component (position / velocity)
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Enum representing a direction on the track grid.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,7 +3,10 @@ package ch.zhaw.pm2.racetrack;
 | 
			
		|||
import ch.zhaw.pm2.racetrack.given.ConfigSpecification;
 | 
			
		||||
import ch.zhaw.pm2.racetrack.given.TrackSpecification;
 | 
			
		||||
 | 
			
		||||
import java.io.*;
 | 
			
		||||
import java.io.File;
 | 
			
		||||
import java.io.FileInputStream;
 | 
			
		||||
import java.io.FileNotFoundException;
 | 
			
		||||
import java.nio.charset.StandardCharsets;
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Scanner;
 | 
			
		||||
| 
						 | 
				
			
			@ -57,8 +60,8 @@ import java.util.Scanner;
 | 
			
		|||
public class Track implements TrackSpecification {
 | 
			
		||||
 | 
			
		||||
    public static final char CRASH_INDICATOR = 'X';
 | 
			
		||||
    private List<String> track;
 | 
			
		||||
    private List<Car> cars;
 | 
			
		||||
    private final List<String> track;
 | 
			
		||||
    private final List<Car> cars;
 | 
			
		||||
    private final List<PositionVector> finishLine;
 | 
			
		||||
    private ConfigSpecification.SpaceType finishTyp;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -85,13 +88,17 @@ public class Track implements TrackSpecification {
 | 
			
		|||
     * @throws FileNotFoundException if the FilePath is invalid.
 | 
			
		||||
     */
 | 
			
		||||
    private void readFile(File trackFile) throws FileNotFoundException {
 | 
			
		||||
        Scanner scanner = new Scanner(new FileInputStream(trackFile),"UTF-8");
 | 
			
		||||
        Scanner scanner = new Scanner(new FileInputStream(trackFile), StandardCharsets.UTF_8);
 | 
			
		||||
        while (scanner.hasNextLine()) {
 | 
			
		||||
            track.add(scanner.nextLine());
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Goes through the track ArrayList and determines the locations of each cars and initializes them at the location.
 | 
			
		||||
     *
 | 
			
		||||
     * @throws InvalidTrackFormatException is thrown if a car is found more than once inside the track.
 | 
			
		||||
     */
 | 
			
		||||
    private void addCars() throws InvalidTrackFormatException {
 | 
			
		||||
        ConfigSpecification.SpaceType[] spaceTypes = ConfigSpecification.SpaceType.values();
 | 
			
		||||
        List<Character> allSpaceTypesAsChar = new ArrayList<>();
 | 
			
		||||
| 
						 | 
				
			
			@ -101,23 +108,26 @@ public class Track implements TrackSpecification {
 | 
			
		|||
            allSpaceTypesAsChar.add(spaceType.getValue());
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        for (int j = 0; j < track.size(); j++) {
 | 
			
		||||
            String line = track.get(j);
 | 
			
		||||
            for (int i = 0; i < line.length(); i++) {
 | 
			
		||||
                char possibleCarChar = line.charAt(i);
 | 
			
		||||
        for (int yPosition = 0; yPosition < track.size(); yPosition++) {
 | 
			
		||||
            String line = track.get(yPosition);
 | 
			
		||||
            for (int xPosition = 0; xPosition < line.length(); xPosition++) {
 | 
			
		||||
                char possibleCarChar = line.charAt(xPosition);
 | 
			
		||||
                if (!allSpaceTypesAsChar.contains(possibleCarChar)) {
 | 
			
		||||
                    if (usedSymbolForCar.contains(possibleCarChar)) {
 | 
			
		||||
                        throw new InvalidTrackFormatException();
 | 
			
		||||
                    }
 | 
			
		||||
                    usedSymbolForCar.add(possibleCarChar);
 | 
			
		||||
                    cars.add(new Car(possibleCarChar, new PositionVector(i, j)));
 | 
			
		||||
                    cars.add(new Car(possibleCarChar, new PositionVector(xPosition, yPosition)));
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    //TODO: THIS
 | 
			
		||||
    /**
 | 
			
		||||
     *
 | 
			
		||||
     * @throws InvalidTrackFormatException
 | 
			
		||||
     */
 | 
			
		||||
    private void findFinish() throws InvalidTrackFormatException {
 | 
			
		||||
        for (int i = 0; i < track.size(); i++) {
 | 
			
		||||
            String line = track.get(i);
 | 
			
		||||
| 
						 | 
				
			
			@ -141,6 +151,12 @@ public class Track implements TrackSpecification {
 | 
			
		|||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Method to find the PositionVector of a chosen character
 | 
			
		||||
     *
 | 
			
		||||
     * @param symbol char that we are looking for on the track
 | 
			
		||||
     * @return the PositionVector of the desired char
 | 
			
		||||
     */
 | 
			
		||||
    private PositionVector findChar(char symbol) {
 | 
			
		||||
        PositionVector vector = null;
 | 
			
		||||
        for (int i = 0; i < track.size(); i++) {
 | 
			
		||||
| 
						 | 
				
			
			@ -154,37 +170,47 @@ public class Track implements TrackSpecification {
 | 
			
		|||
        return vector;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 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
 | 
			
		||||
     */
 | 
			
		||||
    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.remove(positionVector.getY());
 | 
			
		||||
        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.
 | 
			
		||||
     */
 | 
			
		||||
    private void isPositionVectorOnTrack(PositionVector positionVector) throws PositionVectorNotValid {
 | 
			
		||||
        try{
 | 
			
		||||
        try {
 | 
			
		||||
            track.get(positionVector.getY()).charAt(positionVector.getX());
 | 
			
		||||
        }catch (IndexOutOfBoundsException e) {
 | 
			
		||||
        } catch (IndexOutOfBoundsException e) {
 | 
			
		||||
            throw new PositionVectorNotValid();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @return all Cars
 | 
			
		||||
     */
 | 
			
		||||
    public List<Car> getCars() {
 | 
			
		||||
        return cars;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @return finishLine
 | 
			
		||||
     * Method that returns the finishline as a List
 | 
			
		||||
     *
 | 
			
		||||
     * @return finishLine List
 | 
			
		||||
     */
 | 
			
		||||
    public List<PositionVector> getFinishLine() {
 | 
			
		||||
        return finishLine;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @return the track
 | 
			
		||||
     * Returns the whole Track as List of Strings
 | 
			
		||||
     *
 | 
			
		||||
     * @return track as List of Strings
 | 
			
		||||
     */
 | 
			
		||||
    public List<String> getTrack() {
 | 
			
		||||
        return track;
 | 
			
		||||
| 
						 | 
				
			
			@ -203,7 +229,7 @@ public class Track implements TrackSpecification {
 | 
			
		|||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * This class does change the Position of the car only in the track.
 | 
			
		||||
     * This Method does change the Position of the car inside the track object.
 | 
			
		||||
     *
 | 
			
		||||
     * @param carIndex of the current car
 | 
			
		||||
     */
 | 
			
		||||
| 
						 | 
				
			
			@ -213,8 +239,8 @@ public class Track implements TrackSpecification {
 | 
			
		|||
        drawCharOnTrackIndicator(carPositionVector, ConfigSpecification.SpaceType.TRACK.getValue());
 | 
			
		||||
 | 
			
		||||
        //Redraw finishline if Car was on finish-line Position
 | 
			
		||||
        for(PositionVector finishLinePositionVector : finishLine){
 | 
			
		||||
            if(finishLinePositionVector.equals(carPositionVector)){
 | 
			
		||||
        for (PositionVector finishLinePositionVector : finishLine) {
 | 
			
		||||
            if (finishLinePositionVector.equals(carPositionVector)) {
 | 
			
		||||
                drawCharOnTrackIndicator(carPositionVector, finishTyp.getValue());
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -225,10 +251,10 @@ public class Track implements TrackSpecification {
 | 
			
		|||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * This Method will check if the Car could crash at the specific position
 | 
			
		||||
     * 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) throws PositionVectorNotValid {
 | 
			
		||||
        isPositionVectorOnTrack(positionVector); //TODO: remove this line? Or Method?
 | 
			
		||||
| 
						 | 
				
			
			@ -242,12 +268,12 @@ 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) throws PositionVectorNotValid{
 | 
			
		||||
    public void carDoesCrash(int carIndex, PositionVector crashPositionVector) throws PositionVectorNotValid {
 | 
			
		||||
        isPositionVectorOnTrack(crashPositionVector); //TODO: remove this line? and Method?
 | 
			
		||||
        PositionVector currentCarPosition = getCarPos(carIndex);
 | 
			
		||||
        drawCharOnTrackIndicator(new PositionVector(currentCarPosition.getX(), currentCarPosition.getY()), ConfigSpecification.SpaceType.TRACK.getValue());
 | 
			
		||||
| 
						 | 
				
			
			@ -262,7 +288,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) {
 | 
			
		||||
| 
						 | 
				
			
			@ -279,9 +305,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() {
 | 
			
		||||
| 
						 | 
				
			
			@ -355,6 +381,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<PositionVector> calculatePointsOnPath(PositionVector startPosition, PositionVector endPosition) {
 | 
			
		||||
        ArrayList<PositionVector> pathList = new ArrayList<>();
 | 
			
		||||
        // Use Bresenham's algorithm to determine positions.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -6,13 +6,20 @@ import org.beryx.textio.TextTerminal;
 | 
			
		|||
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Class representing the Userinterface.
 | 
			
		||||
 * Used to get inputs from users via textio.
 | 
			
		||||
 *
 | 
			
		||||
 * @author Roman Schenk
 | 
			
		||||
 */
 | 
			
		||||
public class UserInterface {
 | 
			
		||||
 | 
			
		||||
    private final TextIO textIO;
 | 
			
		||||
    private final TextTerminal<?> textTerminal;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Opens a new Terminal Window and prints the welcome Text
 | 
			
		||||
     * Opens a new Terminal Window and prints the welcome Text.
 | 
			
		||||
     *
 | 
			
		||||
     * @param welcomeText The Text which will be printed after the windows is opened.
 | 
			
		||||
     */
 | 
			
		||||
    public UserInterface(String welcomeText) {
 | 
			
		||||
| 
						 | 
				
			
			@ -24,6 +31,7 @@ public class UserInterface {
 | 
			
		|||
 | 
			
		||||
    /**
 | 
			
		||||
     * Prints the given Text in textTerminal
 | 
			
		||||
     *
 | 
			
		||||
     * @param text The Text which should be printed.
 | 
			
		||||
     */
 | 
			
		||||
    public void printInformation(String text) {
 | 
			
		||||
| 
						 | 
				
			
			@ -31,23 +39,25 @@ public class UserInterface {
 | 
			
		|||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * asks the user to choose one of the options given.
 | 
			
		||||
     * @param text Text which is printed befor the options are printed. Example: "Select Track file:"
 | 
			
		||||
     * Method which asks the user to choose one of the options given.
 | 
			
		||||
     *
 | 
			
		||||
     * @param text    Text which is printed before the options are printed. Example: "Select Track file:"
 | 
			
		||||
     * @param options List with the options which can be selected.
 | 
			
		||||
     * @return the list index of the selected option
 | 
			
		||||
     */
 | 
			
		||||
    public int selectOption(String text, List<String> options) {
 | 
			
		||||
        textTerminal.println(text + ":");
 | 
			
		||||
        for(int option = 0; option < options.size(); option ++) {
 | 
			
		||||
            textTerminal.println(" " + (option + 1) +  ": " + options.get(option));
 | 
			
		||||
        for (int option = 0; option < options.size(); option++) {
 | 
			
		||||
            textTerminal.println(" " + (option + 1) + ": " + options.get(option));
 | 
			
		||||
        }
 | 
			
		||||
        return textIO.newIntInputReader().withMinVal(1).withMaxVal(options.size()).read("Enter your choice: ") - 1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * gives information which player's turn it is and asks for the direction to accelerate
 | 
			
		||||
     * Gives information which player is at turn and asks for the direction to accelerate or quit the game.
 | 
			
		||||
     *
 | 
			
		||||
     * @param playingCarIndex the index of the player
 | 
			
		||||
     * @param playingCarID the ID of the player
 | 
			
		||||
     * @param playingCarID    the ID of the player
 | 
			
		||||
     * @return the direction which is selected by the player. If null -> quit game
 | 
			
		||||
     */
 | 
			
		||||
    public PositionVector.Direction selectDirection(int playingCarIndex, char playingCarID) {
 | 
			
		||||
| 
						 | 
				
			
			@ -70,7 +80,8 @@ public class UserInterface {
 | 
			
		|||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * returns the the associated direction Object
 | 
			
		||||
     * Method which returns the associated direction Object.
 | 
			
		||||
     *
 | 
			
		||||
     * @param number the number which was typed by the user
 | 
			
		||||
     * @return the associated direction. If null -> unknown number
 | 
			
		||||
     */
 | 
			
		||||
| 
						 | 
				
			
			@ -90,22 +101,21 @@ public class UserInterface {
 | 
			
		|||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * prints the given Track in the terminal
 | 
			
		||||
     * Method to print the given Track in the terminal
 | 
			
		||||
     *
 | 
			
		||||
     * @param track the track which should be printed
 | 
			
		||||
     */
 | 
			
		||||
    public void printTrack(Track track) {
 | 
			
		||||
            textTerminal.println(track.toString());
 | 
			
		||||
        textTerminal.println(track.toString());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Method to dispose the Textterminal
 | 
			
		||||
     * @param text OUtput Text
 | 
			
		||||
     * Method to dispose of the Textterminal
 | 
			
		||||
     *
 | 
			
		||||
     * @param text Output Text
 | 
			
		||||
     */
 | 
			
		||||
    public void quit(String text){
 | 
			
		||||
    public void quit(String text) {
 | 
			
		||||
        textIO.newStringInputReader().withMinLength(0).read(text);
 | 
			
		||||
        textTerminal.dispose();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5,13 +5,14 @@ import ch.zhaw.pm2.racetrack.PositionVector.Direction;
 | 
			
		|||
import java.io.File;
 | 
			
		||||
import java.io.FileInputStream;
 | 
			
		||||
import java.io.FileNotFoundException;
 | 
			
		||||
import java.nio.charset.StandardCharsets;
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Scanner;
 | 
			
		||||
 | 
			
		||||
public class MoveListStrategy implements MoveStrategy {
 | 
			
		||||
 | 
			
		||||
    private List<Direction> moveList;
 | 
			
		||||
    private final List<Direction> moveList;
 | 
			
		||||
    private int pointer;
 | 
			
		||||
 | 
			
		||||
    public MoveListStrategy(String path) throws FileNotFoundException{
 | 
			
		||||
| 
						 | 
				
			
			@ -21,7 +22,7 @@ public class MoveListStrategy implements MoveStrategy {
 | 
			
		|||
    }
 | 
			
		||||
 | 
			
		||||
    private void readFile(File trackFile) throws FileNotFoundException {
 | 
			
		||||
        Scanner scanner = new Scanner(new FileInputStream(trackFile), "UTF-8");
 | 
			
		||||
        Scanner scanner = new Scanner(new FileInputStream(trackFile), StandardCharsets.UTF_8);
 | 
			
		||||
        Direction[] directions = Direction.values();
 | 
			
		||||
        while (scanner.hasNextLine()) {
 | 
			
		||||
            String line = scanner.nextLine();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -6,6 +6,7 @@ import ch.zhaw.pm2.racetrack.PositionVector.Direction;
 | 
			
		|||
import java.io.File;
 | 
			
		||||
import java.io.FileInputStream;
 | 
			
		||||
import java.io.FileNotFoundException;
 | 
			
		||||
import java.nio.charset.StandardCharsets;
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.Scanner;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -25,7 +26,7 @@ public class PathFollowerMoveStrategy implements MoveStrategy {
 | 
			
		|||
    /**
 | 
			
		||||
     * List of all points on the path.
 | 
			
		||||
     */
 | 
			
		||||
    private ArrayList<PositionVector> pointList;
 | 
			
		||||
    private final ArrayList<PositionVector> pointList;
 | 
			
		||||
    /**
 | 
			
		||||
     * The index of the next point on the path.
 | 
			
		||||
     */
 | 
			
		||||
| 
						 | 
				
			
			@ -51,7 +52,7 @@ public class PathFollowerMoveStrategy implements MoveStrategy {
 | 
			
		|||
     * @throws FileNotFoundException If the file with the given path does not exist.
 | 
			
		||||
     */
 | 
			
		||||
    public void readFile(File trackFile) throws FileNotFoundException {
 | 
			
		||||
        Scanner scanner = new Scanner(new FileInputStream(trackFile), "UTF-8");
 | 
			
		||||
        Scanner scanner = new Scanner(new FileInputStream(trackFile), StandardCharsets.UTF_8);
 | 
			
		||||
        while (scanner.hasNextLine()) {
 | 
			
		||||
            String line = scanner.nextLine();
 | 
			
		||||
            String[] coordinates = line.split("(\\(X:|, Y:|\\))");
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -7,9 +7,9 @@ import ch.zhaw.pm2.racetrack.UserInterface;
 | 
			
		|||
 * Let the user decide the next move.
 | 
			
		||||
 */
 | 
			
		||||
public class UserMoveStrategy implements MoveStrategy {
 | 
			
		||||
    private UserInterface userInterface;
 | 
			
		||||
    private int carIndex;
 | 
			
		||||
    private char carID;
 | 
			
		||||
    private final UserInterface userInterface;
 | 
			
		||||
    private final int carIndex;
 | 
			
		||||
    private final char carID;
 | 
			
		||||
 | 
			
		||||
    public UserMoveStrategy(UserInterface userInterface, int carIndex, char carID) {
 | 
			
		||||
        this.userInterface = userInterface;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -101,7 +101,7 @@ class CarTest {
 | 
			
		|||
    @Test
 | 
			
		||||
    void movement() {
 | 
			
		||||
        // add all possible directions in a List
 | 
			
		||||
        List<PositionVector.Direction> directions = Arrays.asList(PositionVector.Direction.values());
 | 
			
		||||
        PositionVector.Direction[] directions = PositionVector.Direction.values();
 | 
			
		||||
 | 
			
		||||
        //position shouldn't be changed because velocity should be 0.
 | 
			
		||||
        car.move();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -20,9 +20,9 @@ class GameTest {
 | 
			
		|||
    private Game game;
 | 
			
		||||
    private Track track;
 | 
			
		||||
 | 
			
		||||
    private String TRACK_FILE_PATH = ".\\tracks\\challenge.txt";
 | 
			
		||||
    private int CAR_INDEX_ONE = 0;
 | 
			
		||||
    private int CAR_INDEX_TWO = 1;
 | 
			
		||||
    private final String TRACK_FILE_PATH = ".\\tracks\\challenge.txt";
 | 
			
		||||
    private final int CAR_INDEX_ONE = 0;
 | 
			
		||||
    private final int CAR_INDEX_TWO = 1;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * This nested Class tests if the game gets initiatet correctly
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue