diff --git a/bin/Music/Music/audio.wav b/bin/Music/Music/audio.wav new file mode 100644 index 0000000..bcf85f8 Binary files /dev/null and b/bin/Music/Music/audio.wav differ diff --git a/bin/controller/CameraController.class b/bin/controller/CameraController.class index ae93e1b..c6c74a9 100644 Binary files a/bin/controller/CameraController.class and b/bin/controller/CameraController.class differ diff --git a/bin/controller/GameContext.class b/bin/controller/GameContext.class index f11e86c..c396d1e 100644 Binary files a/bin/controller/GameContext.class and b/bin/controller/GameContext.class differ diff --git a/bin/controller/GameController.class b/bin/controller/GameController.class index 5d50ee2..22ffe0b 100644 Binary files a/bin/controller/GameController.class and b/bin/controller/GameController.class differ diff --git a/bin/controller/HexagonMouseListener.class b/bin/controller/HexagonMouseListener.class index 3d8dacf..120b69e 100644 Binary files a/bin/controller/HexagonMouseListener.class and b/bin/controller/HexagonMouseListener.class differ diff --git a/bin/controller/MenuController.class b/bin/controller/MenuController.class index af97f19..a0fdbcd 100644 Binary files a/bin/controller/MenuController.class and b/bin/controller/MenuController.class differ diff --git a/bin/controller/MouseDragHandler.class b/bin/controller/MouseDragHandler.class index c0e34aa..6c6bf0d 100644 Binary files a/bin/controller/MouseDragHandler.class and b/bin/controller/MouseDragHandler.class differ diff --git a/bin/controller/MouseWheelController.class b/bin/controller/MouseWheelController.class new file mode 100644 index 0000000..ab9b104 Binary files /dev/null and b/bin/controller/MouseWheelController.class differ diff --git a/bin/controller/Point.class b/bin/controller/Point.class new file mode 100644 index 0000000..d520349 Binary files /dev/null and b/bin/controller/Point.class differ diff --git a/bin/model/Tile.class b/bin/model/Tile.class index 13901ed..ac0f49e 100644 Binary files a/bin/model/Tile.class and b/bin/model/Tile.class differ diff --git a/bin/view/GameView.class b/bin/view/GameView.class index c9e6879..825a6fa 100644 Binary files a/bin/view/GameView.class and b/bin/view/GameView.class differ diff --git a/bin/view/HexagonTile$1.class b/bin/view/HexagonTile$1.class index c6ec849..bdd4171 100644 Binary files a/bin/view/HexagonTile$1.class and b/bin/view/HexagonTile$1.class differ diff --git a/bin/view/HexagonTile.class b/bin/view/HexagonTile.class index 52e3f64..5d7f997 100644 Binary files a/bin/view/HexagonTile.class and b/bin/view/HexagonTile.class differ diff --git a/src/main/java/controller/CameraController.java b/src/main/java/controller/CameraController.java index b30f604..a1950c6 100644 --- a/src/main/java/controller/CameraController.java +++ b/src/main/java/controller/CameraController.java @@ -1,36 +1,34 @@ package controller; -import javax.swing.*; -import java.awt.*; +import javax.swing.JPanel; +import java.awt.Point; + public class CameraController { - private Point mouseDragStart = null; // Stocke la position de départ du clic droit - private Point viewOffset = new Point(0, 0); // Stocke le décalage actuel de la vue - private JPanel gridPanel; + private Point mouseDragStart = null; private GameContext context; + private JPanel gridPanel; public CameraController(JPanel gridPanel, GameContext context) { this.gridPanel = gridPanel; this.context = context; - setupMouseDragToMove(); // Initialise les écouteurs pour gérer le déplacement - } - - public Point getViewOffset() { - return viewOffset; + setupMouseDragToMove(gridPanel); // Initialise les écouteurs pour gérer le déplacement } public void updateViewOffset(int deltaX, int deltaY) { - viewOffset.translate(deltaX, deltaY); - gridPanel.setLocation(viewOffset); + // Met à jour uniquement l'offset dans GameContext + context.updateOffset(deltaX, deltaY); + // Repeindre la grille après mise à jour + context.repaintGrid(gridPanel); + + // Debug : Affiche l'offset actuel + System.out.println("Nouvel offset dans GameContext : " + context.getOffset()); } - private void setupMouseDragToMove() { - MousePressHandler mousePressHandler = new MousePressHandler(this, context); - MouseDragHandler mouseDragHandler = new MouseDragHandler(this, context); - - gridPanel.addMouseListener(mousePressHandler); - gridPanel.addMouseMotionListener(mouseDragHandler); + private void setupMouseDragToMove(JPanel gridPanel) { + gridPanel.addMouseListener(new MousePressHandler(this, context)); + gridPanel.addMouseMotionListener(new MouseDragHandler(this, context)); } public void setMouseDragStart(Point point) { @@ -45,7 +43,7 @@ public class CameraController { this.mouseDragStart = null; } - public JPanel getGridPanel() { - return gridPanel; + public Point getViewOffset() { + return context.getOffset(); } } diff --git a/src/main/java/controller/GameContext.java b/src/main/java/controller/GameContext.java index fe8e3d7..d6383be 100644 --- a/src/main/java/controller/GameContext.java +++ b/src/main/java/controller/GameContext.java @@ -1,12 +1,12 @@ package controller; import view.HexagonTile; - -import java.awt.*; +import java.awt.Point; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; +import javax.swing.JPanel; public class GameContext { private Map<Point, HexagonTile> hexagonMap; // Stocke la grille @@ -36,4 +36,30 @@ public class GameContext { public void updateOffset(int deltaX, int deltaY) { offset.translate(deltaX, deltaY); } + + // Ajout de la méthode pour recalculer les positions de la grille en fonction de l'offset + public void repaintGrid(JPanel gridPanel) { + for (Map.Entry<Point, HexagonTile> entry : hexagonMap.entrySet()) { + Point position = entry.getKey(); + HexagonTile tile = entry.getValue(); + + // Calcule la position avec l'offset + int xOffset = position.x * (int) (50 * 3 / 2); // Ajuste la distance horizontale + int yOffset = position.y * (int) (Math.sqrt(3) * 50); // Ajuste la distance verticale + + // Si la colonne est impaire, décale la tuile d'une demi-hauteur d'hexagone + if (position.x % 2 != 0) { + yOffset += (int) (Math.sqrt(3) * 50 / 2); + } + + // Applique l'offset de vue + xOffset += offset.x; + yOffset += offset.y; + + // Met à jour la position de l'hexagone + tile.setBounds(xOffset, yOffset, 50, 50); + } + gridPanel.revalidate(); + gridPanel.repaint(); + } } diff --git a/src/main/java/controller/GameController.java b/src/main/java/controller/GameController.java index 04af6a4..01fbb78 100644 --- a/src/main/java/controller/GameController.java +++ b/src/main/java/controller/GameController.java @@ -4,58 +4,120 @@ import model.Tile; import view.HexagonTile; import javax.swing.*; -import java.awt.*; -import java.util.HashMap; -import java.util.HashSet; +import java.awt.Point; import java.util.Map; import java.util.Set; public class GameController { - private Map<Point, HexagonTile> hexagonMap; // Carte pour stocker les tuiles par position - private Set<Point> availablePositions; // Ensemble pour suivre les positions disponibles + private Map<Point, HexagonTile> hexagonMap; + private Set<Point> availablePositions; private JPanel gridPanel; + private Tile nextTile; + private HexagonTile nextTilePreview; + private GameContext gameContext; public GameController(GameContext gameContext, JPanel gridPanel, Tile nextTile, HexagonTile nextTilePreview) { + this.gameContext = gameContext; this.gridPanel = gridPanel; + this.hexagonMap = gameContext.getHexagonMap(); + this.availablePositions = gameContext.getAvailablePositions(); + this.nextTile = nextTile; + this.nextTilePreview = nextTilePreview; - // Initialiser hexagonMap et availablePositions - this.hexagonMap = new HashMap<>(); - this.availablePositions = new HashSet<>(); + // Mettre à jour la preview initiale + updatePreview(); + } + + public void placeTile(Point position) { + // Vérifier si la position est disponible + if (availablePositions.contains(position)) { + HexagonTile hexTile = hexagonMap.get(position); + if (hexTile == null) { + System.out.println("Erreur: hexTile est null à la position : " + position); + return; + } + + // Assigner la tuile actuelle + hexTile.setTile(nextTile); + gridPanel.revalidate(); + gridPanel.repaint(); + + // Retirer la position des positions disponibles + availablePositions.remove(position); + + // Mettre à jour les positions adjacentes + Point[] adjacentPositions = getAdjacentPositions(position); + for (Point adj : adjacentPositions) { + if (!hexagonMap.containsKey(adj)) { + availablePositions.add(adj); + addHexagonTile(adj, gridPanel, 50, null, null); // Ajouter des placeholders + } + } + + // Repeindre la grille + gameContext.repaintGrid(gridPanel); + + // Générer une nouvelle tuile pour la prochaine preview + generateNextTile(); + } + } + + public void initializeGame(CameraController cameraController) { + Tile initialTile = generateRandomTile(); + + int centerX = gridPanel.getPreferredSize().width / 2; + int centerY = gridPanel.getPreferredSize().height / 2; + + Point initialPosition = new Point(0, 0); + initialPosition.setLocation(centerX / 50, centerY / 50); + + placeInitialTile(initialPosition, cameraController, initialTile); + + // Générer la première tuile pour la preview + generateNextTile(); } public void placeInitialTile(Point position, CameraController cameraController, Tile tile) { - // Place la première tuile pleine au point central - addHexagonTile(position, gridPanel, 50, cameraController, tile); + addHexagonTile(position, gridPanel, 50, cameraController, tile); availablePositions.remove(position); - // Ajouter des placeholders autour de la première tuile Point[] adjacentPositions = getAdjacentPositions(position); for (Point adj : adjacentPositions) { if (!hexagonMap.containsKey(adj)) { availablePositions.add(adj); - addHexagonTile(adj, gridPanel, 50, cameraController, null); // Passer `null` pour les placeholders + addHexagonTile(adj, gridPanel, 50, cameraController, null); } } } public void addHexagonTile(Point position, JPanel panel, int hexSize, CameraController cameraController, Tile tile) { + if (position == null || panel == null) { + System.out.println("Erreur : position ou panel est null"); + return; + } + int xOffset = position.x * (int) (hexSize * 3 / 2); int yOffset = position.y * (int) (Math.sqrt(3) * hexSize); - Point viewOffset = cameraController.getViewOffset(); - xOffset += viewOffset.x; - yOffset += viewOffset.y; + if (cameraController != null) { + Point viewOffset = cameraController.getViewOffset(); + xOffset += viewOffset.x; + yOffset += viewOffset.y; + } if (position.x % 2 != 0) { yOffset += (int) (Math.sqrt(3) * hexSize / 2); } HexagonTile hexTile = new HexagonTile(position); - hexTile.setTile(tile); // Place la tuile fournie, ou null pour un placeholder - hexTile.setBounds(xOffset, yOffset, hexSize, hexSize); + if (tile != null) { + hexTile.setTile(tile); + } else { + System.out.println("Aucun tile n'a été fourni pour cette position : " + position); + } - // Ajout de l'écouteur pour gérer le clic sur l'hexagone - hexTile.addMouseListener(new HexagonMouseListener(hexTile, this, availablePositions, cameraController)); + hexTile.setBounds(xOffset, yOffset, hexSize, hexSize); + hexTile.addMouseListener(new HexagonMouseListener(hexTile, this, availablePositions)); hexagonMap.put(position, hexTile); panel.add(hexTile); @@ -63,14 +125,44 @@ public class GameController { panel.repaint(); } + public void generateNextTile() { + // Génère une nouvelle tuile pour la prochaine pose + nextTile = new Tile(); + updatePreview(); + } + + private void updatePreview() { + nextTilePreview.setTile(nextTile); + nextTilePreview.repaint(); + } + private Point[] getAdjacentPositions(Point position) { - return new Point[]{ - new Point(position.x + 1, position.y), - new Point(position.x - 1, position.y), - new Point(position.x, position.y + 1), - new Point(position.x, position.y - 1), - new Point(position.x + 1, position.y - 1), - new Point(position.x - 1, position.y + 1) - }; + if (position.x % 2 == 0) { + return new Point[]{ + new Point(position.x + 1, position.y), + new Point(position.x - 1, position.y), + new Point(position.x, position.y + 1), + new Point(position.x, position.y - 1), + new Point(position.x + 1, position.y - 1), + new Point(position.x - 1, position.y - 1) + }; + } else { + return new Point[]{ + new Point(position.x + 1, position.y), + new Point(position.x - 1, position.y), + new Point(position.x, position.y + 1), + new Point(position.x, position.y - 1), + new Point(position.x + 1, position.y + 1), + new Point(position.x - 1, position.y + 1) + }; + } + } + + private Tile generateRandomTile() { + return new Tile(); + } + + public Tile getNextTile() { + return nextTile; } } diff --git a/src/main/java/controller/HexagonMouseListener.java b/src/main/java/controller/HexagonMouseListener.java index 6111e8d..c04194a 100644 --- a/src/main/java/controller/HexagonMouseListener.java +++ b/src/main/java/controller/HexagonMouseListener.java @@ -1,18 +1,19 @@ package controller; import view.HexagonTile; +import java.awt.Point; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; -import java.awt.Point; import java.util.Set; public class HexagonMouseListener extends MouseAdapter { - private final HexagonTile hexTile; + private final GameController gameController; private final Set<Point> availablePositions; - public HexagonMouseListener(HexagonTile hexTile, GameController gameController, Set<Point> availablePositions, CameraController cameraController) { + public HexagonMouseListener(HexagonTile hexTile, GameController gameController, Set<Point> availablePositions) { this.hexTile = hexTile; + this.gameController = gameController; this.availablePositions = availablePositions; } @@ -21,8 +22,12 @@ public class HexagonMouseListener extends MouseAdapter { Point position = hexTile.getPosition(); if (availablePositions.contains(position)) { System.out.println("Hexagone cliqué à la position : " + position); - // Logique de placement de la tuile ou appel à GameController ici si nécessaire - // Par exemple, nous pourrions générer la tuile suivante directement ici + + // 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 { System.out.println("Position non disponible pour le placement"); } diff --git a/src/main/java/controller/MenuController.java b/src/main/java/controller/MenuController.java index f4fc1d2..7596a77 100644 --- a/src/main/java/controller/MenuController.java +++ b/src/main/java/controller/MenuController.java @@ -4,12 +4,8 @@ import view.*; public class MenuController { - private MenuModel model; - private MenuView view; public MenuController(MenuModel model, MenuView view) { - this.model = model; - this.view = view; view.getResumeButton().addActionListener(new ResListener()); view.getNewGameButton().addActionListener(new NewListener()); diff --git a/src/main/java/controller/MouseDragHandler.java b/src/main/java/controller/MouseDragHandler.java index a825d4c..f9db7f3 100644 --- a/src/main/java/controller/MouseDragHandler.java +++ b/src/main/java/controller/MouseDragHandler.java @@ -1,6 +1,5 @@ package controller; -import view.HexagonTile; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.Point; @@ -9,11 +8,9 @@ import javax.swing.SwingUtilities; public class MouseDragHandler extends MouseAdapter { private CameraController controller; - private GameContext context; public MouseDragHandler(CameraController controller, GameContext context) { this.controller = controller; - this.context = context; } @Override @@ -23,18 +20,11 @@ public class MouseDragHandler extends MouseAdapter { int deltaX = current.x - controller.getMouseDragStart().x; int deltaY = current.y - controller.getMouseDragStart().y; - // Déplace chaque tuile dans le contexte de la grille - for (HexagonTile hexTile : context.getHexagonMap().values()) { - Point currentPos = hexTile.getLocation(); - hexTile.setLocation(currentPos.x + deltaX, currentPos.y + deltaY); - } + // Déplacement dans CameraController + controller.updateViewOffset(deltaX, deltaY); - // Mettre à jour la position initiale pour le prochain déplacement + // Met à jour la position de départ controller.setMouseDragStart(current); - - // Rafraîchir la vue - controller.getGridPanel().revalidate(); - controller.getGridPanel().repaint(); } } diff --git a/src/main/java/controller/MouseWheelController.java b/src/main/java/controller/MouseWheelController.java new file mode 100644 index 0000000..d12083f --- /dev/null +++ b/src/main/java/controller/MouseWheelController.java @@ -0,0 +1,31 @@ +package controller; + +import model.Tile; +import view.HexagonTile; + +import java.awt.event.MouseWheelEvent; +import java.awt.event.MouseWheelListener; + +public class MouseWheelController implements MouseWheelListener { + + private HexagonTile previewTile; + private GameController gameController; + + public MouseWheelController(HexagonTile previewTile, GameController gameController) { + this.previewTile = previewTile; + this.gameController = gameController; + } + + @Override + public void mouseWheelMoved(MouseWheelEvent e) { + Tile nextTile = gameController.getNextTile(); + + if (e.getWheelRotation() < 0) { + nextTile.rotateClockwise(); + } else if (e.getWheelRotation() > 0) { + nextTile.rotateClockwise(); + } + + previewTile.repaint(); // Mettre à jour l'aperçu avec la nouvelle rotation + } +} diff --git a/src/main/java/model/Tile.java b/src/main/java/model/Tile.java index 7c8723a..871ad66 100644 --- a/src/main/java/model/Tile.java +++ b/src/main/java/model/Tile.java @@ -6,11 +6,23 @@ public class Tile { private TerrainType[] terrains; // 2 terrains maximum par tuile private int segmentsForTerrain1; // Nombre de segments pour le premier terrain private static final Random random = new Random(); + private int rotation; public Tile() { this.terrains = new TerrainType[2]; // Seulement deux terrains generateTerrains(); assignSegments(); + this.rotation = 0; // Rotation initiale à 0 + } + + // Méthode pour tourner la tuile dans le sens des aiguilles d'une montre + public void rotateClockwise() { + rotation = (rotation + 1) % 6; // Modulo 6 pour garder une rotation entre 0 et 5 + } + + // Méthode pour obtenir la rotation actuelle + public int getRotation() { + return rotation; } // Génère deux terrains aléatoires pour la tuile diff --git a/src/main/java/view/GameView.java b/src/main/java/view/GameView.java index 2edd334..601e691 100644 --- a/src/main/java/view/GameView.java +++ b/src/main/java/view/GameView.java @@ -3,6 +3,7 @@ package view; import controller.GameController; import controller.CameraController; import controller.GameContext; +import controller.MouseWheelController; import model.Tile; import javax.swing.*; @@ -10,8 +11,8 @@ import java.awt.*; public class GameView extends JFrame { private JPanel gridPanel; - private Tile nextTile; - private HexagonTile nextTilePreview; + private Tile nextTile; // Tuile en attente + private HexagonTile nextTilePreview; // Composant pour afficher la tuile en attente private GameController gameController; private CameraController cameraController; private GameContext gameContext; @@ -34,48 +35,42 @@ public class GameView extends JFrame { add(gridPanel, BorderLayout.CENTER); - // Créer le panneau de contrôle à droite + // Initialiser la tuile en attente et la preview + nextTile = new Tile(); + nextTilePreview = new HexagonTile(null); + nextTilePreview.setTile(nextTile); // Lier nextTile à la preview JPanel controlPanel = createControlPanel(); controlPanel.setPreferredSize(new Dimension(200, 600)); add(controlPanel, BorderLayout.EAST); // Initialiser les contrôleurs avec le contexte de jeu - gameController = new GameController(gameContext, gridPanel, nextTile, nextTilePreview); + gameController = new GameController(gameContext, gridPanel, nextTile, nextTilePreview); // Passer nextTile et nextTilePreview cameraController = new CameraController(gridPanel, gameContext); - // Générer une première tuile pleine et la placer au centre - placeInitialTileWithRandomTile(); + // Ajouter un écouteur pour la molette de la souris + MouseWheelController wheelController = new MouseWheelController(nextTilePreview, gameController); + + addMouseWheelListener(wheelController); + + // Appeler l'initialisation du jeu + gameController.initializeGame(cameraController); setVisible(true); } private JPanel createHexagonGrid() { JPanel panel = new JPanel(); - panel.setLayout(null); + panel.setLayout(null); // Permet de placer des composants avec des coordonnées absolues panel.setBackground(Color.WHITE); - panel.setPreferredSize(new Dimension(800, 800)); + panel.setPreferredSize(new Dimension(800, 800)); // Peut être ajusté si nécessaire return panel; } private void centerGridPanel() { - int gridX = (getWidth() - gridPanel.getPreferredSize().width) / 2; - int gridY = (getHeight() - gridPanel.getPreferredSize().height) / 2; - - gridPanel.setLocation(gridX, gridY); - gameContext.updateOffset(gridX, gridY); // Mettre à jour l'offset dans GameContext - } - - private Tile generateRandomTile() { - return new Tile(); // Génère une tuile aléatoire avec des caractéristiques définies dans Tile.java - } - - private void placeInitialTileWithRandomTile() { - // Générer une première tuile pleine de manière aléatoire - Tile initialTile = generateRandomTile(); - - // Utiliser `placeInitialTile` pour placer cette tuile au centre de la grille - Point initialPosition = new Point(0, 0); - gameController.placeInitialTile(initialPosition, cameraController, initialTile); + int centerX = (getWidth() - gridPanel.getPreferredSize().width) / 2; + int centerY = (getHeight() - gridPanel.getPreferredSize().height) / 2; + gameContext.updateOffset(centerX, centerY); + gameContext.repaintGrid(gridPanel); // Rappel pour centrer initialement les tuiles } private JPanel createControlPanel() { @@ -87,7 +82,6 @@ public class GameView extends JFrame { panel.add(new JLabel("Prochaine tuile : ")); panel.add(Box.createRigidArea(new Dimension(0, 10))); - nextTilePreview = new HexagonTile(null); nextTilePreview.setPreferredSize(new Dimension(150, 150)); nextTilePreview.setBackground(Color.GRAY); nextTilePreview.setOpaque(true); diff --git a/src/main/java/view/HexagonGridPanel.java b/src/main/java/view/HexagonGridPanel.java deleted file mode 100644 index dd9fda6..0000000 --- a/src/main/java/view/HexagonGridPanel.java +++ /dev/null @@ -1,16 +0,0 @@ -package view; - -import javax.swing.*; -import java.awt.*; - -public class HexagonGridPanel extends JPanel { - - public HexagonGridPanel() { - super(null); // Layout null pour gérer manuellement la position des composants - } - - @Override - public Dimension getPreferredSize() { - return new Dimension(3000, 3000); - } -} diff --git a/src/main/java/view/HexagonTile.java b/src/main/java/view/HexagonTile.java index 7cf1e31..03c4c44 100644 --- a/src/main/java/view/HexagonTile.java +++ b/src/main/java/view/HexagonTile.java @@ -27,6 +27,10 @@ public class HexagonTile extends JPanel { repaint(); } + public Tile getTile() { + return tile; + } + public boolean isFilled() { return this.tile != null; // Vérifie si la tuile a déjà été placée } @@ -45,8 +49,8 @@ public class HexagonTile extends JPanel { g2d.setClip(largeHexagon); if (tile != null) { - // Dessiner les 6 segments de terrain en fonction des proportions - drawTerrainSegments(g2d, centerX, centerY, largeRadius); + // Dessiner les 6 segments de terrain en fonction des proportions et de la rotation + drawTerrainSegments(g2d, centerX, centerY, largeRadius, tile.getRotation()); } else { g2d.setColor(Color.LIGHT_GRAY); // Couleur par défaut pour une case vide g2d.fill(largeHexagon); @@ -59,14 +63,12 @@ public class HexagonTile extends JPanel { g2d.draw(largeHexagon); } - // Dessiner les 6 segments de terrain avec une répartition variée - private void drawTerrainSegments(Graphics2D g2d, int centerX, int centerY, int radius) { - // Déterminer combien de segments sont attribués à chaque terrain + // Dessiner les 6 segments de terrain avec la rotation + private void drawTerrainSegments(Graphics2D g2d, int centerX, int centerY, int radius, int rotation) { int segmentsTerrain1 = tile.getSegmentsForTerrain(0); - - // Dessiner les segments adjacents pour chaque terrain for (int i = 0; i < 6; i++) { - if (i < segmentsTerrain1) { + int segmentIndex = (i + rotation) % 6; // Appliquer la rotation aux segments + if (segmentIndex < segmentsTerrain1) { g2d.setColor(getTerrainColor(tile.getTerrain(0))); // Premier terrain } else { g2d.setColor(getTerrainColor(tile.getTerrain(1))); // Deuxième terrain diff --git a/src/main/java/view/TileView.java b/src/main/java/view/TileView.java deleted file mode 100644 index d7684c6..0000000 --- a/src/main/java/view/TileView.java +++ /dev/null @@ -1,84 +0,0 @@ -package view; - -import model.Tile; -import model.TerrainType; - -import javax.swing.*; -import java.awt.*; -import java.awt.geom.Path2D; - -public class TileView extends JPanel { - - private Tile tile; - - public TileView(Tile tile) { - this.tile = tile; - setPreferredSize(new Dimension(100, 100)); - } - - @Override - protected void paintComponent(Graphics g) { - super.paintComponent(g); - Graphics2D g2d = (Graphics2D) g; - - int centerX = getWidth() / 2; - int centerY = getHeight() / 2; - int largeRadius = 50; - - // Créer la zone de découpe pour le grand hexagone - Shape largeHexagon = createHexagon(centerX, centerY, largeRadius); - g2d.setClip(largeHexagon); - - // Diviser l'hexagone en 4 parties (quart de cercle) pour chaque terrain - drawTerrainQuadrants(g2d, centerX, centerY, largeRadius); - - // Dessiner la bordure de l'hexagone - g2d.setClip(null); - g2d.setColor(Color.BLACK); - g2d.setStroke(new BasicStroke(3)); // Bordure épaisse - g2d.draw(largeHexagon); - } - - // Dessiner les 4 quadrants de terrain - private void drawTerrainQuadrants(Graphics2D g2d, int centerX, int centerY, int radius) { - for (int i = 0; i < 4; i++) { - g2d.setColor(getTerrainColor(tile.getTerrain(i))); - g2d.fillArc(centerX - radius, centerY - radius, 2 * radius, 2 * radius, 90 * i, 90); - } - } - - // Créer la forme hexagonale - private Shape createHexagon(int centerX, int centerY, int radius) { - Path2D hexagon = new Path2D.Double(); - for (int i = 0; i < 6; i++) { - double angle = Math.toRadians(60 * i); - double x = centerX + radius * Math.cos(angle); - double y = centerY + radius * Math.sin(angle); - if (i == 0) { - hexagon.moveTo(x, y); - } else { - hexagon.lineTo(x, y); - } - } - hexagon.closePath(); - return hexagon; - } - - // Obtenir la couleur en fonction du type de terrain - private Color getTerrainColor(TerrainType terrain) { - switch (terrain) { - case MER: - return Color.BLUE; - case CHAMP: - return Color.YELLOW; - case PRE: - return Color.GREEN; - case FORET: - return new Color(34, 139, 34); // Vert foncé - case MONTAGNE: - return Color.GRAY; - default: - return Color.WHITE; - } - } -}