Minor refactoring.
This commit is contained in:
		
							parent
							
								
									88d86ed186
								
							
						
					
					
						commit
						5959200bed
					
				
					 4 changed files with 22 additions and 21 deletions
				
			
		|  | @ -1,21 +1,10 @@ | ||||||
| package ch.fritteli.labyrinth.model; | package ch.fritteli.labyrinth.model; | ||||||
| 
 | 
 | ||||||
| import lombok.NonNull; |  | ||||||
| 
 |  | ||||||
| import java.util.function.UnaryOperator; |  | ||||||
| 
 |  | ||||||
| public enum Direction { | public enum Direction { | ||||||
|     TOP(position -> position.withY(position.getY() - 1)), |     TOP, | ||||||
|     BOTTOM(position -> position.withY(position.getY() + 1)), |     BOTTOM, | ||||||
|     LEFT(position -> position.withX(position.getX() - 1)), |     LEFT, | ||||||
|     RIGHT(position -> position.withX(position.getX() + 1)); |     RIGHT; | ||||||
| 
 |  | ||||||
|     @NonNull |  | ||||||
|     private final UnaryOperator<Position> translation; |  | ||||||
| 
 |  | ||||||
|     Direction(@NonNull final UnaryOperator<Position> translation) { |  | ||||||
|         this.translation = translation; |  | ||||||
|     } |  | ||||||
| 
 | 
 | ||||||
|     public Direction invert() { |     public Direction invert() { | ||||||
|         switch (this) { |         switch (this) { | ||||||
|  | @ -30,8 +19,4 @@ public enum Direction { | ||||||
|         } |         } | ||||||
|         throw new IllegalStateException("Programming error: Not all enum values covered in enum Direction#invert()!"); |         throw new IllegalStateException("Programming error: Not all enum values covered in enum Direction#invert()!"); | ||||||
|     } |     } | ||||||
| 
 |  | ||||||
|     public Position translate(@NonNull final Position position) { |  | ||||||
|         return this.translation.apply(position); |  | ||||||
|     } |  | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -126,7 +126,7 @@ public class Labyrinth { | ||||||
|                 if (directionToDigTo.isDefined()) { |                 if (directionToDigTo.isDefined()) { | ||||||
|                     final Direction digTo = directionToDigTo.get(); |                     final Direction digTo = directionToDigTo.get(); | ||||||
|                     final Direction digFrom = digTo.invert(); |                     final Direction digFrom = digTo.invert(); | ||||||
|                     final Position neighborPosition = digTo.translate(currentPosition); |                     final Position neighborPosition = currentPosition.move(digTo); | ||||||
|                     final Tile neighborTile = Labyrinth.this.getTileAt(neighborPosition); |                     final Tile neighborTile = Labyrinth.this.getTileAt(neighborPosition); | ||||||
|                     if (currentTile.digTo(digTo) && neighborTile.digFrom(digFrom)) { |                     if (currentTile.digTo(digTo) && neighborTile.digFrom(digFrom)) { | ||||||
|                         // all ok! |                         // all ok! | ||||||
|  |  | ||||||
|  | @ -1,5 +1,6 @@ | ||||||
| package ch.fritteli.labyrinth.model; | package ch.fritteli.labyrinth.model; | ||||||
| 
 | 
 | ||||||
|  | import lombok.NonNull; | ||||||
| import lombok.Value; | import lombok.Value; | ||||||
| import lombok.With; | import lombok.With; | ||||||
| 
 | 
 | ||||||
|  | @ -8,4 +9,19 @@ import lombok.With; | ||||||
| public class Position { | public class Position { | ||||||
|     int x; |     int x; | ||||||
|     int y; |     int y; | ||||||
|  | 
 | ||||||
|  |     public Position move(@NonNull final Direction direction) { | ||||||
|  |         switch (direction) { | ||||||
|  |             case BOTTOM: | ||||||
|  |                 return this.withY(this.y + 1); | ||||||
|  |             case LEFT: | ||||||
|  |                 return this.withX(this.x - 1); | ||||||
|  |             case RIGHT: | ||||||
|  |                 return this.withX(this.x + 1); | ||||||
|  |             case TOP: | ||||||
|  |                 return this.withY(this.y - 1); | ||||||
|  |             default: | ||||||
|  |                 throw new IllegalStateException("Programming error: Not all Direction enum values covered in Position#move(Direction)!"); | ||||||
|  |         } | ||||||
|  |     } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -223,7 +223,7 @@ class Generator { | ||||||
|         final Tile currentTile = this.labyrinth.getTileAt(currentPosition); |         final Tile currentTile = this.labyrinth.getTileAt(currentPosition); | ||||||
|         for (final Direction direction : Direction.values()) { |         for (final Direction direction : Direction.values()) { | ||||||
|             if (!currentTile.hasWallAt(direction)) { |             if (!currentTile.hasWallAt(direction)) { | ||||||
|                 final Position position = direction.translate(currentPosition); |                 final Position position = currentPosition.move(direction); | ||||||
|                 final Tile tileAtPosition = this.labyrinth.getTileAtOrNull(position); |                 final Tile tileAtPosition = this.labyrinth.getTileAtOrNull(position); | ||||||
|                 if (position.equals(previousPosition) || tileAtPosition == null) { |                 if (position.equals(previousPosition) || tileAtPosition == null) { | ||||||
|                     continue; |                     continue; | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue