diff options
Diffstat (limited to 'pacman/view/src')
16 files changed, 180 insertions, 6 deletions
diff --git a/pacman/view/src/main/java/com/gr15/pacman/view/AnimatedSprite.java b/pacman/view/src/main/java/com/gr15/pacman/view/AnimatedSprite.java new file mode 100644 index 0000000..763c876 --- /dev/null +++ b/pacman/view/src/main/java/com/gr15/pacman/view/AnimatedSprite.java @@ -0,0 +1,31 @@ +package com.gr15.pacman.view; + +import javafx.scene.canvas.GraphicsContext; +import javafx.scene.image.Image; + +public class AnimatedSprite extends Sprite { + private Image[] frames; + private int currentFrame = 0; + private double frameTime = 0.1; // seconds per frame + private double timeSinceLastFrame = 0.0; + + public AnimatedSprite(Image[] frames, double x, double y, double width, double height) { + super(frames[0], x, y, width, height); + this.frames = frames; + } + + public void update(double deltaSeconds) { + timeSinceLastFrame += deltaSeconds; + if (timeSinceLastFrame >= frameTime) { + currentFrame = (currentFrame + 1) % frames.length; + super.setImage(frames[currentFrame]); + timeSinceLastFrame = 0.0; + } + } + + @Override + public void render(GraphicsContext gc) { + super.render(gc); + } +} + diff --git a/pacman/view/src/main/java/com/gr15/pacman/view/GameView.java b/pacman/view/src/main/java/com/gr15/pacman/view/GameView.java new file mode 100644 index 0000000..62617d6 --- /dev/null +++ b/pacman/view/src/main/java/com/gr15/pacman/view/GameView.java @@ -0,0 +1,109 @@ +package com.gr15.pacman.view; + +import java.util.HashMap; +import java.util.Map; + +import com.gr15.pacman.model.GameState; +import com.gr15.pacman.model.Board.TileType; + +import javafx.scene.Scene; +import javafx.scene.canvas.Canvas; +import javafx.scene.canvas.GraphicsContext; +import javafx.scene.image.Image; +import javafx.scene.layout.StackPane; + +import com.gr15.pacman.model.entities.Entity; +import com.gr15.pacman.model.entities.Items; + +/** + * GameView + */ +public class GameView + extends Scene { + + /* Utils */ + private Canvas canvas; + private GraphicsContext gc; + private GameState gameState; + private StackPane root; + + private float scaleX = 4.0f; + private float scaleY = 4.0f; + private int tileHeight; + private int tileWidth; + + private Map<TileType, Image> tileTextures = new HashMap<>(); + private Map<Entity, Image> entityTextures = new HashMap<>(); + private Map<Items, Image> itemTextures = new HashMap<>(); + + /* UI elements */ + private Sprite pacmanSprite; + + public GameView(GameState gameState, + int tileHeight, int tileWidth) { + super(new StackPane()); + root = (StackPane)super.getRoot(); + + canvas = new Canvas(tileWidth * 16 * scaleX, tileHeight * 16 * scaleY); + gc = canvas.getGraphicsContext2D(); + root.getChildren().add(canvas); + + this.tileHeight = tileHeight; + this.tileWidth = tileWidth; + this.gameState = gameState; + + tileTextures.put(TileType.WALL, new Image( + this.getClass().getResourceAsStream("/gameAssets/wall.png"))); + pacmanSprite = new Sprite(new Image( + this.getClass().getResourceAsStream("/gameAssets/pacmanRight.png")), + gameState.getPacman().getPositionX() - 0.5, + gameState.getPacman().getPositionY() - 0.5, + 16 * scaleX, 16 * scaleY); + } + + public void renderGame(double deltaSeconds) { + gc.clearRect(0, 0, tileWidth * 16 * scaleX, tileHeight * 16 * scaleY); + TileType[][] tileBoard = gameState.getBoard().getTileBoard(); + for (int y = 0; y < tileBoard.length; y++) { + for (int x = 0; x < tileBoard[y].length; x++) { + Image texture = tileTextures.get(tileBoard[y][x]); + if (texture != null) { + gc.drawImage(texture, + x * 16 * scaleX, + y * 16 * scaleY, + texture.getWidth() * scaleX, + texture.getHeight() * scaleY); + } + } + } + + pacmanSprite.setX((gameState.getPacman().getPositionX() + - 0.5) * 16 * scaleX); + pacmanSprite.setY((gameState.getPacman().getPositionY() + - 0.5) * 16 * scaleY); + pacmanSprite.render(gc); + + gameState.getEntities().forEach((pos, entity) -> { + Image texture = entityTextures.get(entity); + if (texture != null) { + gc.drawImage(texture, + entity.getPositionX() * 16 * scaleX, + entity.getPositionY() * 16 * scaleY, + texture.getWidth() * scaleX, + texture.getHeight() * scaleY); + } + }); + + gameState.getItems().forEach((pos, item) -> { + Image texture = itemTextures.get(item); + if (texture != null) { + gc.drawImage(texture, + pos.x() * 16 * scaleX, + pos.y() * 16 * scaleY, + texture.getWidth() * scaleX, + texture.getHeight() * scaleY); + + } + }); + } +} diff --git a/pacman/view/src/main/java/com/gr15/pacman/view/Sprite.java b/pacman/view/src/main/java/com/gr15/pacman/view/Sprite.java new file mode 100644 index 0000000..f397e7d --- /dev/null +++ b/pacman/view/src/main/java/com/gr15/pacman/view/Sprite.java @@ -0,0 +1,35 @@ +package com.gr15.pacman.view; + +import javafx.scene.canvas.GraphicsContext; +import javafx.scene.image.Image; + +public class Sprite { + private Image image; + private double x, y; + private double width, height; + + public Sprite(Image image, double x, double y, double width, double height) { + this.image = image; + this.x = x; + this.y = y; + this.width = width; + this.height = height; + } + + public void render(GraphicsContext gc) { + gc.drawImage(image, x, y, width, height); + } + + /* Getters and setters */ + public Image getImage() { return this.image; } + public double getX() { return this.x; } + public double getY() { return this.y; } + public double getWidth() { return this.width; } + public double getHeigt() { return this.height; } + + public void setImage(Image newImage) { this.image = newImage; } + public void setX(double newX) { this.x = newX; } + public void setY(double newY) { this.y = newY; } + public void setWidth(double newWidth) { this.width = newWidth; } + public void setHeight(double newHeight) { this.height = newHeight; } +} diff --git a/pacman/view/src/main/java/module-info.java b/pacman/view/src/main/java/module-info.java index a9649df..914038a 100644 --- a/pacman/view/src/main/java/module-info.java +++ b/pacman/view/src/main/java/module-info.java @@ -1,9 +1,8 @@ /* module-info.java * This acts as the manifest for the module. */ -module pacman.view { - requires javafx.controls; /* JavaFX dependencies */ - requires javafx.graphics; - requires pacman.model; - exports pacman.view; /* exports make specific packages */ -} /* public to other modules */ +module com.gr15.pacman.view { + requires transitive javafx.graphics; + requires transitive com.gr15.pacman.model; + exports com.gr15.pacman.view; +} diff --git a/pacman/view/src/main/resources/gameAssets/blueGhost.png b/pacman/view/src/main/resources/gameAssets/blueGhost.png Binary files differnew file mode 100644 index 0000000..e1ee979 --- /dev/null +++ b/pacman/view/src/main/resources/gameAssets/blueGhost.png diff --git a/pacman/view/src/main/resources/gameAssets/cherry.png b/pacman/view/src/main/resources/gameAssets/cherry.png Binary files differnew file mode 100644 index 0000000..45c4f31 --- /dev/null +++ b/pacman/view/src/main/resources/gameAssets/cherry.png diff --git a/pacman/view/src/main/resources/gameAssets/cherry2.png b/pacman/view/src/main/resources/gameAssets/cherry2.png Binary files differnew file mode 100644 index 0000000..6dea0ca --- /dev/null +++ b/pacman/view/src/main/resources/gameAssets/cherry2.png diff --git a/pacman/view/src/main/resources/gameAssets/orangeGhost.png b/pacman/view/src/main/resources/gameAssets/orangeGhost.png Binary files differnew file mode 100644 index 0000000..bcd1cb8 --- /dev/null +++ b/pacman/view/src/main/resources/gameAssets/orangeGhost.png diff --git a/pacman/view/src/main/resources/gameAssets/pacmanDown.png b/pacman/view/src/main/resources/gameAssets/pacmanDown.png Binary files differnew file mode 100644 index 0000000..2c24dbe --- /dev/null +++ b/pacman/view/src/main/resources/gameAssets/pacmanDown.png diff --git a/pacman/view/src/main/resources/gameAssets/pacmanLeft.png b/pacman/view/src/main/resources/gameAssets/pacmanLeft.png Binary files differnew file mode 100644 index 0000000..168f495 --- /dev/null +++ b/pacman/view/src/main/resources/gameAssets/pacmanLeft.png diff --git a/pacman/view/src/main/resources/gameAssets/pacmanRight.png b/pacman/view/src/main/resources/gameAssets/pacmanRight.png Binary files differnew file mode 100644 index 0000000..7e370a0 --- /dev/null +++ b/pacman/view/src/main/resources/gameAssets/pacmanRight.png diff --git a/pacman/view/src/main/resources/gameAssets/pacmanUp.png b/pacman/view/src/main/resources/gameAssets/pacmanUp.png Binary files differnew file mode 100644 index 0000000..9f4a39b --- /dev/null +++ b/pacman/view/src/main/resources/gameAssets/pacmanUp.png diff --git a/pacman/view/src/main/resources/gameAssets/pinkGhost.png b/pacman/view/src/main/resources/gameAssets/pinkGhost.png Binary files differnew file mode 100644 index 0000000..12c3f84 --- /dev/null +++ b/pacman/view/src/main/resources/gameAssets/pinkGhost.png diff --git a/pacman/view/src/main/resources/gameAssets/redGhost.png b/pacman/view/src/main/resources/gameAssets/redGhost.png Binary files differnew file mode 100644 index 0000000..cfd374e --- /dev/null +++ b/pacman/view/src/main/resources/gameAssets/redGhost.png diff --git a/pacman/view/src/main/resources/gameAssets/scaredGhost.png b/pacman/view/src/main/resources/gameAssets/scaredGhost.png Binary files differnew file mode 100644 index 0000000..9e26fff --- /dev/null +++ b/pacman/view/src/main/resources/gameAssets/scaredGhost.png diff --git a/pacman/view/src/main/resources/gameAssets/wall.png b/pacman/view/src/main/resources/gameAssets/wall.png Binary files differnew file mode 100644 index 0000000..ab12c87 --- /dev/null +++ b/pacman/view/src/main/resources/gameAssets/wall.png |