diff options
| author | mithe24 <mithe24@student.sdu.dk> | 2025-04-08 11:23:56 +0200 |
|---|---|---|
| committer | mithe24 <mithe24@student.sdu.dk> | 2025-04-29 18:51:23 +0200 |
| commit | e8e3774158f749e0214fb34ebdba29527d054874 (patch) | |
| tree | 754fe56d1d421d065b3f1b22219e7b09faf0bc91 /pacman/view/src/main/java/com | |
| parent | 6687af6f7c7d5d4524fadad1129d50040293e05c (diff) | |
| download | pacman-e8e3774158f749e0214fb34ebdba29527d054874.tar.gz pacman-e8e3774158f749e0214fb34ebdba29527d054874.zip | |
Initial commit
Diffstat (limited to '')
3 files changed, 175 insertions, 0 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; } +} |