Track feature #21
			
				
			
		
		
		
	| 
						 | 
					@ -48,6 +48,14 @@ public class Car implements CarSpecification {
 | 
				
			||||||
        setPosition(position);
 | 
					        setPosition(position);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public char getId() {
 | 
				
			||||||
 | 
					        return id;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public PositionVector getVelocity() {
 | 
				
			||||||
 | 
					        return velocity;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Set this Car position directly, regardless of current position and 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.
 | 
					     * This should only be used by the game controller in rare cases to set the crash or winning position.
 | 
				
			||||||
| 
						 | 
					@ -58,7 +66,7 @@ public class Car implements CarSpecification {
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public void setPosition(final PositionVector position) {
 | 
					    public void setPosition(final PositionVector position) {
 | 
				
			||||||
        // TODO: implementation
 | 
					        // TODO: implementation
 | 
				
			||||||
        throw new UnsupportedOperationException();
 | 
					        this.position = position;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -127,6 +127,8 @@ public class Game implements GameSpecification {
 | 
				
			||||||
        throw new UnsupportedOperationException();
 | 
					        throw new UnsupportedOperationException();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Does indicate if a car would have a crash with a WALL space or another car at the given position.
 | 
					     * 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 carIndex The zero-based carIndex number
 | 
				
			||||||
| 
						 | 
					@ -135,7 +137,8 @@ public class Game implements GameSpecification {
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public boolean willCarCrash(int carIndex, PositionVector position) {
 | 
					    public boolean willCarCrash(int carIndex, PositionVector position) {
 | 
				
			||||||
        // TODO: implementation
 | 
					
 | 
				
			||||||
        throw new UnsupportedOperationException();
 | 
					
 | 
				
			||||||
 | 
					        return true;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -73,13 +73,12 @@ public class Track implements TrackSpecification {
 | 
				
			||||||
     * @throws InvalidTrackFormatException if the track file contains invalid data (no tracklines, ...)
 | 
					     * @throws InvalidTrackFormatException if the track file contains invalid data (no tracklines, ...)
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public Track(File trackFile) throws FileNotFoundException, InvalidTrackFormatException {
 | 
					    public Track(File trackFile) throws FileNotFoundException, InvalidTrackFormatException {
 | 
				
			||||||
        // TODO:
 | 
					 | 
				
			||||||
        track = new ArrayList<>();
 | 
					        track = new ArrayList<>();
 | 
				
			||||||
        cars = new ArrayList<>();
 | 
					        cars = new ArrayList<>();
 | 
				
			||||||
        finishLine = new ArrayList<>();
 | 
					        finishLine = new ArrayList<>();
 | 
				
			||||||
        readFile(trackFile);
 | 
					        readFile(trackFile);
 | 
				
			||||||
        findFinish();
 | 
					        findFinish();
 | 
				
			||||||
        addCar();
 | 
					        addCars();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
| 
						 | 
					@ -95,8 +94,8 @@ public class Track implements TrackSpecification {
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    //TODO: MAKE PRIVATE
 | 
					
 | 
				
			||||||
    public void addCar() throws InvalidTrackFormatException {
 | 
					    private void addCars() throws InvalidTrackFormatException {
 | 
				
			||||||
        ConfigSpecification.SpaceType[] spaceTypes = ConfigSpecification.SpaceType.values();
 | 
					        ConfigSpecification.SpaceType[] spaceTypes = ConfigSpecification.SpaceType.values();
 | 
				
			||||||
        List<Character> allSpaceTypesAsChar = new ArrayList<>();
 | 
					        List<Character> allSpaceTypesAsChar = new ArrayList<>();
 | 
				
			||||||
        List<Character> usedSymbolForCar = new ArrayList<>();
 | 
					        List<Character> usedSymbolForCar = new ArrayList<>();
 | 
				
			||||||
| 
						 | 
					@ -159,7 +158,6 @@ public class Track implements TrackSpecification {
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     *
 | 
					 | 
				
			||||||
     * @return all Cars
 | 
					     * @return all Cars
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public List<Car> getCars() {
 | 
					    public List<Car> getCars() {
 | 
				
			||||||
| 
						 | 
					@ -167,7 +165,6 @@ public class Track implements TrackSpecification {
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     *
 | 
					 | 
				
			||||||
     * @return finishLine
 | 
					     * @return finishLine
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public List<PositionVector> getFinishLine() {
 | 
					    public List<PositionVector> getFinishLine() {
 | 
				
			||||||
| 
						 | 
					@ -181,6 +178,32 @@ public class Track implements TrackSpecification {
 | 
				
			||||||
        return track;
 | 
					        return track;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * This Method will update the Car on the track
 | 
				
			||||||
 | 
					     * and will make the Car move to the next position
 | 
				
			||||||
 | 
					     * @param carIndex representing the current Car
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public void moveCar(int carIndex) {
 | 
				
			||||||
 | 
					        PositionVector positionVector = findChar(getCarId(carIndex));
 | 
				
			||||||
 | 
					        //Removes the Car at Current Pos
 | 
				
			||||||
 | 
					        String line = track.get(positionVector.getY());
 | 
				
			||||||
 | 
					        line = line.substring(0,positionVector.getX()) + ConfigSpecification.SpaceType.TRACK.getValue() + line.substring(positionVector.getX()+1);
 | 
				
			||||||
 | 
					        track.add(positionVector.getY(),line);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        //Adds Car at new Position
 | 
				
			||||||
 | 
					        positionVector = cars.get(carIndex).nextPosition();
 | 
				
			||||||
 | 
					        line = track.get(positionVector.getY());
 | 
				
			||||||
 | 
					        line = line.substring(0,positionVector.getX()) + cars.get(carIndex).getId() + line.substring(positionVector.getX()+1);
 | 
				
			||||||
 | 
					        track.add(positionVector.getY(),line);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        //Change position of car
 | 
				
			||||||
 | 
					        getCar(carIndex).move();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public char getRealCharAtPosition(PositionVector positionVector) {
 | 
				
			||||||
 | 
					        return track.get(positionVector.getY()).charAt(positionVector.getX());
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Return the type of space at the given position.
 | 
					     * Return the type of space at the given position.
 | 
				
			||||||
     * If the location is outside the track bounds, it is considered a wall.
 | 
					     * If the location is outside the track bounds, it is considered a wall.
 | 
				
			||||||
| 
						 | 
					@ -191,7 +214,6 @@ public class Track implements TrackSpecification {
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public Config.SpaceType getSpaceType(PositionVector position) {
 | 
					    public Config.SpaceType getSpaceType(PositionVector position) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        //TODO: RETURN NULL OR CUSTOM ERROR?
 | 
					 | 
				
			||||||
        char charAtPosition = track.get(position.getY()).charAt(position.getX());
 | 
					        char charAtPosition = track.get(position.getY()).charAt(position.getX());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        ConfigSpecification.SpaceType[] spaceTypes = ConfigSpecification.SpaceType.values();
 | 
					        ConfigSpecification.SpaceType[] spaceTypes = ConfigSpecification.SpaceType.values();
 | 
				
			||||||
| 
						 | 
					@ -246,7 +268,6 @@ public class Track implements TrackSpecification {
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public PositionVector getCarPos(int carIndex) {
 | 
					    public PositionVector getCarPos(int carIndex) {
 | 
				
			||||||
        return findChar(cars.get(carIndex).getId());
 | 
					        return findChar(cars.get(carIndex).getId());
 | 
				
			||||||
        //TODO: SHOULD WE GET CAR POSITION FROM TRACK STRING OR CAR OBJ
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
| 
						 | 
					@ -271,8 +292,16 @@ public class Track implements TrackSpecification {
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public char getCharAtPosition(int y, int x, Config.SpaceType currentSpace) {
 | 
					    public char getCharAtPosition(int y, int x, Config.SpaceType currentSpace) {
 | 
				
			||||||
        // TODO: implementation
 | 
					        char charAtPos = track.get(y).charAt(x);
 | 
				
			||||||
        throw new UnsupportedOperationException();
 | 
					        for (Car car : cars) {
 | 
				
			||||||
 | 
					            if(charAtPos == car.getId()) {
 | 
				
			||||||
 | 
					                if(car.isCrashed()) {
 | 
				
			||||||
 | 
					                    return CRASH_INDICATOR;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                return charAtPos;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        return currentSpace.getValue();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue