summaryrefslogtreecommitdiff
path: root/pacman/view/src/main
diff options
context:
space:
mode:
authormithe24 <mithe24@student.sdu.dk>2025-04-08 11:23:56 +0200
committermithe24 <mithe24@student.sdu.dk>2025-04-29 18:51:23 +0200
commite8e3774158f749e0214fb34ebdba29527d054874 (patch)
tree754fe56d1d421d065b3f1b22219e7b09faf0bc91 /pacman/view/src/main
parent6687af6f7c7d5d4524fadad1129d50040293e05c (diff)
downloadpacman-e8e3774158f749e0214fb34ebdba29527d054874.tar.gz
pacman-e8e3774158f749e0214fb34ebdba29527d054874.zip
Initial commit
Diffstat (limited to 'pacman/view/src/main')
-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
-rw-r--r--pacman/view/src/main/resources/gameAssets/blueGhost.pngbin0 -> 258 bytes
-rw-r--r--pacman/view/src/main/resources/gameAssets/cherry.pngbin0 -> 271 bytes
-rw-r--r--pacman/view/src/main/resources/gameAssets/cherry2.pngbin0 -> 223 bytes
-rw-r--r--pacman/view/src/main/resources/gameAssets/orangeGhost.pngbin0 -> 246 bytes
-rw-r--r--pacman/view/src/main/resources/gameAssets/pacmanDown.pngbin0 -> 204 bytes
-rw-r--r--pacman/view/src/main/resources/gameAssets/pacmanLeft.pngbin0 -> 203 bytes
-rw-r--r--pacman/view/src/main/resources/gameAssets/pacmanRight.pngbin0 -> 205 bytes
-rw-r--r--pacman/view/src/main/resources/gameAssets/pacmanUp.pngbin0 -> 207 bytes
-rw-r--r--pacman/view/src/main/resources/gameAssets/pinkGhost.pngbin0 -> 249 bytes
-rw-r--r--pacman/view/src/main/resources/gameAssets/redGhost.pngbin0 -> 249 bytes
-rw-r--r--pacman/view/src/main/resources/gameAssets/scaredGhost.pngbin0 -> 239 bytes
-rw-r--r--pacman/view/src/main/resources/gameAssets/wall.pngbin0 -> 152 bytes
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
new file mode 100644
index 0000000..e1ee979
--- /dev/null
+++ b/pacman/view/src/main/resources/gameAssets/blueGhost.png
Binary files differ
diff --git a/pacman/view/src/main/resources/gameAssets/cherry.png b/pacman/view/src/main/resources/gameAssets/cherry.png
new file mode 100644
index 0000000..45c4f31
--- /dev/null
+++ b/pacman/view/src/main/resources/gameAssets/cherry.png
Binary files differ
diff --git a/pacman/view/src/main/resources/gameAssets/cherry2.png b/pacman/view/src/main/resources/gameAssets/cherry2.png
new file mode 100644
index 0000000..6dea0ca
--- /dev/null
+++ b/pacman/view/src/main/resources/gameAssets/cherry2.png
Binary files differ
diff --git a/pacman/view/src/main/resources/gameAssets/orangeGhost.png b/pacman/view/src/main/resources/gameAssets/orangeGhost.png
new file mode 100644
index 0000000..bcd1cb8
--- /dev/null
+++ b/pacman/view/src/main/resources/gameAssets/orangeGhost.png
Binary files differ
diff --git a/pacman/view/src/main/resources/gameAssets/pacmanDown.png b/pacman/view/src/main/resources/gameAssets/pacmanDown.png
new file mode 100644
index 0000000..2c24dbe
--- /dev/null
+++ b/pacman/view/src/main/resources/gameAssets/pacmanDown.png
Binary files differ
diff --git a/pacman/view/src/main/resources/gameAssets/pacmanLeft.png b/pacman/view/src/main/resources/gameAssets/pacmanLeft.png
new file mode 100644
index 0000000..168f495
--- /dev/null
+++ b/pacman/view/src/main/resources/gameAssets/pacmanLeft.png
Binary files differ
diff --git a/pacman/view/src/main/resources/gameAssets/pacmanRight.png b/pacman/view/src/main/resources/gameAssets/pacmanRight.png
new file mode 100644
index 0000000..7e370a0
--- /dev/null
+++ b/pacman/view/src/main/resources/gameAssets/pacmanRight.png
Binary files differ
diff --git a/pacman/view/src/main/resources/gameAssets/pacmanUp.png b/pacman/view/src/main/resources/gameAssets/pacmanUp.png
new file mode 100644
index 0000000..9f4a39b
--- /dev/null
+++ b/pacman/view/src/main/resources/gameAssets/pacmanUp.png
Binary files differ
diff --git a/pacman/view/src/main/resources/gameAssets/pinkGhost.png b/pacman/view/src/main/resources/gameAssets/pinkGhost.png
new file mode 100644
index 0000000..12c3f84
--- /dev/null
+++ b/pacman/view/src/main/resources/gameAssets/pinkGhost.png
Binary files differ
diff --git a/pacman/view/src/main/resources/gameAssets/redGhost.png b/pacman/view/src/main/resources/gameAssets/redGhost.png
new file mode 100644
index 0000000..cfd374e
--- /dev/null
+++ b/pacman/view/src/main/resources/gameAssets/redGhost.png
Binary files differ
diff --git a/pacman/view/src/main/resources/gameAssets/scaredGhost.png b/pacman/view/src/main/resources/gameAssets/scaredGhost.png
new file mode 100644
index 0000000..9e26fff
--- /dev/null
+++ b/pacman/view/src/main/resources/gameAssets/scaredGhost.png
Binary files differ
diff --git a/pacman/view/src/main/resources/gameAssets/wall.png b/pacman/view/src/main/resources/gameAssets/wall.png
new file mode 100644
index 0000000..ab12c87
--- /dev/null
+++ b/pacman/view/src/main/resources/gameAssets/wall.png
Binary files differ