diff --git a/src/main/classes/controller/CameraController.class b/bin/controller/CameraController.class similarity index 100% rename from src/main/classes/controller/CameraController.class rename to bin/controller/CameraController.class diff --git a/src/main/classes/controller/CameraControllerListener.class b/bin/controller/CameraControllerListener.class similarity index 100% rename from src/main/classes/controller/CameraControllerListener.class rename to bin/controller/CameraControllerListener.class diff --git a/src/main/classes/controller/GameContext.class b/bin/controller/GameContext.class similarity index 100% rename from src/main/classes/controller/GameContext.class rename to bin/controller/GameContext.class diff --git a/bin/controller/GameController.class b/bin/controller/GameController.class new file mode 100644 index 0000000..f6fe2f8 Binary files /dev/null and b/bin/controller/GameController.class differ diff --git a/src/main/classes/controller/HexagonMouseListener.class b/bin/controller/HexagonMouseListener.class similarity index 100% rename from src/main/classes/controller/HexagonMouseListener.class rename to bin/controller/HexagonMouseListener.class diff --git a/src/main/classes/controller/MenuController.class b/bin/controller/MenuController.class similarity index 100% rename from src/main/classes/controller/MenuController.class rename to bin/controller/MenuController.class diff --git a/src/main/classes/controller/MouseDragHandler.class b/bin/controller/MouseDragHandler.class similarity index 100% rename from src/main/classes/controller/MouseDragHandler.class rename to bin/controller/MouseDragHandler.class diff --git a/src/main/classes/controller/MousePressHandler.class b/bin/controller/MousePressHandler.class similarity index 100% rename from src/main/classes/controller/MousePressHandler.class rename to bin/controller/MousePressHandler.class diff --git a/bin/controller/MouseWheelController.class b/bin/controller/MouseWheelController.class new file mode 100644 index 0000000..426e14f Binary files /dev/null and b/bin/controller/MouseWheelController.class differ diff --git a/src/main/classes/controller/NewListener.class b/bin/controller/NewListener.class similarity index 100% rename from src/main/classes/controller/NewListener.class rename to bin/controller/NewListener.class diff --git a/src/main/classes/controller/QuiListener.class b/bin/controller/QuiListener.class similarity index 100% rename from src/main/classes/controller/QuiListener.class rename to bin/controller/QuiListener.class diff --git a/src/main/classes/controller/ResListener.class b/bin/controller/ResListener.class similarity index 100% rename from src/main/classes/controller/ResListener.class rename to bin/controller/ResListener.class diff --git a/src/main/classes/controller/TilePlacer.class b/bin/controller/TilePlacer.class similarity index 100% rename from src/main/classes/controller/TilePlacer.class rename to bin/controller/TilePlacer.class diff --git a/src/main/classes/java/view/img/D.png b/bin/java/view/img/D.png similarity index 100% rename from src/main/classes/java/view/img/D.png rename to bin/java/view/img/D.png diff --git a/src/main/classes/java/view/img/bg.png b/bin/java/view/img/bg.png similarity index 100% rename from src/main/classes/java/view/img/bg.png rename to bin/java/view/img/bg.png diff --git a/src/main/classes/java/view/img/quit.png b/bin/java/view/img/quit.png similarity index 100% rename from src/main/classes/java/view/img/quit.png rename to bin/java/view/img/quit.png diff --git a/bin/lib/mariadb.jar b/bin/lib/mariadb.jar new file mode 100644 index 0000000..40028c4 Binary files /dev/null and b/bin/lib/mariadb.jar differ diff --git a/src/main/classes/main/Main.class b/bin/main/Main.class similarity index 100% rename from src/main/classes/main/Main.class rename to bin/main/Main.class diff --git a/src/main/classes/model/MenuModel.class b/bin/model/MenuModel.class similarity index 100% rename from src/main/classes/model/MenuModel.class rename to bin/model/MenuModel.class diff --git a/src/main/classes/model/TerrainType.class b/bin/model/TerrainType.class similarity index 100% rename from src/main/classes/model/TerrainType.class rename to bin/model/TerrainType.class diff --git a/bin/model/Tile.class b/bin/model/Tile.class new file mode 100644 index 0000000..127aa6a Binary files /dev/null and b/bin/model/Tile.class differ diff --git a/bin/model/TileDatabaseManager.class b/bin/model/TileDatabaseManager.class new file mode 100644 index 0000000..d28b27e Binary files /dev/null and b/bin/model/TileDatabaseManager.class differ diff --git a/src/main/classes/view/App.class b/bin/view/App.class similarity index 100% rename from src/main/classes/view/App.class rename to bin/view/App.class diff --git a/src/main/classes/view/BtnPerso.class b/bin/view/BtnPerso.class similarity index 100% rename from src/main/classes/view/BtnPerso.class rename to bin/view/BtnPerso.class diff --git a/src/main/classes/view/ButtonHoverListener.class b/bin/view/ButtonHoverListener.class similarity index 100% rename from src/main/classes/view/ButtonHoverListener.class rename to bin/view/ButtonHoverListener.class diff --git a/bin/view/GameView$1.class b/bin/view/GameView$1.class new file mode 100644 index 0000000..09a5b53 Binary files /dev/null and b/bin/view/GameView$1.class differ diff --git a/bin/view/GameView.class b/bin/view/GameView.class new file mode 100644 index 0000000..7671e64 Binary files /dev/null and b/bin/view/GameView.class differ diff --git a/src/main/classes/view/HexagonTile$1.class b/bin/view/HexagonTile$1.class similarity index 98% rename from src/main/classes/view/HexagonTile$1.class rename to bin/view/HexagonTile$1.class index bdd4171..2997098 100644 Binary files a/src/main/classes/view/HexagonTile$1.class and b/bin/view/HexagonTile$1.class differ diff --git a/bin/view/HexagonTile.class b/bin/view/HexagonTile.class new file mode 100644 index 0000000..1d2ae2a Binary files /dev/null and b/bin/view/HexagonTile.class differ diff --git a/src/main/classes/view/MenuView.class b/bin/view/MenuView.class similarity index 100% rename from src/main/classes/view/MenuView.class rename to bin/view/MenuView.class diff --git a/mariadb.jar b/mariadb.jar new file mode 100644 index 0000000..40028c4 Binary files /dev/null and b/mariadb.jar differ diff --git a/src/main/classes/controller/GameController.class b/src/main/classes/controller/GameController.class deleted file mode 100644 index 46e2ddb..0000000 Binary files a/src/main/classes/controller/GameController.class and /dev/null differ diff --git a/src/main/classes/controller/MouseWheelController.class b/src/main/classes/controller/MouseWheelController.class deleted file mode 100644 index ab9b104..0000000 Binary files a/src/main/classes/controller/MouseWheelController.class and /dev/null differ diff --git a/src/main/classes/model/Tile.class b/src/main/classes/model/Tile.class deleted file mode 100644 index ac0f49e..0000000 Binary files a/src/main/classes/model/Tile.class and /dev/null differ diff --git a/src/main/classes/view/GameView.class b/src/main/classes/view/GameView.class deleted file mode 100644 index 825a6fa..0000000 Binary files a/src/main/classes/view/GameView.class and /dev/null differ diff --git a/src/main/classes/view/HexagonTile.class b/src/main/classes/view/HexagonTile.class deleted file mode 100644 index 5d7f997..0000000 Binary files a/src/main/classes/view/HexagonTile.class and /dev/null differ diff --git a/src/main/java/controller/GameController.java b/src/main/java/controller/GameController.java index a9ba2e4..7d49ad6 100644 --- a/src/main/java/controller/GameController.java +++ b/src/main/java/controller/GameController.java @@ -1,10 +1,12 @@ package controller; import model.Tile; +import model.TileDatabaseManager; import view.HexagonTile; import javax.swing.*; import java.awt.Point; +import java.util.List; import java.util.Map; import java.util.Set; @@ -15,19 +17,31 @@ public class GameController implements TilePlacer { private Tile nextTile; private HexagonTile nextTilePreview; private GameContext gameContext; + private TileDatabaseManager dbManager; + private List<Tile> currentTiles; + private int tileIndex; - public GameController(GameContext gameContext, JPanel gridPanel, Tile nextTile, HexagonTile nextTilePreview) { + public GameController(GameContext gameContext, JPanel gridPanel, HexagonTile nextTilePreview) { this.gameContext = gameContext; this.gridPanel = gridPanel; this.hexagonMap = gameContext.getHexagonMap(); this.availablePositions = gameContext.getAvailablePositions(); - this.nextTile = nextTile; this.nextTilePreview = nextTilePreview; - // Mettre à jour la preview initiale + this.dbManager = new TileDatabaseManager(); + this.tileIndex = 0; + + loadSeries(1); // Charger la série par défaut (ex. série 1) updatePreview(); } + public void loadSeries(int idSeries) { + currentTiles = dbManager.getTilesBySeries(idSeries); + tileIndex = 0; + System.out.println("Série " + idSeries + " chargée avec " + currentTiles.size() + " tuiles."); + } + + @Override public void placeTile(Point position) { if (availablePositions.contains(position)) { @@ -37,7 +51,9 @@ public class GameController implements TilePlacer { return; } - hexTile.setTile(nextTile); + System.out.println("Placement de la tuile avec ID : " + (nextTile != null ? nextTile.getId() : "null") + " à la position : " + position); + + hexTile.setTile(nextTile); // Place la tuile actuelle gridPanel.revalidate(); gridPanel.repaint(); @@ -52,32 +68,52 @@ public class GameController implements TilePlacer { } gameContext.repaintGrid(gridPanel); - generateNextTile(); + generateNextTile(); // Génère la tuile suivante } } - public void initializeGame(CameraController cameraController) { - Tile initialTile = generateRandomTile(); + + public void initializeGame(CameraController cameraController) { + generateNextTile(); // Génère la première tuile et assigne une tuile valide à `nextTile` + + Tile initialTile = getNextTile(); // Récupère la tuile générée + if (initialTile == null) { + System.out.println("Erreur : aucune tuile initiale générée."); + return; // Arrête l'initialisation si aucune tuile n'a été générée + } + + System.out.println("ID de la tuile initiale générée : " + initialTile.getId()); // Affiche l'ID de la tuile initiale + 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); + initialPosition.setLocation(centerX / 50, centerY / 50); // Calcule la position centrale + + placeInitialTile(initialPosition, cameraController, initialTile); // Place la première tuile generateNextTile(); + } + + public void placeInitialTile(Point position, CameraController cameraController, Tile tile) { - addHexagonTile(position, gridPanel, 50, cameraController, tile); - availablePositions.remove(position); - + if (tile == null) { + System.out.println("Erreur : tuile initiale non définie."); + return; + } + + System.out.println("Placement de la tuile initiale avec ID : " + tile.getId() + " à la position : " + position); + + addHexagonTile(position, gridPanel, 50, cameraController, tile); // Place la première tuile + availablePositions.remove(position); // Marque la position comme occupée + Point[] adjacentPositions = getAdjacentPositions(position); for (Point adj : adjacentPositions) { if (!hexagonMap.containsKey(adj)) { availablePositions.add(adj); - addHexagonTile(adj, gridPanel, 50, cameraController, null); + addHexagonTile(adj, gridPanel, 50, cameraController, null); // Placeholder vide pour les positions adjacentes } } } @@ -87,44 +123,68 @@ public class GameController implements TilePlacer { 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); - + 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); + + boolean isPlaceholder = (tile == null); // Si tile est null, c'est un placeholder + HexagonTile hexTile = new HexagonTile(position, isPlaceholder); + if (tile != null) { hexTile.setTile(tile); } else { System.out.println("Aucun tile n'a été fourni pour cette position : " + position); } - + hexTile.setBounds(xOffset, yOffset, hexSize, hexSize); hexTile.addMouseListener(new HexagonMouseListener(hexTile, this, availablePositions)); - + hexagonMap.put(position, hexTile); panel.add(hexTile); panel.revalidate(); panel.repaint(); } + public void generateNextTile() { - nextTile = new Tile(); - updatePreview(); + if (tileIndex < currentTiles.size()) { + nextTile = currentTiles.get(tileIndex++); + System.out.println("Génération de la prochaine tuile avec ID : " + nextTile.getId() + " (index " + tileIndex + ")"); + updatePreview(); // Met à jour l'aperçu de la tuile suivante + } else { + nextTile = null; // Fin de la série, plus de tuiles à placer + updatePreview(); // Met à jour l'aperçu pour refléter l'absence de prochaine tuile + System.out.println("Fin de la série. Plus de tuiles à placer."); + } } + + + private void updatePreview() { - nextTilePreview.setTile(nextTile); - nextTilePreview.repaint(); + if (nextTilePreview != null) { + if (nextTile != null) { + nextTilePreview.setTile(nextTile); // Met à jour avec une tuile valide + } else { + nextTilePreview.setTile(null); // Affiche un placeholder ou un message si `nextTile` est null + } + nextTilePreview.repaint(); + } + } + + + public Tile getNextTile() { + return nextTile; } private Point[] getAdjacentPositions(Point position) { @@ -148,12 +208,4 @@ public class GameController implements TilePlacer { }; } } - - private Tile generateRandomTile() { - return new Tile(); - } - - public Tile getNextTile() { - return nextTile; - } } diff --git a/src/main/java/controller/MouseWheelController.java b/src/main/java/controller/MouseWheelController.java index d12083f..486f7d6 100644 --- a/src/main/java/controller/MouseWheelController.java +++ b/src/main/java/controller/MouseWheelController.java @@ -10,6 +10,8 @@ public class MouseWheelController implements MouseWheelListener { private HexagonTile previewTile; private GameController gameController; + private long lastRotationTime = 0; // Stocke le temps de la dernière rotation + private static final int ROTATION_DELAY = 100; // Délai minimum en millisecondes entre chaque rotation public MouseWheelController(HexagonTile previewTile, GameController gameController) { this.previewTile = previewTile; @@ -18,14 +20,21 @@ public class MouseWheelController implements MouseWheelListener { @Override public void mouseWheelMoved(MouseWheelEvent e) { - Tile nextTile = gameController.getNextTile(); + long currentTime = System.currentTimeMillis(); - if (e.getWheelRotation() < 0) { - nextTile.rotateClockwise(); - } else if (e.getWheelRotation() > 0) { - nextTile.rotateClockwise(); + // Si le délai entre les rotations est respecté, on procède à la rotation + if (currentTime - lastRotationTime >= ROTATION_DELAY) { + Tile nextTile = gameController.getNextTile(); + if (nextTile != null) { + if (e.getWheelRotation() < 0) { + nextTile.rotateClockwise(); + } else if (e.getWheelRotation() > 0) { + nextTile.rotateCounterClockwise(); + } + + previewTile.repaint(); // Mettre à jour l'aperçu avec la nouvelle rotation + lastRotationTime = currentTime; // Mise à jour du temps de la dernière rotation + } } - - 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 871ad66..29cbfa6 100644 --- a/src/main/java/model/Tile.java +++ b/src/main/java/model/Tile.java @@ -1,76 +1,41 @@ package model; -import java.util.Random; - public class Tile { + private int id; // Ajoute l'attribut id 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 segmentsForTerrain1; private int rotation; - public Tile() { - this.terrains = new TerrainType[2]; // Seulement deux terrains - generateTerrains(); - assignSegments(); - this.rotation = 0; // Rotation initiale à 0 + // Constructeur modifié pour inclure l'ID + public Tile(int id, TerrainType terrain1, TerrainType terrain2, int segmentsForTerrain1) { + this.id = id; + this.terrains = new TerrainType[]{terrain1, terrain2}; + this.segmentsForTerrain1 = segmentsForTerrain1; + this.rotation = 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 + rotation = (rotation + 1) % 6; } - // Méthode pour obtenir la rotation actuelle + public void rotateCounterClockwise() { + rotation = (rotation + 5) % 6; // Tourner dans le sens inverse, équivalent à -1 dans un modulo 6 + } + + public int getRotation() { return rotation; } - // Génère deux terrains aléatoires pour la tuile - private void generateTerrains() { - terrains[0] = generateRandomTerrain(); - terrains[1] = generateRandomTerrain(); - - // Assure que les deux terrains sont différents - while (terrains[0] == terrains[1]) { - terrains[1] = generateRandomTerrain(); - } - } - - // Assigner le nombre de segments pour chaque terrain avec plus de diversité - private void assignSegments() { - // Terrain 1 occupe entre 1 et 5 segments, le reste pour le terrain 2 - this.segmentsForTerrain1 = random.nextInt(5) + 1; - } - - // Génère un terrain aléatoire avec plus de variété dans les probabilités - private TerrainType generateRandomTerrain() { - int rand = random.nextInt(100); - - if (rand < 15) { - return TerrainType.MER; // 15% MER - } else if (rand < 30) { - return TerrainType.CHAMP; // 15% CHAMP - } else if (rand < 50) { - return TerrainType.PRE; // 20% PRE - } else if (rand < 75) { - return TerrainType.FORET; // 25% FORET - } else { - return TerrainType.MONTAGNE; // 25% MONTAGNE - } + public int getId() { + return id; } public TerrainType getTerrain(int index) { - if (index >= 0 && index < 2) { - return terrains[index]; - } - return null; + return index >= 0 && index < 2 ? terrains[index] : null; } public int getSegmentsForTerrain(int index) { - if (index == 0) { - return segmentsForTerrain1; // Nombre de segments pour le premier terrain - } else { - return 6 - segmentsForTerrain1; // Le reste pour le second terrain - } + return index == 0 ? segmentsForTerrain1 : 6 - segmentsForTerrain1; } } diff --git a/src/main/java/model/TileDatabaseManager.java b/src/main/java/model/TileDatabaseManager.java new file mode 100644 index 0000000..f2a3ad9 --- /dev/null +++ b/src/main/java/model/TileDatabaseManager.java @@ -0,0 +1,44 @@ +package model; + +import java.sql.*; +import java.util.ArrayList; +import java.util.List; + +public class TileDatabaseManager { + private static final String DB_URL = "jdbc:mariadb://dwarves.iut-fbleau.fr/akagundu"; + private static final String USER = "akagundu"; + private static final String PASSWORD = "dersim62Lodek"; + + public List<Tile> getTilesBySeries(int idSeries) { + List<Tile> tiles = new ArrayList<>(); + String query = "SELECT id, couleur1, couleur2, chiffre FROM Tuile WHERE id_serie = ? ORDER BY id ASC"; + + try (Connection cnx = DriverManager.getConnection(DB_URL, USER, PASSWORD); + PreparedStatement pst = cnx.prepareStatement(query)) { + pst.setInt(1, idSeries); + + try (ResultSet rs = pst.executeQuery()) { + while (rs.next()) { + int id = rs.getInt("id"); // Récupère l'ID de la tuile + String couleur1 = rs.getString("couleur1"); + String couleur2 = rs.getString("couleur2"); + int segmentsForTerrain1 = rs.getInt("chiffre"); + + System.out.println("Récupération de la tuile avec ID : " + id); // Message de débogage + + // Crée la tuile avec l'ID et les autres paramètres + Tile tile = new Tile(id, TerrainType.valueOf(couleur1), + couleur2 != null ? TerrainType.valueOf(couleur2) : null, + segmentsForTerrain1); + tiles.add(tile); + } + } + } catch (SQLException e) { + System.err.println("Database error: " + e.getMessage()); + } + return tiles; + } + + + +} diff --git a/src/main/java/view/GameView.java b/src/main/java/view/GameView.java index 601e691..62469a2 100644 --- a/src/main/java/view/GameView.java +++ b/src/main/java/view/GameView.java @@ -4,15 +4,13 @@ import controller.GameController; import controller.CameraController; import controller.GameContext; import controller.MouseWheelController; -import model.Tile; import javax.swing.*; import java.awt.*; public class GameView extends JFrame { private JPanel gridPanel; - private Tile nextTile; // Tuile en attente - private HexagonTile nextTilePreview; // Composant pour afficher la tuile en attente + private HexagonTile nextTilePreview; private GameController gameController; private CameraController cameraController; private GameContext gameContext; @@ -35,16 +33,15 @@ public class GameView extends JFrame { add(gridPanel, BorderLayout.CENTER); - // Initialiser la tuile en attente et la preview - nextTile = new Tile(); - nextTilePreview = new HexagonTile(null); - nextTilePreview.setTile(nextTile); // Lier nextTile à la preview + // Initialiser la preview pour la prochaine tuile + nextTilePreview = new HexagonTile(null, false); + 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); // Passer nextTile et nextTilePreview + gameController = new GameController(gameContext, gridPanel, nextTilePreview); cameraController = new CameraController(gridPanel, gameContext); // Ajouter un écouteur pour la molette de la souris diff --git a/src/main/java/view/HexagonTile.java b/src/main/java/view/HexagonTile.java index 03c4c44..09e7362 100644 --- a/src/main/java/view/HexagonTile.java +++ b/src/main/java/view/HexagonTile.java @@ -8,14 +8,15 @@ import java.awt.*; import java.awt.geom.Path2D; public class HexagonTile extends JPanel { - private Tile tile; private Point position; + private boolean isPlaceholder; // Nouveau champ pour indiquer si l'hexagone est un placeholder - public HexagonTile(Point position) { + public HexagonTile(Point position, boolean isPlaceholder) { this.position = position; + this.isPlaceholder = isPlaceholder; this.tile = null; - setPreferredSize(new Dimension(100, 100)); // Ajuste selon la taille de la tuile + setPreferredSize(new Dimension(100, 100)); } public Point getPosition() { @@ -24,6 +25,7 @@ public class HexagonTile extends JPanel { public void setTile(Tile tile) { this.tile = tile; + this.isPlaceholder = false; // Une fois la tuile posée, ce n'est plus un placeholder repaint(); } @@ -32,7 +34,7 @@ public class HexagonTile extends JPanel { } public boolean isFilled() { - return this.tile != null; // Vérifie si la tuile a déjà été placée + return this.tile != null; } @Override @@ -42,42 +44,35 @@ public class HexagonTile extends JPanel { int centerX = getWidth() / 2; int centerY = getHeight() / 2; - int largeRadius = 50; + int largeRadius = isPlaceholder ? 40 : 50; // Réduction de taille pour les placeholders - // Créer la zone de découpe pour le grand hexagone Shape largeHexagon = createHexagon(centerX, centerY, largeRadius); g2d.setClip(largeHexagon); if (tile != null) { - // 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.setColor(Color.LIGHT_GRAY); g2d.fill(largeHexagon); } - // Dessiner la bordure de l'hexagone g2d.setClip(null); g2d.setColor(Color.BLACK); - g2d.setStroke(new BasicStroke(3)); // Bordure épaisse + g2d.setStroke(new BasicStroke(3)); g2d.draw(largeHexagon); } - // 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); for (int i = 0; i < 6; i++) { - 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 - } + int segmentIndex = (i + rotation) % 6; + g2d.setColor(segmentIndex < segmentsTerrain1 ? + getTerrainColor(tile.getTerrain(0)) : + getTerrainColor(tile.getTerrain(1))); g2d.fillArc(centerX - radius, centerY - radius, 2 * radius, 2 * radius, 60 * i, 60); } } - // 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++) { @@ -94,25 +89,17 @@ public class HexagonTile extends JPanel { return hexagon; } - // Obtenir la couleur en fonction du type de terrain private Color getTerrainColor(TerrainType terrain) { if (terrain == null) { - return Color.WHITE; // Par défaut si le terrain est nul + return Color.WHITE; } - 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; + case MER: return Color.BLUE; + case CHAMP: return Color.YELLOW; + case PRE: return Color.GREEN; + case FORET: return new Color(34, 139, 34); + case MONTAGNE: return Color.GRAY; + default: return Color.WHITE; } } }