diff --git a/src/main/java/se/urmo/game/entities/Ghost.java b/src/main/java/se/urmo/game/entities/Ghost.java index 5f8ca99..af25d7c 100644 --- a/src/main/java/se/urmo/game/entities/Ghost.java +++ b/src/main/java/se/urmo/game/entities/Ghost.java @@ -27,6 +27,7 @@ public class Ghost { private final GhostCollisionChecker collisionChecker; private final GhostStrategy chaseStrategy; + private final Point startPos; @Getter private Point position; @@ -50,7 +51,7 @@ public class Ghost { position = new Point( 13 * GameMap.MAP_TILESIZE + GameMap.OFFSET_X + (GameMap.MAP_TILESIZE / 2), 4 * GameMap.MAP_TILESIZE + GameMap.OFFSET_Y + (GameMap.MAP_TILESIZE / 2) ); - + startPos = position; this.currentStrategy = chaseStrategy; } @@ -195,4 +196,11 @@ public class Ghost { } } + public boolean isFrightened() { + return false; + } + + public void resetPosition() { + position = startPos; + } } diff --git a/src/main/java/se/urmo/game/entities/PacMan.java b/src/main/java/se/urmo/game/entities/PacMan.java index c813450..0567c77 100644 --- a/src/main/java/se/urmo/game/entities/PacMan.java +++ b/src/main/java/se/urmo/game/entities/PacMan.java @@ -22,6 +22,7 @@ public class PacMan { private static final int COLLISION_BOX_SIZE = 16; private static final int COLLISION_BOX_OFFSET = (PACMAN_SIZE - COLLISION_BOX_SIZE) / 2; private final Game game; + private final Point startPosition; private int aniTick = 0; private int aniIndex = 0; private static final int ANIMATION_UPDATE_FREQUENCY = 10; @@ -39,9 +40,10 @@ public class PacMan { public PacMan(Game game, CollisionChecker collisionChecker) { this.game = game; this.collisionChecker = collisionChecker; - position = new Point( + this.position = new Point( 26 * GameMap.MAP_TILESIZE + GameMap.OFFSET_X, 13 * GameMap.MAP_TILESIZE + GameMap.OFFSET_Y + (GameMap.MAP_TILESIZE / 2)); + this.startPosition = this.position; loadAnimation(); } @@ -115,4 +117,16 @@ public class PacMan { public Point getTilePosition() { return position; } + + public double distanceTo(Point point) { + return position.distance(point); + } + + public void loseLife() { + + } + + public void resetPosition() { + position = startPosition; + } } diff --git a/src/main/java/se/urmo/game/state/PlayingState.java b/src/main/java/se/urmo/game/state/PlayingState.java index 8cda9fe..fde6af2 100644 --- a/src/main/java/se/urmo/game/state/PlayingState.java +++ b/src/main/java/se/urmo/game/state/PlayingState.java @@ -20,6 +20,7 @@ public class PlayingState implements GameState { private PacMan pacman; @Getter private GameMap map; + private int score; public PlayingState(Game game, GameStateManager gameStateManager) { this.game = game; @@ -33,6 +34,7 @@ public class PlayingState implements GameState { public void update() { pacman.update(); ghostManager.update(pacman, map); + checkCollisions(); } @Override @@ -62,4 +64,21 @@ public class PlayingState implements GameState { pacman.setMoving(false); pacman.setDirection(Direction.NONE); } + + private void checkCollisions() { + for (Ghost ghost : ghostManager.getGhosts()) { + double dist = pacman.distanceTo(ghost.getPosition()); + if (dist < GameMap.MAP_TILESIZE / 2.0) { + if (ghost.isFrightened()) { + // Pac-Man eats ghost + score += 200; + ghost.resetPosition(); + } else { + // Pac-Man loses a life + pacman.loseLife(); + pacman.resetPosition(); + } + } + } + } }