summaryrefslogtreecommitdiff
path: root/pacman/view/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'pacman/view/src/main/java')
-rw-r--r--pacman/view/src/main/java/com/gr15/pacman/view/AnimatedSprite.java31
-rw-r--r--pacman/view/src/main/java/com/gr15/pacman/view/GameView.java109
-rw-r--r--pacman/view/src/main/java/com/gr15/pacman/view/Sprite.java35
-rw-r--r--pacman/view/src/main/java/module-info.java11
4 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;
+}