Makefile + correction de dépendance circulaire

This commit is contained in:
David AKAGUNDUZ 2024-10-26 17:19:48 +02:00
parent 07515d748d
commit 286590398c
12 changed files with 148 additions and 44 deletions

98
src/main/Makefile Normal file

@ -0,0 +1,98 @@
### VARIABLES ###
JC = javac
JCFLAGS = -encoding UTF-8 -implicit:none -d classes
JVM = java
JVMFLAGS =
### RÈGLES ESSENTIELLES ###
Main.class: Main.java java/controller/MenuController.class java/view/MenuView.class java/controller/GameController.class
$(JC) $(JCFLAGS) Main.java
java/controller/MenuController.class: java/controller/MenuController.java java/model/MenuModel.class java/view/MenuView.class java/controller/NewListener.class java/controller/QuiListener.class java/controller/ResListener.class
$(JC) $(JCFLAGS) java/controller/MenuController.java
java/controller/NewListener.class: java/controller/NewListener.java
$(JC) $(JCFLAGS) java/controller/NewListener.java
java/controller/QuiListener.class: java/controller/QuiListener.java
$(JC) $(JCFLAGS) java/controller/QuiListener.java
java/controller/ResListener.class: java/controller/ResListener.java java/view/GameView.class
$(JC) $(JCFLAGS) java/controller/ResListener.java
java/view/GameView.class: java/view/GameView.java java/controller/MouseWheelController.class java/controller/GameController.class java/view/HexagonTile.class
$(JC) $(JCFLAGS) java/view/GameView.java
java/controller/MouseWheelController.class: java/controller/MouseWheelController.java java/view/HexagonTile.class java/controller/GameController.class
$(JC) $(JCFLAGS) java/controller/MouseWheelController.java
java/controller/HexagonMouseListener.class: java/controller/HexagonMouseListener.java java/view/HexagonTile.class java/controller/TilePlacer.class
$(JC) $(JCFLAGS) java/controller/HexagonMouseListener.java
java/controller/GameController.class: java/controller/GameController.java java/controller/TilePlacer.class java/model/Tile.class java/controller/CameraController.class java/controller/HexagonMouseListener.class
$(JC) $(JCFLAGS) java/controller/GameController.java
java/controller/CameraController.class: java/controller/CameraController.java java/controller/GameContext.class java/controller/MousePressHandler.class java/controller/MouseDragHandler.class
$(JC) $(JCFLAGS) java/controller/CameraController.java
java/controller/GameContext.class: java/controller/GameContext.java java/view/HexagonTile.class
$(JC) $(JCFLAGS) java/controller/GameContext.java
java/view/HexagonTile.class: java/view/HexagonTile.java java/model/Tile.class java/model/TerrainType.class
$(JC) $(JCFLAGS) java/view/HexagonTile.java
java/model/MenuModel.class: java/model/MenuModel.java
$(JC) $(JCFLAGS) java/model/MenuModel.java
java/view/MenuView.class: java/view/MenuView.java java/view/BtnPerso.class java/view/ButtonHoverListener.class
$(JC) $(JCFLAGS) java/view/MenuView.java
java/model/Tile.class: java/model/Tile.java java/model/TerrainType.class
$(JC) $(JCFLAGS) java/model/Tile.java
java/model/TerrainType.class: java/model/TerrainType.java
$(JC) $(JCFLAGS) java/model/TerrainType.java
java/view/ButtonHoverListener.class: java/view/ButtonHoverListener.java
$(JC) $(JCFLAGS) java/view/ButtonHoverListener.java
java/view/BtnPerso.class: java/view/BtnPerso.java
$(JC) $(JCFLAGS) java/view/BtnPerso.java
java/controller/MousePressHandler.class: java/controller/MousePressHandler.java java/controller/CameraControllerListener.class
$(JC) $(JCFLAGS) java/controller/MousePressHandler.java
java/controller/MouseDragHandler.class: java/controller/MouseDragHandler.java java/controller/CameraControllerListener.class
$(JC) $(JCFLAGS) java/controller/MouseDragHandler.java
java/controller/CameraControllerListener.class: java/controller/CameraControllerListener.java
$(JC) $(JCFLAGS) java/controller/CameraControllerListener.java
java/controller/TilePlacer.class: java/controller/TilePlacer.java
$(JC) $(JCFLAGS) java/controller/TilePlacer.java
### RÈGLE POUR COPIER LES IMAGES ###
copy-images:
mkdir -p classes/java/view/img
if [ -d java/view/img ]; then cp -r java/view/img/* classes/java/view/img/; else echo "Le répertoire java/view/img n'existe pas."; fi
### RÈGLES OPTIONNELLES ###
run: Main.class copy-images
$(JVM) $(JVMFLAGS) -cp classes main.Main
clean:
-rm -f classes/**/*.class
mrproper: clean
-rm -rf classes/java/view/img
### BUTS FACTICES ###
.PHONY: run clean mrproper copy-images
### FIN ###

Binary file not shown.

After

(image error) Size: 27 KiB

Binary file not shown.

After

(image error) Size: 322 KiB

Binary file not shown.

After

(image error) Size: 36 KiB

@ -3,8 +3,7 @@ package controller;
import javax.swing.JPanel; import javax.swing.JPanel;
import java.awt.Point; import java.awt.Point;
public class CameraController implements CameraControllerListener {
public class CameraController {
private Point mouseDragStart = null; private Point mouseDragStart = null;
private GameContext context; private GameContext context;
@ -16,6 +15,7 @@ public class CameraController {
setupMouseDragToMove(gridPanel); // Initialise les écouteurs pour gérer le déplacement setupMouseDragToMove(gridPanel); // Initialise les écouteurs pour gérer le déplacement
} }
@Override
public void updateViewOffset(int deltaX, int deltaY) { public void updateViewOffset(int deltaX, int deltaY) {
// Met à jour uniquement l'offset dans GameContext // Met à jour uniquement l'offset dans GameContext
context.updateOffset(deltaX, deltaY); context.updateOffset(deltaX, deltaY);
@ -27,18 +27,21 @@ public class CameraController {
} }
private void setupMouseDragToMove(JPanel gridPanel) { private void setupMouseDragToMove(JPanel gridPanel) {
gridPanel.addMouseListener(new MousePressHandler(this, context)); gridPanel.addMouseListener(new MousePressHandler(this));
gridPanel.addMouseMotionListener(new MouseDragHandler(this, context)); gridPanel.addMouseMotionListener(new MouseDragHandler(this));
} }
@Override
public void setMouseDragStart(Point point) { public void setMouseDragStart(Point point) {
this.mouseDragStart = point; this.mouseDragStart = point;
} }
@Override
public Point getMouseDragStart() { public Point getMouseDragStart() {
return mouseDragStart; return mouseDragStart;
} }
@Override
public void resetMouseDragStart() { public void resetMouseDragStart() {
this.mouseDragStart = null; this.mouseDragStart = null;
} }

@ -0,0 +1,10 @@
package controller;
import java.awt.Point;
public interface CameraControllerListener {
void updateViewOffset(int deltaX, int deltaY);
void setMouseDragStart(Point point);
Point getMouseDragStart();
void resetMouseDragStart();
}

@ -8,7 +8,7 @@ import java.awt.Point;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
public class GameController { public class GameController implements TilePlacer {
private Map<Point, HexagonTile> hexagonMap; private Map<Point, HexagonTile> hexagonMap;
private Set<Point> availablePositions; private Set<Point> availablePositions;
private JPanel gridPanel; private JPanel gridPanel;
@ -28,8 +28,8 @@ public class GameController {
updatePreview(); updatePreview();
} }
@Override
public void placeTile(Point position) { public void placeTile(Point position) {
// Vérifier si la position est disponible
if (availablePositions.contains(position)) { if (availablePositions.contains(position)) {
HexagonTile hexTile = hexagonMap.get(position); HexagonTile hexTile = hexagonMap.get(position);
if (hexTile == null) { if (hexTile == null) {
@ -37,27 +37,21 @@ public class GameController {
return; return;
} }
// Assigner la tuile actuelle
hexTile.setTile(nextTile); hexTile.setTile(nextTile);
gridPanel.revalidate(); gridPanel.revalidate();
gridPanel.repaint(); gridPanel.repaint();
// Retirer la position des positions disponibles
availablePositions.remove(position); availablePositions.remove(position);
// Mettre à jour les positions adjacentes
Point[] adjacentPositions = getAdjacentPositions(position); Point[] adjacentPositions = getAdjacentPositions(position);
for (Point adj : adjacentPositions) { for (Point adj : adjacentPositions) {
if (!hexagonMap.containsKey(adj)) { if (!hexagonMap.containsKey(adj)) {
availablePositions.add(adj); availablePositions.add(adj);
addHexagonTile(adj, gridPanel, 50, null, null); // Ajouter des placeholders addHexagonTile(adj, gridPanel, 50, null, null);
} }
} }
// Repeindre la grille
gameContext.repaintGrid(gridPanel); gameContext.repaintGrid(gridPanel);
// Générer une nouvelle tuile pour la prochaine preview
generateNextTile(); generateNextTile();
} }
} }
@ -72,8 +66,6 @@ public class GameController {
initialPosition.setLocation(centerX / 50, centerY / 50); initialPosition.setLocation(centerX / 50, centerY / 50);
placeInitialTile(initialPosition, cameraController, initialTile); placeInitialTile(initialPosition, cameraController, initialTile);
// Générer la première tuile pour la preview
generateNextTile(); generateNextTile();
} }
@ -126,7 +118,6 @@ public class GameController {
} }
public void generateNextTile() { public void generateNextTile() {
// Génère une nouvelle tuile pour la prochaine pose
nextTile = new Tile(); nextTile = new Tile();
updatePreview(); updatePreview();
} }

@ -8,12 +8,12 @@ import java.util.Set;
public class HexagonMouseListener extends MouseAdapter { public class HexagonMouseListener extends MouseAdapter {
private final HexagonTile hexTile; private final HexagonTile hexTile;
private final GameController gameController; private final TilePlacer tilePlacer;
private final Set<Point> availablePositions; private final Set<Point> availablePositions;
public HexagonMouseListener(HexagonTile hexTile, GameController gameController, Set<Point> availablePositions) { public HexagonMouseListener(HexagonTile hexTile, TilePlacer tilePlacer, Set<Point> availablePositions) {
this.hexTile = hexTile; this.hexTile = hexTile;
this.gameController = gameController; this.tilePlacer = tilePlacer;
this.availablePositions = availablePositions; this.availablePositions = availablePositions;
} }
@ -22,12 +22,7 @@ public class HexagonMouseListener extends MouseAdapter {
Point position = hexTile.getPosition(); Point position = hexTile.getPosition();
if (availablePositions.contains(position)) { if (availablePositions.contains(position)) {
System.out.println("Hexagone cliqué à la position : " + position); System.out.println("Hexagone cliqué à la position : " + position);
tilePlacer.placeTile(position);
// Appeler le GameController pour placer une nouvelle tuile à cet emplacement
gameController.placeTile(position);
// Générer la prochaine tuile après avoir placé celle-ci
gameController.generateNextTile();
} else { } else {
System.out.println("Position non disponible pour le placement"); System.out.println("Position non disponible pour le placement");
} }

@ -7,31 +7,31 @@ import javax.swing.SwingUtilities;
public class MouseDragHandler extends MouseAdapter { public class MouseDragHandler extends MouseAdapter {
private CameraController controller; private CameraControllerListener listener;
public MouseDragHandler(CameraController controller, GameContext context) { public MouseDragHandler(CameraControllerListener listener) {
this.controller = controller; this.listener = listener;
} }
@Override @Override
public void mouseDragged(MouseEvent e) { public void mouseDragged(MouseEvent e) {
if (controller.getMouseDragStart() != null && SwingUtilities.isRightMouseButton(e)) { if (listener.getMouseDragStart() != null && SwingUtilities.isRightMouseButton(e)) {
Point current = e.getPoint(); Point current = e.getPoint();
int deltaX = current.x - controller.getMouseDragStart().x; int deltaX = current.x - listener.getMouseDragStart().x;
int deltaY = current.y - controller.getMouseDragStart().y; int deltaY = current.y - listener.getMouseDragStart().y;
// Déplacement dans CameraController // Déplacement dans CameraController
controller.updateViewOffset(deltaX, deltaY); listener.updateViewOffset(deltaX, deltaY);
// Met à jour la position de départ // Met à jour la position de départ
controller.setMouseDragStart(current); listener.setMouseDragStart(current);
} }
} }
@Override @Override
public void mouseReleased(MouseEvent e) { public void mouseReleased(MouseEvent e) {
if (SwingUtilities.isRightMouseButton(e)) { if (SwingUtilities.isRightMouseButton(e)) {
controller.resetMouseDragStart(); listener.resetMouseDragStart();
} }
} }
} }

@ -1,28 +1,28 @@
package controller; package controller;
import java.awt.event.MouseAdapter; import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent; import java.awt.event.MouseEvent;
import javax.swing.SwingUtilities; import javax.swing.SwingUtilities;
public class MousePressHandler extends MouseAdapter { public class MousePressHandler extends MouseAdapter {
private CameraController controller; private CameraControllerListener listener;
public MousePressHandler(CameraController controller, GameContext context) { public MousePressHandler(CameraControllerListener listener) {
this.controller = controller; this.listener = listener;
} }
@Override @Override
public void mousePressed(MouseEvent e) { public void mousePressed(MouseEvent e) {
if (SwingUtilities.isRightMouseButton(e)) { if (SwingUtilities.isRightMouseButton(e)) {
System.out.println("Clic droit détecté"); listener.setMouseDragStart(e.getPoint());
controller.setMouseDragStart(e.getPoint());
} }
} }
@Override @Override
public void mouseReleased(MouseEvent e) { public void mouseReleased(MouseEvent e) {
if (SwingUtilities.isRightMouseButton(e)) { if (SwingUtilities.isRightMouseButton(e)) {
controller.resetMouseDragStart(); listener.resetMouseDragStart();
} }
} }
} }

@ -0,0 +1,7 @@
package controller;
import java.awt.Point;
public interface TilePlacer {
void placeTile(Point position);
}

@ -22,9 +22,9 @@ public class MenuView extends JComponent {
panelCoté.setPreferredSize(new Dimension(300, 0)); panelCoté.setPreferredSize(new Dimension(300, 0));
// Utilisation de getResource pour charger les images // Utilisation de getResource pour charger les images
backgroundImage = new ImageIcon(getClass().getResource("/view/img/bg.png")).getImage(); backgroundImage = new ImageIcon(getClass().getResource("/java/view/img/bg.png")).getImage();
logo = new ImageIcon(getClass().getResource("/view/img/D.png")); logo = new ImageIcon(getClass().getResource("/java/view/img/D.png"));
quit = new ImageIcon(getClass().getResource("/view/img/quit.png")); quit = new ImageIcon(getClass().getResource("/java/view/img/quit.png"));
// Redimensionnement des images // Redimensionnement des images
Image quit1 = quit.getImage(); Image quit1 = quit.getImage();