diff --git a/src/main/java/se/urmo/game/map/GameMap.java b/src/main/java/se/urmo/game/map/GameMap.java index ede1663..3f09fe5 100644 --- a/src/main/java/se/urmo/game/map/GameMap.java +++ b/src/main/java/se/urmo/game/map/GameMap.java @@ -41,7 +41,9 @@ public class GameMap { for (int col = 0; col < mapColSize; col++) { int value = Integer.parseInt(tokens[col].trim()); - data[rowIndex][col] = new MapTile(getSprite(value), value); + TileType type = TileType.fromValue(value); + BufferedImage sprite = SpriteSheetManager.get(type.getSpriteSheet()).getSprite(type); + data[rowIndex][col] = new MapTile(sprite, type); } rowIndex++; } @@ -97,17 +99,16 @@ public class GameMap { } public boolean isSolid(Point pos) { - int row = screenToRow(pos); - int col = screenToCol(pos); - return isSolid(row,col); + return isSolid(screenToRow(pos), screenToCol(pos)); } public boolean isSolid(int row, int col) { if (col >= columns() || col < 0 ) return true; + if(row >= rows() || row < 0) return true; MapTile mapTile = mapData[row][col]; boolean solid = mapTile.isSolid(); - log.debug("[{}][{}] is {} ({})", row, col, solid ? "solid" : " not solid", mapTile.getValue()); + log.debug("[{}][{}] {}", row, col, mapTile.getTileType()); return solid; } @@ -124,11 +125,13 @@ public class GameMap { } MapTile tile = mapData[row][col]; - if (tile != null && tile.getValue() == 0 && tile.getImage() != null) { + TileType type = tile.getTileType(); + + if (type.isRemovable() && tile.getImage() != null) { + log.debug("Removing tile {}", tile); tile.setImage(null); return true; } - return false; } @@ -184,4 +187,11 @@ public class GameMap { return (screenY - OFFSET_Y) / MAP_TILESIZE; } + public MapTile getTile(Point screenPos) { + int r = screenToRow(screenPos); + int c = screenToCol(screenPos); + + return mapData[r][c]; + + } } diff --git a/src/main/java/se/urmo/game/map/MapTile.java b/src/main/java/se/urmo/game/map/MapTile.java index 7cdde3d..48243b2 100644 --- a/src/main/java/se/urmo/game/map/MapTile.java +++ b/src/main/java/se/urmo/game/map/MapTile.java @@ -8,16 +8,14 @@ import java.awt.image.BufferedImage; @Getter @Setter public class MapTile { - private final int value; + private final TileType tileType; private BufferedImage image; - private final boolean solid; private final boolean[][] collisionMask; - public MapTile(BufferedImage image, int value) { - this.value = value; + public MapTile(BufferedImage image, TileType tileType) { + this.tileType = tileType; this.image = image; - this.solid = value != 0 && value != 99 && value != 56; - this.collisionMask = value != 0 ? createCollisionMask(image) : null; + this.collisionMask = tileType.getValue() != 0 ? createCollisionMask(image) : null; } private boolean[][] createCollisionMask(BufferedImage img) { @@ -34,4 +32,14 @@ public class MapTile { return mask; } + public boolean isSolid() { + return tileType.isSolid(); + } + + @Override + public String toString() { + return "MapTile{" + + "tileType=" + tileType + + '}'; + } } diff --git a/src/main/java/se/urmo/game/map/TileType.java b/src/main/java/se/urmo/game/map/TileType.java index 9b7eec8..c485b90 100644 --- a/src/main/java/se/urmo/game/map/TileType.java +++ b/src/main/java/se/urmo/game/map/TileType.java @@ -4,77 +4,82 @@ import lombok.Getter; @Getter public enum TileType { - SMALL_PELLET(0, false, SpriteLocation.ITEM, 1, 0), - TILE_1(1, true, SpriteLocation.MAP, 0, 0), - TILE_2(2, true, SpriteLocation.MAP, 0, 1), - TILE_3(3, true, SpriteLocation.MAP, 0, 2), - TILE_4(4, true, SpriteLocation.MAP, 0, 3), - TILE_5(5, true, SpriteLocation.MAP, 0, 4), - TILE_6(6, true, SpriteLocation.MAP, 0, 5), - TILE_7(7, true, SpriteLocation.MAP, 0, 6), - TILE_8(8, true, SpriteLocation.MAP, 0, 7), - TILE_9(9, true, SpriteLocation.MAP, 0, 8), - TILE_10(10, true, SpriteLocation.MAP, 0, 9), - TILE_11(11, true, SpriteLocation.MAP, 0, 10), - TILE_12(12, true, SpriteLocation.MAP, 1, 0), - TILE_13(13, true, SpriteLocation.MAP, 1, 1), - TILE_14(14, true, SpriteLocation.MAP, 1, 2), - TILE_15(15, true, SpriteLocation.MAP, 1, 3), - TILE_16(16, true, SpriteLocation.MAP, 1, 4), - TILE_17(17, true, SpriteLocation.MAP, 1, 5), - TILE_18(18, true, SpriteLocation.MAP, 1, 6), - TILE_19(19, true, SpriteLocation.MAP, 1, 7), - TILE_20(20, true, SpriteLocation.MAP, 1, 8), - TILE_21(21, true, SpriteLocation.MAP, 1, 9), - TILE_22(22, true, SpriteLocation.MAP, 1, 10), - TILE_23(23, true, SpriteLocation.MAP, 2, 0), - TILE_24(24, true, SpriteLocation.MAP, 2, 1), - TILE_25(25, true, SpriteLocation.MAP, 2, 2), - TILE_26(26, true, SpriteLocation.MAP, 2, 3), - TILE_27(27, true, SpriteLocation.MAP, 2, 4), - TILE_28(28, true, SpriteLocation.MAP, 2, 5), - TILE_29(29, true, SpriteLocation.MAP, 2, 6), - TILE_30(30, true, SpriteLocation.MAP, 2, 7), - TILE_31(31, true, SpriteLocation.MAP, 2, 8), - TILE_32(32, true, SpriteLocation.MAP, 2, 9), - TILE_33(33, true, SpriteLocation.MAP, 2, 10), - TILE_34(34, true, SpriteLocation.MAP, 3, 0), - TILE_35(35, true, SpriteLocation.MAP, 3, 1), - TILE_36(36, true, SpriteLocation.MAP, 3, 2), - TILE_37(37, true, SpriteLocation.MAP, 3, 3), - TILE_38(38, true, SpriteLocation.MAP, 3, 4), - TILE_39(39, true, SpriteLocation.MAP, 3, 5), - TILE_40(40, true, SpriteLocation.MAP, 3, 6), - TILE_41(41, true, SpriteLocation.MAP, 3, 7), - TILE_42(42, true, SpriteLocation.MAP, 3, 8), - TILE_43(43, true, SpriteLocation.MAP, 3, 9), - TILE_44(44, true, SpriteLocation.MAP, 3, 10), - TILE_45(45, true, SpriteLocation.MAP, 4, 0), - TILE_46(46, true, SpriteLocation.MAP, 4, 1), - TILE_47(47, true, SpriteLocation.MAP, 4, 2), - TILE_48(48, true, SpriteLocation.MAP, 4, 3), - TILE_49(49, true, SpriteLocation.MAP, 4, 4), - TILE_50(50, true, SpriteLocation.MAP, 4, 5), - TILE_51(51, true, SpriteLocation.MAP, 4, 6), - TILE_52(52, true, SpriteLocation.MAP, 4, 7), - TILE_53(53, true, SpriteLocation.MAP, 4, 8), - TILE_54(54, true, SpriteLocation.MAP, 4, 9), - TILE_55(55, true, SpriteLocation.MAP, 4, 10), - LARGE_PELLET(56, false, SpriteLocation.ITEM, 1, 1), - EMPTY(99, false, SpriteLocation.NONE, 0, 0); // No sprite associated with empty tiles + SMALL_PELLET(0, false, SpriteLocation.ITEM, 1, 0, true, 10), + TILE_1(1, true, SpriteLocation.MAP, 0, 0, false, 0), + TILE_2(2, true, SpriteLocation.MAP, 0, 1, false, 0), + TILE_3(3, true, SpriteLocation.MAP, 0, 2, false, 0), + TILE_4(4, true, SpriteLocation.MAP, 0, 3, false, 0), + TILE_5(5, true, SpriteLocation.MAP, 0, 4, false, 0), + TILE_6(6, true, SpriteLocation.MAP, 0, 5, false, 0), + TILE_7(7, true, SpriteLocation.MAP, 0, 6, false, 0), + TILE_8(8, true, SpriteLocation.MAP, 0, 7, false, 0), + TILE_9(9, true, SpriteLocation.MAP, 0, 8, false ,0), + TILE_10(10, true, SpriteLocation.MAP, 0, 9, false ,0), + TILE_11(11, true, SpriteLocation.MAP, 0, 10, false, 0), + TILE_12(12, true, SpriteLocation.MAP, 1, 0, false ,0), + TILE_13(13, true, SpriteLocation.MAP, 1, 1, false ,0), + TILE_14(14, true, SpriteLocation.MAP, 1, 2, false ,0), + TILE_15(15, true, SpriteLocation.MAP, 1, 3, false ,0), + TILE_16(16, true, SpriteLocation.MAP, 1, 4, false ,0), + TILE_17(17, true, SpriteLocation.MAP, 1, 5, false ,0), + TILE_18(18, true, SpriteLocation.MAP, 1, 6, false ,0), + TILE_19(19, true, SpriteLocation.MAP, 1, 7, false ,0), + TILE_20(20, true, SpriteLocation.MAP, 1, 8, false ,0), + TILE_21(21, true, SpriteLocation.MAP, 1, 9, false ,0), + TILE_22(22, true, SpriteLocation.MAP, 1, 10, false ,0), + TILE_23(23, true, SpriteLocation.MAP, 2, 0, false ,0), + TILE_24(24, true, SpriteLocation.MAP, 2, 1, false ,0), + TILE_25(25, true, SpriteLocation.MAP, 2, 2, false ,0), + TILE_26(26, true, SpriteLocation.MAP, 2, 3, false ,0), + TILE_27(27, true, SpriteLocation.MAP, 2, 4, false ,0), + TILE_28(28, true, SpriteLocation.MAP, 2, 5, false ,0), + TILE_29(29, true, SpriteLocation.MAP, 2, 6, false ,0), + TILE_30(30, true, SpriteLocation.MAP, 2, 7, false ,0), + TILE_31(31, true, SpriteLocation.MAP, 2, 8, false ,0), + TILE_32(32, true, SpriteLocation.MAP, 2, 9, false ,0), + TILE_33(33, true, SpriteLocation.MAP, 2, 10, false ,0), + TILE_34(34, true, SpriteLocation.MAP, 3, 0, false ,0), + TILE_35(35, true, SpriteLocation.MAP, 3, 1, false ,0), + TILE_36(36, true, SpriteLocation.MAP, 3, 2, false ,0), + TILE_37(37, true, SpriteLocation.MAP, 3, 3, false ,0), + TILE_38(38, true, SpriteLocation.MAP, 3, 4, false ,0), + TILE_39(39, true, SpriteLocation.MAP, 3, 5, false ,0), + TILE_40(40, true, SpriteLocation.MAP, 3, 6, false ,0), + TILE_41(41, true, SpriteLocation.MAP, 3, 7, false ,0), + TILE_42(42, true, SpriteLocation.MAP, 3, 8, false ,0), + TILE_43(43, true, SpriteLocation.MAP, 3, 9, false ,0), + TILE_44(44, true, SpriteLocation.MAP, 3, 10, false ,0), + TILE_45(45, true, SpriteLocation.MAP, 4, 0, false ,0), + TILE_46(46, true, SpriteLocation.MAP, 4, 1, false ,0), + TILE_47(47, true, SpriteLocation.MAP, 4, 2, false ,0), + TILE_48(48, true, SpriteLocation.MAP, 4, 3, false ,0), + TILE_49(49, true, SpriteLocation.MAP, 4, 4, false ,0), + TILE_50(50, true, SpriteLocation.MAP, 4, 5, false ,0), + TILE_51(51, true, SpriteLocation.MAP, 4, 6, false ,0), + TILE_52(52, true, SpriteLocation.MAP, 4, 7, false ,0), + TILE_53(53, true, SpriteLocation.MAP, 4, 8, false ,0), + TILE_54(54, true, SpriteLocation.MAP, 4, 9, false ,0), + TILE_55(55, true, SpriteLocation.MAP, 4, 10, false ,0), + LARGE_PELLET(56, false, SpriteLocation.ITEM, 1 ,1,true, 50), + EMPTY(99, false, SpriteLocation.NONE, 0, 0, false, 0); // No sprite associated with empty tiles private final int value; private final boolean solid; private final SpriteLocation spriteSheet; private final int row; private final int col; + private final boolean removable; + private final int score; - TileType(int value, boolean solid, SpriteLocation spriteSheet, int row, int col) { + + TileType(int value, boolean solid, SpriteLocation spriteSheet, int row, int col, boolean removable, int score) { this.value = value; this.solid = solid; this.spriteSheet = spriteSheet; this.row = row; this.col = col; + this.removable = removable; + this.score = score; } public static TileType fromValue(int value) { @@ -87,4 +92,14 @@ public enum TileType { public boolean hasSprite() { return spriteSheet != null; } + + @Override + public String toString() { + return "TileType{" + + "value=" + value + + ", removable=" + removable + + ", score=" + score + + ", solid=" + solid + + '}'; + } } \ No newline at end of file diff --git a/src/main/java/se/urmo/game/state/PlayingState.java b/src/main/java/se/urmo/game/state/PlayingState.java index 8c272c2..e099023 100644 --- a/src/main/java/se/urmo/game/state/PlayingState.java +++ b/src/main/java/se/urmo/game/state/PlayingState.java @@ -8,6 +8,7 @@ import se.urmo.game.entities.Ghost; import se.urmo.game.entities.PacMan; import se.urmo.game.main.Game; import se.urmo.game.map.GameMap; +import se.urmo.game.map.MapTile; import se.urmo.game.util.Direction; import java.awt.*; @@ -45,10 +46,11 @@ public class PlayingState implements GameState { private void handleDots() { Point pacmanScreenPos = pacman.getPosition(); + MapTile tile = map.getTile(pacmanScreenPos); boolean wasRemoved = map.removeTileImage(pacmanScreenPos); if(wasRemoved){ - score+=10; + score+=tile.getTileType().getScore(); } }