Move list feature #26
			
				
			
		
		
		
	| 
						 | 
				
			
			@ -49,15 +49,15 @@ public class Game implements GameSpecification {
 | 
			
		|||
            for (int i = 0; i < track.getCarCount(); i++) {
 | 
			
		||||
                int moveStrategie = userInterface.selectOption(
 | 
			
		||||
                    "Select Strategy for Car " + i + " (" + track.getCarId(i) + ")", moveStrategies);
 | 
			
		||||
                switch (moveStrategie + 1) { //TODO: set Movestrategy with method in Track
 | 
			
		||||
                switch (moveStrategie + 1) {
 | 
			
		||||
                    case 1:
 | 
			
		||||
                        track.getCar(i).setMoveStrategy(new DoNotMoveStrategy()); //TODO: add Arguments
 | 
			
		||||
                        track.getCar(i).setMoveStrategy(new DoNotMoveStrategy());
 | 
			
		||||
                        break;
 | 
			
		||||
                    case 2:
 | 
			
		||||
                        track.getCar(i).setMoveStrategy(new UserMoveStrategy(userInterface, i, track.getCarId(i))); //TODO: add Arguments
 | 
			
		||||
                        track.getCar(i).setMoveStrategy(new UserMoveStrategy(userInterface, i, track.getCarId(i)));
 | 
			
		||||
                        break;
 | 
			
		||||
                    case 3:
 | 
			
		||||
                        String path = ".\\moves\\ " + selectedTrack.getName().split(".")[0] + "-car-" + track.getCar(i).getID() + ".txt";
 | 
			
		||||
                        String path = ".\\moves\\ " + selectedTrack.getName().split("\\.")[0] + "-car-" + track.getCar(i).getID() + ".txt";
 | 
			
		||||
                        try {
 | 
			
		||||
                            MoveStrategy moveStrategy = new MoveListStrategy(path);
 | 
			
		||||
                            track.getCar(i).setMoveStrategy(moveStrategy);
 | 
			
		||||
| 
						 | 
				
			
			@ -113,7 +113,6 @@ public class Game implements GameSpecification {
 | 
			
		|||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the velocity of the specified car.
 | 
			
		||||
     *
 | 
			
		||||
     * @param carIndex The zero-based carIndex number
 | 
			
		||||
     * @return A PositionVector containing the car's current velocity
 | 
			
		||||
     */
 | 
			
		||||
| 
						 | 
				
			
			@ -129,10 +128,12 @@ public class Game implements GameSpecification {
 | 
			
		|||
     */
 | 
			
		||||
    @Override
 | 
			
		||||
    public int getWinner() {
 | 
			
		||||
        List<Car> cars = track.getCars();
 | 
			
		||||
        for (Car car : cars) {
 | 
			
		||||
            if (car.getWinPoints() == 1) {
 | 
			
		||||
                return car.getID();
 | 
			
		||||
        if (onlyOneCarLeft()) {
 | 
			
		||||
            return currentCarIndex;
 | 
			
		||||
        }
 | 
			
		||||
        for (int i = 0; i < track.getCarCount(); i++) {
 | 
			
		||||
            if (track.getCar(i).getWinPoints() == 1) {
 | 
			
		||||
                return i;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        return NO_WINNER;
 | 
			
		||||
| 
						 | 
				
			
			@ -166,35 +167,40 @@ public class Game implements GameSpecification {
 | 
			
		|||
     */
 | 
			
		||||
    @Override
 | 
			
		||||
    public void doCarTurn(Direction acceleration) throws PositionVectorNotValid {
 | 
			
		||||
        // TODO: implementation
 | 
			
		||||
        track.getCar(currentCarIndex).accelerate(acceleration);
 | 
			
		||||
 | 
			
		||||
        PositionVector crashPosition = null;
 | 
			
		||||
        List<PositionVector> positionList = calculatePath(track.getCarPos(currentCarIndex), track.getCar(currentCarIndex).nextPosition());
 | 
			
		||||
        //TODO: check if Method calculatePath contains endposition
 | 
			
		||||
        for (PositionVector location : positionList) { //todo: check if order must be reversed
 | 
			
		||||
            if (willCarCrash(currentCarIndex, location)) {
 | 
			
		||||
                crashPosition = location;
 | 
			
		||||
        for (int i = 0; i < positionList.size(); i++) {
 | 
			
		||||
            if (willCarCrash(currentCarIndex, positionList.get(i))) {
 | 
			
		||||
                if (i == 0) {
 | 
			
		||||
                    crashPosition = track.getCarPos(currentCarIndex);
 | 
			
		||||
                } else {
 | 
			
		||||
                    crashPosition = positionList.get(i - 1);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        if (crashPosition != null) {
 | 
			
		||||
            track.carDoesCrash(currentCarIndex, crashPosition);
 | 
			
		||||
        } else {
 | 
			
		||||
            track.moveCar(currentCarIndex);
 | 
			
		||||
            calculateWinner(track.getCarPos(currentCarIndex), track.getCar(currentCarIndex).nextPosition(), currentCarIndex);
 | 
			
		||||
            track.moveCar(currentCarIndex);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public int gamePhase() throws PositionVectorNotValid {
 | 
			
		||||
        while (getWinner() == NO_WINNER) {
 | 
			
		||||
        while (CarsMoving() && getWinner() == NO_WINNER) {
 | 
			
		||||
            userInterface.printTrack(track);
 | 
			
		||||
            Direction direction = track.getCar(currentCarIndex).getMoveStrategy().nextMove();
 | 
			
		||||
            doCarTurn(direction);
 | 
			
		||||
            if (allCarsCrashed()) {
 | 
			
		||||
                return NO_WINNER;
 | 
			
		||||
            Direction direction = null;
 | 
			
		||||
            direction= track.getCar(currentCarIndex).getMoveStrategy().nextMove();
 | 
			
		||||
            if(direction == null) {
 | 
			
		||||
                track.getCar(currentCarIndex).setMoveStrategy(new DoNotMoveStrategy());
 | 
			
		||||
                direction= track.getCar(currentCarIndex).getMoveStrategy().nextMove();
 | 
			
		||||
            }
 | 
			
		||||
            doCarTurn(direction);
 | 
			
		||||
            switchToNextActiveCar();
 | 
			
		||||
        }
 | 
			
		||||
        userInterface.printTrack(track);
 | 
			
		||||
        return getWinner();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -289,44 +295,46 @@ public class Game implements GameSpecification {
 | 
			
		|||
    private void calculateWinner(PositionVector start, PositionVector finish, int carIndex) {
 | 
			
		||||
        List<PositionVector> 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();
 | 
			
		||||
            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;
 | 
			
		||||
                    }
 | 
			
		||||
                    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;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
                }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 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
 | 
			
		||||
     * @param position A PositionVector of the possible crash position
 | 
			
		||||
     * @return A boolean indicator if the car would crash with a WALL or another car.
 | 
			
		||||
| 
						 | 
				
			
			@ -336,12 +344,22 @@ public class Game implements GameSpecification {
 | 
			
		|||
        return track.willCrashAtPosition(carIndex, position);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean allCarsCrashed() {
 | 
			
		||||
        for (int carIndex = 0; carIndex < track.getCarCount(); carIndex++) {
 | 
			
		||||
            if (!track.getCar(carIndex).isCrashed()) {
 | 
			
		||||
                return false;
 | 
			
		||||
    public boolean onlyOneCarLeft() {
 | 
			
		||||
        int carsLeft = 0;
 | 
			
		||||
        for(int carIndex = 0; carIndex < track.getCarCount(); carIndex ++) {
 | 
			
		||||
            if(! track.getCar(carIndex).isCrashed()) {
 | 
			
		||||
                carsLeft++;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        return true;
 | 
			
		||||
        return !(carsLeft > 1);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean CarsMoving() {
 | 
			
		||||
        for(int carIndex = 0; carIndex < track.getCarCount(); carIndex ++) {
 | 
			
		||||
            if(! (track.getCar(carIndex).isCrashed() || track.getCar(carIndex).getMoveStrategy().getClass() == DoNotMoveStrategy.class)) {
 | 
			
		||||
                return true;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,8 +8,8 @@ public class Main {
 | 
			
		|||
 | 
			
		||||
    public static void main(String[] args) throws InvalidTrackFormatException, FileNotFoundException, PositionVectorNotValid {
 | 
			
		||||
        boolean exit = false;
 | 
			
		||||
        UserInterface userInterface = new UserInterface("Hello and Welcome");
 | 
			
		||||
        while (!exit) {
 | 
			
		||||
            UserInterface userInterface = new UserInterface("Hello and Welcome");
 | 
			
		||||
            Game game = new Game(userInterface);
 | 
			
		||||
            int winner = 0;
 | 
			
		||||
            if (game.initPhase()) {
 | 
			
		||||
| 
						 | 
				
			
			@ -23,6 +23,7 @@ public class Main {
 | 
			
		|||
                exit = true;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        userInterface.printInformation("Thank you and goodbye");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -225,7 +225,11 @@ public class Track implements TrackSpecification {
 | 
			
		|||
        isPositionVectorOnTrack(positionVector);
 | 
			
		||||
        char charAtPosition = track.get(positionVector.getY()).charAt(positionVector.getX());
 | 
			
		||||
        if (getCarId(carIndex) == charAtPosition) return false;
 | 
			
		||||
        return (charAtPosition == ConfigSpecification.SpaceType.WALL.value);
 | 
			
		||||
        return !(charAtPosition == ConfigSpecification.SpaceType.TRACK.value ||
 | 
			
		||||
            charAtPosition == ConfigSpecification.SpaceType.FINISH_RIGHT.value ||
 | 
			
		||||
            charAtPosition == ConfigSpecification.SpaceType.FINISH_LEFT.value ||
 | 
			
		||||
            charAtPosition == ConfigSpecification.SpaceType.FINISH_UP.value ||
 | 
			
		||||
            charAtPosition == ConfigSpecification.SpaceType.FINISH_DOWN.value);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue