diff --git a/bin/Main.class b/bin/Main.class new file mode 100644 index 0000000..a964130 Binary files /dev/null and b/bin/Main.class differ diff --git a/bin/controller/CameraController.class b/bin/controller/CameraController.class new file mode 100644 index 0000000..7340538 Binary files /dev/null and b/bin/controller/CameraController.class differ diff --git a/bin/controller/GameContext.class b/bin/controller/GameContext.class new file mode 100644 index 0000000..2bc9f31 Binary files /dev/null and b/bin/controller/GameContext.class differ diff --git a/bin/controller/GameController.class b/bin/controller/GameController.class new file mode 100644 index 0000000..1e6ffc8 Binary files /dev/null and b/bin/controller/GameController.class differ diff --git a/bin/controller/HexagonMouseListener.class b/bin/controller/HexagonMouseListener.class index 25b9a14..eb82a75 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 new file mode 100644 index 0000000..af97f19 Binary files /dev/null and b/bin/controller/MenuController.class differ diff --git a/bin/controller/MouseDragHandler.class b/bin/controller/MouseDragHandler.class new file mode 100644 index 0000000..ea6bf1e Binary files /dev/null and b/bin/controller/MouseDragHandler.class differ diff --git a/bin/controller/MousePressHandler.class b/bin/controller/MousePressHandler.class new file mode 100644 index 0000000..6ed17a8 Binary files /dev/null and b/bin/controller/MousePressHandler.class differ diff --git a/bin/controller/NewListener.class b/bin/controller/NewListener.class new file mode 100644 index 0000000..e69cb28 Binary files /dev/null and b/bin/controller/NewListener.class differ diff --git a/bin/controller/QuiListener.class b/bin/controller/QuiListener.class new file mode 100644 index 0000000..180a921 Binary files /dev/null and b/bin/controller/QuiListener.class differ diff --git a/bin/controller/ResListener.class b/bin/controller/ResListener.class new file mode 100644 index 0000000..83e947c Binary files /dev/null and b/bin/controller/ResListener.class differ diff --git a/bin/main/Main.class b/bin/main/Main.class new file mode 100644 index 0000000..89ea207 Binary files /dev/null and b/bin/main/Main.class differ diff --git a/bin/model/MenuModel.class b/bin/model/MenuModel.class new file mode 100644 index 0000000..d332e94 Binary files /dev/null and b/bin/model/MenuModel.class differ diff --git a/bin/model/Tile.class b/bin/model/Tile.class index 2c47109..13901ed 100644 Binary files a/bin/model/Tile.class and b/bin/model/Tile.class differ diff --git a/bin/view/BtnPerso.class b/bin/view/BtnPerso.class new file mode 100644 index 0000000..7c192c5 Binary files /dev/null and b/bin/view/BtnPerso.class differ diff --git a/bin/view/ButtonHoverListener.class b/bin/view/ButtonHoverListener.class new file mode 100644 index 0000000..6315df6 Binary files /dev/null and b/bin/view/ButtonHoverListener.class differ diff --git a/bin/view/GameView.class b/bin/view/GameView.class index 821b232..74dee58 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 5037da2..c6ec849 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 4fbf647..52e3f64 100644 Binary files a/bin/view/HexagonTile.class and b/bin/view/HexagonTile.class differ diff --git a/bin/view/MenuView.class b/bin/view/MenuView.class new file mode 100644 index 0000000..3844895 Binary files /dev/null and b/bin/view/MenuView.class differ diff --git a/src/main/bin/Main.class b/src/main/bin/Main.class new file mode 100644 index 0000000..a964130 Binary files /dev/null and b/src/main/bin/Main.class differ diff --git a/src/main/bin/controller/GameController.class b/src/main/bin/controller/GameController.class new file mode 100644 index 0000000..600a6f8 Binary files /dev/null and b/src/main/bin/controller/GameController.class differ diff --git a/src/main/bin/controller/HexagonMouseListener.class b/src/main/bin/controller/HexagonMouseListener.class new file mode 100644 index 0000000..3c7f9e8 Binary files /dev/null and b/src/main/bin/controller/HexagonMouseListener.class differ diff --git a/src/main/bin/controller/MenuController.class b/src/main/bin/controller/MenuController.class new file mode 100644 index 0000000..af97f19 Binary files /dev/null and b/src/main/bin/controller/MenuController.class differ diff --git a/src/main/bin/controller/NewListener.class b/src/main/bin/controller/NewListener.class new file mode 100644 index 0000000..e69cb28 Binary files /dev/null and b/src/main/bin/controller/NewListener.class differ diff --git a/src/main/bin/controller/QuiListener.class b/src/main/bin/controller/QuiListener.class new file mode 100644 index 0000000..180a921 Binary files /dev/null and b/src/main/bin/controller/QuiListener.class differ diff --git a/src/main/bin/controller/ResListener.class b/src/main/bin/controller/ResListener.class new file mode 100644 index 0000000..83e947c Binary files /dev/null and b/src/main/bin/controller/ResListener.class differ diff --git a/src/main/bin/model/MenuModel.class b/src/main/bin/model/MenuModel.class new file mode 100644 index 0000000..d332e94 Binary files /dev/null and b/src/main/bin/model/MenuModel.class differ diff --git a/src/main/bin/model/TerrainType.class b/src/main/bin/model/TerrainType.class new file mode 100644 index 0000000..0a2f465 Binary files /dev/null and b/src/main/bin/model/TerrainType.class differ diff --git a/src/main/bin/model/Tile.class b/src/main/bin/model/Tile.class new file mode 100644 index 0000000..2c47109 Binary files /dev/null and b/src/main/bin/model/Tile.class differ diff --git a/src/main/bin/view/BtnPerso.class b/src/main/bin/view/BtnPerso.class new file mode 100644 index 0000000..7c192c5 Binary files /dev/null and b/src/main/bin/view/BtnPerso.class differ diff --git a/src/main/bin/view/ButtonHoverListener.class b/src/main/bin/view/ButtonHoverListener.class new file mode 100644 index 0000000..6315df6 Binary files /dev/null and b/src/main/bin/view/ButtonHoverListener.class differ diff --git a/src/main/bin/view/GameView.class b/src/main/bin/view/GameView.class new file mode 100644 index 0000000..be21c0c Binary files /dev/null and b/src/main/bin/view/GameView.class differ diff --git a/src/main/bin/view/HexagonGridPanel.class b/src/main/bin/view/HexagonGridPanel.class new file mode 100644 index 0000000..e682ddc Binary files /dev/null and b/src/main/bin/view/HexagonGridPanel.class differ diff --git a/src/main/bin/view/HexagonTile$1.class b/src/main/bin/view/HexagonTile$1.class new file mode 100644 index 0000000..5037da2 Binary files /dev/null and b/src/main/bin/view/HexagonTile$1.class differ diff --git a/src/main/bin/view/HexagonTile.class b/src/main/bin/view/HexagonTile.class new file mode 100644 index 0000000..4fbf647 Binary files /dev/null and b/src/main/bin/view/HexagonTile.class differ diff --git a/src/main/bin/view/MenuView.class b/src/main/bin/view/MenuView.class new file mode 100644 index 0000000..09ace91 Binary files /dev/null and b/src/main/bin/view/MenuView.class differ diff --git a/src/main/bin/view/TileView$1.class b/src/main/bin/view/TileView$1.class new file mode 100644 index 0000000..ad13987 Binary files /dev/null and b/src/main/bin/view/TileView$1.class differ diff --git a/src/main/bin/view/TileView.class b/src/main/bin/view/TileView.class new file mode 100644 index 0000000..609dff2 Binary files /dev/null and b/src/main/bin/view/TileView.class differ diff --git a/src/main/java/model/Tile.java b/src/main/java/model/Tile.java index 0195d63..7c8723a 100644 --- a/src/main/java/model/Tile.java +++ b/src/main/java/model/Tile.java @@ -3,47 +3,62 @@ package model; import java.util.Random; public class Tile { - private TerrainType[] terrains; // 4 terrains pour chaque quart de la tuile + 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(); public Tile() { - this.terrains = new TerrainType[4]; + this.terrains = new TerrainType[2]; // Seulement deux terrains generateTerrains(); + assignSegments(); } - // Génère des terrains aléatoires pour les 4 parties + // Génère deux terrains aléatoires pour la tuile private void generateTerrains() { - for (int i = 0; i < 4; i++) { - terrains[i] = generateRandomTerrain(); + terrains[0] = generateRandomTerrain(); + terrains[1] = generateRandomTerrain(); + + // Assure que les deux terrains sont différents + while (terrains[0] == terrains[1]) { + terrains[1] = generateRandomTerrain(); } } - // Génère un terrain aléatoire selon certaines probabilités - private TerrainType generateRandomTerrain() { - int rand = random.nextInt(100); // Pourcentage pour chaque terrain + // 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; + } - if (rand < 20) { - return TerrainType.MER; // 20% MER - } else if (rand < 40) { - return TerrainType.CHAMP; // 20% CHAMP - } else if (rand < 60) { + // 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 < 80) { - return TerrainType.FORET; // 20% FORET + } else if (rand < 75) { + return TerrainType.FORET; // 25% FORET } else { - return TerrainType.MONTAGNE; // 20% MONTAGNE + return TerrainType.MONTAGNE; // 25% MONTAGNE } } public TerrainType getTerrain(int index) { - if (index >= 0 && index < 4) { + if (index >= 0 && index < 2) { return terrains[index]; } return null; } - @Override - public String toString() { - return "Terrains : " + terrains[0] + ", " + terrains[1] + ", " + terrains[2] + ", " + terrains[3]; + 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 + } } } diff --git a/src/main/java/view/GameView.java b/src/main/java/view/GameView.java index 7cc29ec..2f6c3d6 100644 --- a/src/main/java/view/GameView.java +++ b/src/main/java/view/GameView.java @@ -1,6 +1,8 @@ package view; import controller.GameController; +import controller.CameraController; +import controller.GameContext; import model.Tile; import javax.swing.*; @@ -16,14 +18,13 @@ public class GameView extends JFrame { private Map<Point, HexagonTile> hexagonMap; private Set<Point> availablePositions; private Tile nextTile; - private HexagonTile nextTilePreview; // Tuile de prévisualisation à droite - private int tileCount; + private HexagonTile nextTilePreview; private GameController gameController; + private CameraController cameraController; public GameView() { this.hexagonMap = new HashMap<>(); this.availablePositions = new HashSet<>(); - this.tileCount = 0; setTitle("Jeu de Tuiles"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); @@ -34,21 +35,29 @@ public class GameView extends JFrame { // Créer la grille d'hexagones à gauche gridPanel = createHexagonGrid(); - JScrollPane scrollPane = new JScrollPane(gridPanel); - scrollPane.setPreferredSize(new Dimension(600, 600)); - add(scrollPane, BorderLayout.CENTER); + gridPanel.setLayout(null); // Permet de placer les éléments sans layout manager + gridPanel.setPreferredSize(new Dimension(800, 800)); // Taille de la grille adaptée + + // Ajout de la grille sans JScrollPane + add(gridPanel, BorderLayout.CENTER); // Créer le panneau de contrôle à droite JPanel controlPanel = createControlPanel(); + controlPanel.setPreferredSize(new Dimension(200, 600)); // Taille fixe pour le panneau de contrôle add(controlPanel, BorderLayout.EAST); - // Initialiser le contrôleur + // Initialiser GameContext + GameContext context = new GameContext(hexagonMap, gameController, availablePositions, cameraController); + + // Initialiser le contrôleur du jeu avec le contexte gameController = new GameController(hexagonMap, availablePositions, gridPanel, nextTile, nextTilePreview); - // Placer la première tuile au centre + // Initialiser le contrôleur de la souris pour le glissement de la grille avec le contexte + cameraController = new CameraController(gridPanel, context); + + // Placer la première tuile au centre en passant CameraController Point initialPosition = new Point(0, 0); - gameController.placeInitialTile(initialPosition); - centerScrollOnPosition(initialPosition, scrollPane); + gameController.placeInitialTile(initialPosition, cameraController); pack(); setLocationRelativeTo(null); @@ -56,29 +65,31 @@ public class GameView extends JFrame { } private JPanel createHexagonGrid() { - return new HexagonGridPanel(); + JPanel panel = new JPanel(); + panel.setLayout(null); // Layout libre pour placer les hexagones + panel.setBackground(Color.WHITE); // S'assurer que le fond est blanc pour mieux voir les hexagones + panel.setPreferredSize(new Dimension(1000, 1000)); // Taille initiale suffisamment grande + return panel; } private Tile generateRandomTile() { return new Tile(); } - private void centerScrollOnPosition(Point position, JScrollPane scrollPane) { - int xCenter = position.x * 50 * 3 / 2; - int yCenter = position.y * (int) (Math.sqrt(3) * 50); - scrollPane.getViewport().setViewPosition(new Point(xCenter - scrollPane.getViewport().getWidth() / 2, - yCenter - scrollPane.getViewport().getHeight() / 2)); - } - private JPanel createControlPanel() { JPanel panel = new JPanel(); panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS)); + panel.setBackground(Color.LIGHT_GRAY); // Améliorer la visibilité du panneau de contrôle + panel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); // Ajout d'espacement interne + panel.add(new JLabel("Prochaine tuile : ")); panel.add(Box.createRigidArea(new Dimension(0, 10))); // Afficher la prévisualisation de la prochaine tuile nextTilePreview = new HexagonTile(null); - nextTilePreview.setPreferredSize(new Dimension(100, 100)); + nextTilePreview.setPreferredSize(new Dimension(150, 150)); // Augmenter la taille pour la prévisualisation + nextTilePreview.setBackground(Color.GRAY); + nextTilePreview.setOpaque(true); // Rendre le fond opaque pour une meilleure visibilité nextTilePreview.setTile(nextTile); panel.add(nextTilePreview); diff --git a/src/main/java/view/HexagonTile.java b/src/main/java/view/HexagonTile.java index 58c3918..7cf1e31 100644 --- a/src/main/java/view/HexagonTile.java +++ b/src/main/java/view/HexagonTile.java @@ -45,8 +45,8 @@ public class HexagonTile extends JPanel { g2d.setClip(largeHexagon); if (tile != null) { - // Dessiner les 4 quadrants de terrain - drawTerrainQuadrants(g2d, centerX, centerY, largeRadius); + // Dessiner les 6 segments de terrain en fonction des proportions + drawTerrainSegments(g2d, centerX, centerY, largeRadius); } else { g2d.setColor(Color.LIGHT_GRAY); // Couleur par défaut pour une case vide g2d.fill(largeHexagon); @@ -59,11 +59,19 @@ public class HexagonTile extends JPanel { 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); + // 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 + int segmentsTerrain1 = tile.getSegmentsForTerrain(0); + + // Dessiner les segments adjacents pour chaque terrain + for (int i = 0; i < 6; i++) { + if (i < segmentsTerrain1) { + g2d.setColor(getTerrainColor(tile.getTerrain(0))); // Premier terrain + } else { + g2d.setColor(getTerrainColor(tile.getTerrain(1))); // Deuxième terrain + } + g2d.fillArc(centerX - radius, centerY - radius, 2 * radius, 2 * radius, 60 * i, 60); } } @@ -86,6 +94,10 @@ public class HexagonTile extends JPanel { // 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 + } + switch (terrain) { case MER: return Color.BLUE; diff --git a/src/main/java/view/MenuView.java b/src/main/java/view/MenuView.java index 9928ed1..9d5cadb 100644 --- a/src/main/java/view/MenuView.java +++ b/src/main/java/view/MenuView.java @@ -25,7 +25,7 @@ public class MenuView extends JComponent { panelCoté.setBackground(new Color(243,171,115,150)); panelCoté.setPreferredSize(new Dimension(300,0)); - backgroundImage = new ImageIcon("\\\\wsl.localhost\\Ubuntu-24.04\\home\\topb\\DEV\\SAE31_2024\\src\\main\\java\\view\\img\\bg.png").getImage(); + backgroundImage = new ImageIcon("./view/img/bg.png").getImage(); logo = new ImageIcon("\\\\wsl.localhost\\Ubuntu-24.04\\home\\topb\\DEV\\SAE31_2024\\src\\main\\java\\view\\img\\D.png"); quit = new ImageIcon("\\\\wsl.localhost\\Ubuntu-24.04\\home\\topb\\DEV\\SAE31_2024\\src\\main\\java\\view\\img\\quit.png"); Image quit1 = quit.getImage();