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();