Strategy #31
			
				
			
		
		
		
	| 
						 | 
					@ -224,10 +224,10 @@ public class Game implements GameSpecification {
 | 
				
			||||||
        if (crashPosition != null) {
 | 
					        if (crashPosition != null) {
 | 
				
			||||||
            track.carDoesCrash(currentCarIndex, crashPosition);
 | 
					            track.carDoesCrash(currentCarIndex, crashPosition);
 | 
				
			||||||
        } else {
 | 
					        } else {
 | 
				
			||||||
            int newWinPoints = calculateNewWinPoints(track.getCarPos(currentCarIndex), track.getCar(currentCarIndex).nextPosition());
 | 
					            int newWinPoints = track.calculateNewWinPoints(track.getCarPos(currentCarIndex), track.getCar(currentCarIndex).nextPosition());
 | 
				
			||||||
            if(newWinPoints == 1){
 | 
					            if(newWinPoints == 1){
 | 
				
			||||||
               track.getCar(currentCarIndex).increaseWinPoints();
 | 
					               track.getCar(currentCarIndex).increaseWinPoints();
 | 
				
			||||||
            }else{
 | 
					            }else if(newWinPoints == 1){
 | 
				
			||||||
                track.getCar(currentCarIndex).deductWinPoints();
 | 
					                track.getCar(currentCarIndex).deductWinPoints();
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            track.moveCar(currentCarIndex);
 | 
					            track.moveCar(currentCarIndex);
 | 
				
			||||||
| 
						 | 
					@ -293,55 +293,6 @@ 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 int calculateNewWinPoints(PositionVector start, PositionVector finish) {
 | 
					 | 
				
			||||||
        List<PositionVector> 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()) {
 | 
					 | 
				
			||||||
                            return 1;
 | 
					 | 
				
			||||||
                        } else if (start.getY() > finish.getY()) {
 | 
					 | 
				
			||||||
                            return -1;
 | 
					 | 
				
			||||||
                        }
 | 
					 | 
				
			||||||
                        break;
 | 
					 | 
				
			||||||
                    case FINISH_DOWN:
 | 
					 | 
				
			||||||
                        if (start.getY() > finish.getY()) {
 | 
					 | 
				
			||||||
                            return 1;
 | 
					 | 
				
			||||||
                        } else if (start.getY() < finish.getY()) {
 | 
					 | 
				
			||||||
                            return -1;
 | 
					 | 
				
			||||||
                        }
 | 
					 | 
				
			||||||
                        break;
 | 
					 | 
				
			||||||
                    case FINISH_RIGHT:
 | 
					 | 
				
			||||||
                        if (start.getX() < finish.getX()) {
 | 
					 | 
				
			||||||
                            return 1;
 | 
					 | 
				
			||||||
                        } else if (start.getX() > finish.getX()) {
 | 
					 | 
				
			||||||
                            return -1;
 | 
					 | 
				
			||||||
                        }
 | 
					 | 
				
			||||||
                        break;
 | 
					 | 
				
			||||||
                    case FINISH_LEFT:
 | 
					 | 
				
			||||||
                        if (start.getX() > finish.getX()) {
 | 
					 | 
				
			||||||
                            return 1;
 | 
					 | 
				
			||||||
                        } else if (start.getX() < finish.getX()) {
 | 
					 | 
				
			||||||
                            return -1;
 | 
					 | 
				
			||||||
                        }
 | 
					 | 
				
			||||||
                        break;
 | 
					 | 
				
			||||||
                    default:
 | 
					 | 
				
			||||||
                        return 0;
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        return 0;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -423,10 +423,17 @@ public class Track implements TrackSpecification {
 | 
				
			||||||
        return pathList;
 | 
					        return pathList;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 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
 | 
				
			||||||
 | 
					     * @return Number of new Winpoints for the current player.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    public int calculateNewWinPoints(PositionVector start, PositionVector finish) {
 | 
					    public int calculateNewWinPoints(PositionVector start, PositionVector finish) {
 | 
				
			||||||
        List<PositionVector> path = calculatePointsOnPath(start, finish);
 | 
					        List<PositionVector> path = calculatePointsOnPath(start, finish);
 | 
				
			||||||
        for (PositionVector point : path) {
 | 
					        for (PositionVector point : path) {
 | 
				
			||||||
            if (getSpaceType(point) != null) {
 | 
					 | 
				
			||||||
            switch (getSpaceType(point)) {
 | 
					            switch (getSpaceType(point)) {
 | 
				
			||||||
                case FINISH_UP:
 | 
					                case FINISH_UP:
 | 
				
			||||||
                    if (start.getY() < finish.getY()) {
 | 
					                    if (start.getY() < finish.getY()) {
 | 
				
			||||||
| 
						 | 
					@ -456,11 +463,9 @@ public class Track implements TrackSpecification {
 | 
				
			||||||
                        return -1;
 | 
					                        return -1;
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    break;
 | 
					                    break;
 | 
				
			||||||
                    default:
 | 
					 | 
				
			||||||
                        return 0;
 | 
					 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            }
 | 
					
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        return 0;
 | 
					        return 0;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -18,6 +18,7 @@ public class PathFinderMoveStrategy implements MoveStrategy{
 | 
				
			||||||
        this.carIndex = carIndex;
 | 
					        this.carIndex = carIndex;
 | 
				
			||||||
        allDirections = Arrays.asList(PositionVector.Direction.values());
 | 
					        allDirections = Arrays.asList(PositionVector.Direction.values());
 | 
				
			||||||
        createMoveList();
 | 
					        createMoveList();
 | 
				
			||||||
 | 
					        pointer = -1;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -32,7 +33,6 @@ public class PathFinderMoveStrategy implements MoveStrategy{
 | 
				
			||||||
            for(PossibleMove previousMove : possibleMoves){
 | 
					            for(PossibleMove previousMove : possibleMoves){
 | 
				
			||||||
                for(PositionVector.Direction direction : allDirections){
 | 
					                for(PositionVector.Direction direction : allDirections){
 | 
				
			||||||
                    PossibleMove newMove = new PossibleMove(previousMove, direction);
 | 
					                    PossibleMove newMove = new PossibleMove(previousMove, direction);
 | 
				
			||||||
 | 
					 | 
				
			||||||
                        if(! (newMove.crashed() || newMove.drivingLoop())){
 | 
					                        if(! (newMove.crashed() || newMove.drivingLoop())){
 | 
				
			||||||
                            newMoves.add(newMove);
 | 
					                            newMoves.add(newMove);
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
| 
						 | 
					@ -44,8 +44,6 @@ public class PathFinderMoveStrategy implements MoveStrategy{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        moveList = finishedMove.directions;
 | 
					        moveList = finishedMove.directions;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        pointer = moveList.size();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -92,7 +90,7 @@ public class PathFinderMoveStrategy implements MoveStrategy{
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public boolean crashed() {
 | 
					        public boolean crashed() {
 | 
				
			||||||
                for(PositionVector point : track.calculatePointsOnPath(positions.get(positions.size()-1), positions.get(positions.size()-2))) {
 | 
					                for(PositionVector point : track.calculatePointsOnPath(positions.get(positions.size()-2), positions.get(positions.size()-1))) {
 | 
				
			||||||
                    if (track.willCrashAtPosition(carIndex, point)) {
 | 
					                    if (track.willCrashAtPosition(carIndex, point)) {
 | 
				
			||||||
                        return true;
 | 
					                        return true;
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
| 
						 | 
					@ -115,9 +113,8 @@ public class PathFinderMoveStrategy implements MoveStrategy{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public PositionVector.Direction nextMove() {
 | 
					    public PositionVector.Direction nextMove() {
 | 
				
			||||||
        pointer -= 1;
 | 
					        pointer += 1;
 | 
				
			||||||
        //TODO: Check if crash. if yes --> createMoveList();
 | 
					        if (pointer < moveList.size()) {
 | 
				
			||||||
        if (pointer >= 0) {
 | 
					 | 
				
			||||||
            return moveList.get(pointer);
 | 
					            return moveList.get(pointer);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        return null;
 | 
					        return null;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue