Minor fixes

This commit is contained in:
Urban Modig
2025-08-18 12:46:09 +02:00
parent 9d06b038e0
commit e62776b616
5 changed files with 23 additions and 26 deletions

View File

@ -1,6 +1,7 @@
package se.urmo.game.collision;
import lombok.extern.slf4j.Slf4j;
import se.urmo.game.util.Direction;
import se.urmo.game.map.GameMap;
@ -8,6 +9,7 @@ import java.awt.Point;
import java.util.Collections;
import java.util.List;
@Slf4j
public class CollisionChecker {
private GameMap map;
@ -17,7 +19,7 @@ public class CollisionChecker {
public Point getValidDestination(Direction direction, Point position, int agent_width, int agent_height) {
List<Point> list = switch (direction) {
List<Point> boundaries = switch (direction) {
case RIGHT -> List.of(
new Point(position.x + agent_width, position.y), // TOPRIGHT
new Point(position.x + agent_width, position.y + agent_height)); // BOTTOMRIGHT
@ -33,13 +35,13 @@ public class CollisionChecker {
default -> Collections.EMPTY_LIST;
};
System.out.println( direction + " bounderies for " + position + " are " + list);
log.debug("{} boundaries for {} are {}", direction, position, boundaries);
List<Point> list2 = list.stream()
List<Point> normalized = boundaries.stream()
.map(p -> normalizePosition(direction, p, agent_width, agent_height))
.toList();
if (map.isPassable(list2)) {
if (map.isPassable(normalized)) {
return normalizePosition(direction, position, agent_width, agent_height);
}
return null; // Blocked

View File

@ -2,6 +2,7 @@ package se.urmo.game.entities;
import lombok.Getter;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
import se.urmo.game.collision.CollisionChecker;
import se.urmo.game.util.Direction;
import se.urmo.game.main.Game;
@ -14,6 +15,7 @@ import java.awt.image.BufferedImage;
import java.util.Arrays;
@Slf4j
public class PacMan {
public static final int PACMAN_SIZE = 32;
private static final int COLLISION_BOX_SIZE = 16;
@ -36,7 +38,7 @@ public class PacMan {
public PacMan(Game game, CollisionChecker collisionChecker) {
this.game = game;
this.collisionChecker = collisionChecker;
position = new Point(26 * 16 + 8 + GameMap.OFFSET_X, 13 * 16 + GameMap.OFFSET_Y);
position = new Point(26 * GameMap.MAP_TILESIZE + 8 + GameMap.OFFSET_X, 13 * GameMap.MAP_TILESIZE + GameMap.OFFSET_Y);
loadAnimation();
}
@ -46,7 +48,7 @@ public class PacMan {
BufferedImage img = LoadSave.GetSpriteAtlas("sprites/PacManAssets-PacMan.png");
for (int row = 0; row < 3; row++) {
for (int col = 0; col < 4; col++) {
image[row][col] = img.getSubimage(32 * col, 32 * row, PACMAN_SIZE, PACMAN_SIZE);
image[row][col] = img.getSubimage(PACMAN_SIZE * col, PACMAN_SIZE * row, PACMAN_SIZE, PACMAN_SIZE);
}
}
movmentImages[Direction.RIGHT.ordinal()] = image[0];
@ -83,7 +85,7 @@ public class PacMan {
case DOWN -> new Point(position.x, position.y + speed);
default -> throw new IllegalStateException("Unexpected value: " + direction);
};
System.out.println("At: " + position+ ",trying to move " + direction.name() + " to " + newPosition);
log.debug("At: {},trying to move {} to {}", position, direction.name(), newPosition);
Point destination = collisionChecker.getValidDestination(direction, newPosition, COLLISION_BOX_SIZE, COLLISION_BOX_SIZE);
if(destination != null) {
@ -99,7 +101,7 @@ public class PacMan {
if (aniTick >= ANIMATION_UPDATE_FREQUENCY) {
aniTick = 0;
aniIndex++;
if (aniIndex >= 3) {
if (aniIndex >= 4) {
aniIndex = 0;
}

View File

@ -1,9 +1,12 @@
package se.urmo.game.main;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
import se.urmo.game.state.GameStateManager;
import javax.swing.*;
@Slf4j
public class Game implements Runnable {
public final static int FPS_SET = 120;
public final static int UPS_SET = 120;
@ -11,9 +14,11 @@ public class Game implements Runnable {
private final static double timePerUpdate = 1000000000.0 / UPS_SET;
@Getter
private final GameStateManager gameStateManager;
private Thread gameThread;
private final JFrame window = new JFrame();
@Getter
private final GamePanel gamePanel;
public Game() {
@ -69,18 +74,10 @@ public class Game implements Runnable {
if (System.currentTimeMillis() - lastCheck >= 1000) {
lastCheck = System.currentTimeMillis();
//System.out.println("FPS: " + frames + " | UPS: " + updates);
log.debug("FPS: " + frames + " | UPS: " + updates);
frames = 0;
updates = 0;
}
}
}
public GamePanel getGamePanel() {
return gamePanel;
}
public GameStateManager getGameStateManager() {
return gameStateManager;
}
}

View File

@ -148,11 +148,11 @@ public class GameMap {
int col = (x - OFFSET_X) / MAP_TILESIZE;
int tileY = (y - OFFSET_Y) % MAP_TILESIZE;
int tileX = (x - OFFSET_X) % MAP_TILESIZE;
System.out.print("Point[x="+x+",y="+y+"] is row="+ row + ", col=" + col + " with reminder x=" +tileX+",y=" +tileY);
log.trace("Point[x="+x+",y="+y+"] is row="+ row + ", col=" + col + " with reminder x=" +tileX+",y=" +tileY);
boolean[][] mask = mapData[row][col].getCollisionMask();
boolean b = mask == null || !mask[tileY][tileX];
System.out.println(b?" - passable":" - not passable");
log.trace(b?" - passable":" - not passable");
return b;
}
@ -195,16 +195,12 @@ public class GameMap {
.toList();
}
public boolean isSolid(List<Point> points) {
return points.stream().allMatch(p -> isSolid(p.x, p.y));
}
public boolean isSolid(int x, int y) {
int row = (y - OFFSET_Y) / MAP_TILESIZE;
int col = (x - OFFSET_X) / MAP_TILESIZE;
MapTile mapTile = mapData[row][col];
boolean solid = mapTile.isSolid();
log.debug("["+row+"]["+col+"] is " + (solid?"solid":" not solid") + " (" + mapTile.getValue() + ")");
log.debug("[{}][{}] is {} ({})", row, col, solid ? "solid" : " not solid", mapTile.getValue());
return solid;
}
}

View File

@ -25,8 +25,8 @@ public class GhostManager {
public GhostManager(GhostCollisionChecker ghostCollisionChecker) {
loadAnimation();
// Create ghosts with their strategies
ghosts.add(new Ghost(ghostCollisionChecker, new BlinkyStrategy(),image[0]));
ghosts.add(new Ghost(ghostCollisionChecker, new PinkyStrategy(), image[1]));
//ghosts.add(new Ghost(ghostCollisionChecker, new BlinkyStrategy(),image[0]));
//ghosts.add(new Ghost(ghostCollisionChecker, new PinkyStrategy(), image[1]));
//ghosts.add(new Ghost(240, 200, new InkyStrategy(), loader.getSprite("inky")));
//ghosts.add(new Ghost(260, 200, new ClydeStrategy(), loader.getSprite("clyde")));
}