diff --git a/bin/Music/audio.wav b/bin/Music/audio.wav
new file mode 100644
index 0000000..bcf85f8
Binary files /dev/null and b/bin/Music/audio.wav differ
diff --git a/bin/controller/CameraController.class b/bin/controller/CameraController.class
index 7340538..ae93e1b 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 2bc9f31..f11e86c 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 1e6ffc8..5d50ee2 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 eb82a75..3d8dacf 100644
Binary files a/bin/controller/HexagonMouseListener.class and b/bin/controller/HexagonMouseListener.class differ
diff --git a/bin/controller/MouseDragHandler.class b/bin/controller/MouseDragHandler.class
index ea6bf1e..c0e34aa 100644
Binary files a/bin/controller/MouseDragHandler.class and b/bin/controller/MouseDragHandler.class differ
diff --git a/bin/controller/MousePressHandler.class b/bin/controller/MousePressHandler.class
index 6ed17a8..975a843 100644
Binary files a/bin/controller/MousePressHandler.class and b/bin/controller/MousePressHandler.class differ
diff --git a/bin/controller/ResListener.class b/bin/controller/ResListener.class
index 83e947c..aae19f1 100644
Binary files a/bin/controller/ResListener.class and b/bin/controller/ResListener.class differ
diff --git a/bin/main/Main.class b/bin/main/Main.class
index 89ea207..8a61743 100644
Binary files a/bin/main/Main.class and b/bin/main/Main.class differ
diff --git a/bin/view/GameView.class b/bin/view/GameView.class
index 74dee58..c9e6879 100644
Binary files a/bin/view/GameView.class and b/bin/view/GameView.class differ
diff --git a/bin/view/MenuView.class b/bin/view/MenuView.class
index 3844895..42d460f 100644
Binary files a/bin/view/MenuView.class and b/bin/view/MenuView.class differ
diff --git a/bin/view/img/D.png b/bin/view/img/D.png
new file mode 100644
index 0000000..7dc4b96
Binary files /dev/null and b/bin/view/img/D.png differ
diff --git a/bin/view/img/bg.png b/bin/view/img/bg.png
new file mode 100644
index 0000000..e3621e8
Binary files /dev/null and b/bin/view/img/bg.png differ
diff --git a/bin/view/img/quit.png b/bin/view/img/quit.png
new file mode 100644
index 0000000..aa7b154
Binary files /dev/null and b/bin/view/img/quit.png differ
diff --git a/src/main/Main.java b/src/main/Main.java
index 06f6410..60ec274 100644
--- a/src/main/Main.java
+++ b/src/main/Main.java
@@ -1,10 +1,52 @@
 package main;
 
-import javax.swing.SwingUtilities;
-import view.GameView;
+import model.MenuModel;
+import controller.*;
+import view.*;
+
+import javax.sound.sampled.AudioInputStream;
+import javax.sound.sampled.AudioSystem;
+import javax.sound.sampled.Clip;
+import javax.swing.*;
+import java.net.URL;
 
 public class Main {
     public static void main(String[] args) {
-        SwingUtilities.invokeLater(() -> new GameView());
+        SwingUtilities.invokeLater(() -> {
+            MenuModel model = new MenuModel();
+            MenuView view = new MenuView();
+
+            JFrame frame = new JFrame(" Menu");
+            frame.setSize(1500, 750);                                  
+            frame.setLocation(0, 0);
+            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+            frame.add(view);
+
+            // Créer le contrôleur
+            new MenuController(model, view);
+
+            frame.setVisible(true);
+
+            // Chargement de la musique
+            PlayMusic("/Music/audio.wav");
+        });
+    }
+
+    public static void PlayMusic(String location){
+        try {
+            // Utilisation de getResource pour charger l'audio
+            URL url = Main.class.getResource(location);
+
+            if (url != null) {
+                AudioInputStream audioInput = AudioSystem.getAudioInputStream(url);
+                Clip clip = AudioSystem.getClip();
+                clip.open(audioInput);
+                clip.start();
+            } else {
+                System.out.println("fichier introuvable");
+            }
+        } catch (Exception e) {
+            System.out.println(e);
+        }
     }
 }
diff --git a/src/main/bin/Main.class b/src/main/bin/Main.class
deleted file mode 100644
index a964130..0000000
Binary files a/src/main/bin/Main.class and /dev/null differ
diff --git a/src/main/bin/controller/GameController.class b/src/main/bin/controller/GameController.class
deleted file mode 100644
index 600a6f8..0000000
Binary files a/src/main/bin/controller/GameController.class and /dev/null differ
diff --git a/src/main/bin/controller/HexagonMouseListener.class b/src/main/bin/controller/HexagonMouseListener.class
deleted file mode 100644
index 3c7f9e8..0000000
Binary files a/src/main/bin/controller/HexagonMouseListener.class and /dev/null differ
diff --git a/src/main/bin/controller/MenuController.class b/src/main/bin/controller/MenuController.class
deleted file mode 100644
index af97f19..0000000
Binary files a/src/main/bin/controller/MenuController.class and /dev/null differ
diff --git a/src/main/bin/controller/NewListener.class b/src/main/bin/controller/NewListener.class
deleted file mode 100644
index e69cb28..0000000
Binary files a/src/main/bin/controller/NewListener.class and /dev/null differ
diff --git a/src/main/bin/controller/QuiListener.class b/src/main/bin/controller/QuiListener.class
deleted file mode 100644
index 180a921..0000000
Binary files a/src/main/bin/controller/QuiListener.class and /dev/null differ
diff --git a/src/main/bin/controller/ResListener.class b/src/main/bin/controller/ResListener.class
deleted file mode 100644
index 83e947c..0000000
Binary files a/src/main/bin/controller/ResListener.class and /dev/null differ
diff --git a/src/main/bin/model/MenuModel.class b/src/main/bin/model/MenuModel.class
deleted file mode 100644
index d332e94..0000000
Binary files a/src/main/bin/model/MenuModel.class and /dev/null differ
diff --git a/src/main/bin/model/TerrainType.class b/src/main/bin/model/TerrainType.class
deleted file mode 100644
index 0a2f465..0000000
Binary files a/src/main/bin/model/TerrainType.class and /dev/null differ
diff --git a/src/main/bin/model/Tile.class b/src/main/bin/model/Tile.class
deleted file mode 100644
index 2c47109..0000000
Binary files a/src/main/bin/model/Tile.class and /dev/null differ
diff --git a/src/main/bin/view/BtnPerso.class b/src/main/bin/view/BtnPerso.class
deleted file mode 100644
index 7c192c5..0000000
Binary files a/src/main/bin/view/BtnPerso.class and /dev/null differ
diff --git a/src/main/bin/view/ButtonHoverListener.class b/src/main/bin/view/ButtonHoverListener.class
deleted file mode 100644
index 6315df6..0000000
Binary files a/src/main/bin/view/ButtonHoverListener.class and /dev/null differ
diff --git a/src/main/bin/view/GameView.class b/src/main/bin/view/GameView.class
deleted file mode 100644
index be21c0c..0000000
Binary files a/src/main/bin/view/GameView.class and /dev/null differ
diff --git a/src/main/bin/view/HexagonGridPanel.class b/src/main/bin/view/HexagonGridPanel.class
deleted file mode 100644
index e682ddc..0000000
Binary files a/src/main/bin/view/HexagonGridPanel.class and /dev/null differ
diff --git a/src/main/bin/view/HexagonTile$1.class b/src/main/bin/view/HexagonTile$1.class
deleted file mode 100644
index 5037da2..0000000
Binary files a/src/main/bin/view/HexagonTile$1.class and /dev/null differ
diff --git a/src/main/bin/view/HexagonTile.class b/src/main/bin/view/HexagonTile.class
deleted file mode 100644
index 4fbf647..0000000
Binary files a/src/main/bin/view/HexagonTile.class and /dev/null differ
diff --git a/src/main/bin/view/MenuView.class b/src/main/bin/view/MenuView.class
deleted file mode 100644
index 09ace91..0000000
Binary files a/src/main/bin/view/MenuView.class and /dev/null differ
diff --git a/src/main/bin/view/TileView$1.class b/src/main/bin/view/TileView$1.class
deleted file mode 100644
index ad13987..0000000
Binary files a/src/main/bin/view/TileView$1.class and /dev/null differ
diff --git a/src/main/bin/view/TileView.class b/src/main/bin/view/TileView.class
deleted file mode 100644
index 609dff2..0000000
Binary files a/src/main/bin/view/TileView.class and /dev/null differ
diff --git a/src/main/java/Main.java b/src/main/java/Main.java
deleted file mode 100644
index 125c5b3..0000000
--- a/src/main/java/Main.java
+++ /dev/null
@@ -1,54 +0,0 @@
-import model.*;
-import controller.*;
-import view.*;
-
-import java.io.File;
-
-import javax.sound.sampled.AudioInputStream;
-import javax.sound.sampled.AudioSystem;
-import javax.sound.sampled.Clip;
-import javax.swing.*;
-
-public class Main {
-    public static void main(String[] args) {
-        SwingUtilities.invokeLater(() -> {
-            MenuModel model = new MenuModel();
-            MenuView view = new MenuView();
-            
-          
-            JFrame frame = new JFrame(" Menu");
-            frame.setSize(1500, 750);                                  
-            frame.setLocation(0, 0);
-            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
-            frame.add(view);
-            
-            // Créer le contrôleur
-            new MenuController(model, view);
-
-            frame.setVisible(true);
-            String filepath = "Music/audio.wav";
-            PlayMusic(filepath);
-        });
-    }
-
-    public static void PlayMusic(String location){
-        try {
-           // System.out.println(location);
-            File musicPath = new File(location);
-
-            if(musicPath.exists()){
-
-                AudioInputStream audioInput = AudioSystem.getAudioInputStream(musicPath);
-                Clip clip = AudioSystem.getClip();
-                clip.open(audioInput);
-                clip.start();
-
-
-            } else {
-                System.out.println("fichier introuvable");
-            }
-        } catch (Exception e) {
-            System.out.println(e);
-        }
-    }
-}
\ No newline at end of file
diff --git a/src/main/java/controller/CameraController.java b/src/main/java/controller/CameraController.java
index 1879363..b30f604 100644
--- a/src/main/java/controller/CameraController.java
+++ b/src/main/java/controller/CameraController.java
@@ -8,12 +8,12 @@ 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 GameContext context;  // Ajout de GameContext
+    private GameContext context;
 
     public CameraController(JPanel gridPanel, GameContext context) {
         this.gridPanel = gridPanel;
-        this.context = context;  // Initialisation du contexte
-        setupMouseDragToMove();
+        this.context = context;
+        setupMouseDragToMove(); // Initialise les écouteurs pour gérer le déplacement
     }
 
     public Point getViewOffset() {
@@ -21,15 +21,14 @@ public class CameraController {
     }
 
     public void updateViewOffset(int deltaX, int deltaY) {
-        viewOffset.translate(deltaX, deltaY); // Mettre à jour le décalage de la vue
-        gridPanel.setLocation(viewOffset); // Déplacer le panneau en fonction du décalage
+        viewOffset.translate(deltaX, deltaY);
+        gridPanel.setLocation(viewOffset);
     }
 
     private void setupMouseDragToMove() {
-        // Utilisation de GameContext dans les gestionnaires de la souris
         MousePressHandler mousePressHandler = new MousePressHandler(this, context);
         MouseDragHandler mouseDragHandler = new MouseDragHandler(this, context);
-    
+
         gridPanel.addMouseListener(mousePressHandler);
         gridPanel.addMouseMotionListener(mouseDragHandler);
     }
diff --git a/src/main/java/controller/GameContext.java b/src/main/java/controller/GameContext.java
index 6b7d4d7..fe8e3d7 100644
--- a/src/main/java/controller/GameContext.java
+++ b/src/main/java/controller/GameContext.java
@@ -1,21 +1,39 @@
 package controller;
 
 import view.HexagonTile;
+
 import java.awt.*;
+import java.util.HashMap;
+import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
 
 public class GameContext {
-    public Map<Point, HexagonTile> hexagonMap;
-    public GameController gameController;
-    public Set<Point> availablePositions;
-    public CameraController cameraController;
+    private Map<Point, HexagonTile> hexagonMap;  // Stocke la grille
+    private Set<Point> availablePositions;  // Positions libres pour les placeholders
+    private Point offset;  // Offset global pour la grille
 
-    public GameContext(Map<Point, HexagonTile> hexagonMap, GameController gameController, 
-                       Set<Point> availablePositions, CameraController cameraController) {
-        this.hexagonMap = hexagonMap;
-        this.gameController = gameController;
-        this.availablePositions = availablePositions;
-        this.cameraController = cameraController;
+    public GameContext() {
+        this.hexagonMap = new HashMap<>();
+        this.availablePositions = new HashSet<>();
+        this.offset = new Point(0, 0);  // Initialisation de l’offset à (0, 0)
+    }
+
+    // Getters pour la grille, les positions et l'offset
+    public Map<Point, HexagonTile> getHexagonMap() {
+        return hexagonMap;
+    }
+
+    public Set<Point> getAvailablePositions() {
+        return availablePositions;
+    }
+
+    public Point getOffset() {
+        return offset;
+    }
+
+    // Méthode pour mettre à jour l'offset de la grille
+    public void updateOffset(int deltaX, int deltaY) {
+        offset.translate(deltaX, deltaY);
     }
 }
diff --git a/src/main/java/controller/GameController.java b/src/main/java/controller/GameController.java
index 5875e73..04af6a4 100644
--- a/src/main/java/controller/GameController.java
+++ b/src/main/java/controller/GameController.java
@@ -3,98 +3,65 @@ package controller;
 import model.Tile;
 import view.HexagonTile;
 
+import javax.swing.*;
 import java.awt.*;
+import java.util.HashMap;
+import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
-import javax.swing.JPanel;
 
 public class GameController {
-    private Map<Point, HexagonTile> hexagonMap;
-    private Set<Point> availablePositions;
-    private Tile nextTile;
-    private HexagonTile nextTilePreview;
+    private Map<Point, HexagonTile> hexagonMap; // Carte pour stocker les tuiles par position
+    private Set<Point> availablePositions;      // Ensemble pour suivre les positions disponibles
     private JPanel gridPanel;
 
-    public GameController(Map<Point, HexagonTile> hexagonMap, Set<Point> availablePositions, JPanel gridPanel, Tile nextTile, HexagonTile nextTilePreview) {
-        this.hexagonMap = hexagonMap;
-        this.availablePositions = availablePositions;
+    public GameController(GameContext gameContext, JPanel gridPanel, Tile nextTile, HexagonTile nextTilePreview) {
         this.gridPanel = gridPanel;
-        this.nextTile = nextTile;
-        this.nextTilePreview = nextTilePreview;
+
+        // Initialiser hexagonMap et availablePositions
+        this.hexagonMap = new HashMap<>();
+        this.availablePositions = new HashSet<>();
     }
 
-    public void placeInitialTile(Point position, CameraController cameraController) {
-        addHexagonTile(position, gridPanel, 50, cameraController); // Utilise CameraController
+    public void placeInitialTile(Point position, CameraController cameraController, Tile tile) {
+        // Place la première tuile pleine au point central
+        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); // Utilise CameraController
+                addHexagonTile(adj, gridPanel, 50, cameraController, null); // Passer `null` pour les placeholders
             }
         }
     }
 
-    public void placeTile(Point position, CameraController cameraController) {
-        if (availablePositions.contains(position)) {
-            HexagonTile hexTile = hexagonMap.get(position);
-            if (hexTile != null && !hexTile.isFilled()) {
-                hexTile.setTile(nextTile);  // Placer la tuile
-                gridPanel.revalidate();  // Forcer le rafraîchissement de l'interface graphique
-                gridPanel.repaint();
-                
-                // Générer une nouvelle tuile et mettre à jour la prévisualisation
-                nextTile = generateRandomTile();
-                nextTilePreview.setTile(nextTile);
-                
-                // Mettre à jour les positions adjacentes
-                updateAdjacentPositions(position, cameraController);
-                
-                // Supprimer la position de la liste des positions disponibles
-                availablePositions.remove(position);
-            }
-        }
-    }
-
-    public void addHexagonTile(Point position, JPanel panel, int hexSize, CameraController cameraController) {
+    public void addHexagonTile(Point position, JPanel panel, int hexSize, CameraController cameraController, Tile tile) {
         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 (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);
-    
+
         // Ajout de l'écouteur pour gérer le clic sur l'hexagone
         hexTile.addMouseListener(new HexagonMouseListener(hexTile, this, availablePositions, cameraController));
-    
+
         hexagonMap.put(position, hexTile);
         panel.add(hexTile);
         panel.revalidate();
         panel.repaint();
     }
-    
-    
-    
-    
-
-    private void updateAdjacentPositions(Point position, CameraController cameraController) {
-        Point[] adjacentPositions = getAdjacentPositions(position);
-        for (Point adj : adjacentPositions) {
-            if (!hexagonMap.containsKey(adj)) {
-                availablePositions.add(adj);
-                addHexagonTile(adj, gridPanel, 50, cameraController); // Utilise les nouvelles positions logiques
-            }
-        }
-    }
-    
 
     private Point[] getAdjacentPositions(Point position) {
         return new Point[]{
@@ -106,8 +73,4 @@ public class GameController {
                 new Point(position.x - 1, position.y + 1)
         };
     }
-
-    private Tile generateRandomTile() {
-        return new Tile();
-    }
 }
diff --git a/src/main/java/controller/HexagonMouseListener.java b/src/main/java/controller/HexagonMouseListener.java
index 728d2fd..6111e8d 100644
--- a/src/main/java/controller/HexagonMouseListener.java
+++ b/src/main/java/controller/HexagonMouseListener.java
@@ -9,15 +9,11 @@ import java.util.Set;
 public class HexagonMouseListener extends MouseAdapter {
 
     private final HexagonTile hexTile;
-    private final GameController gameController;
     private final Set<Point> availablePositions;
-    private final CameraController cameraController; // Ajouter CameraController
 
     public HexagonMouseListener(HexagonTile hexTile, GameController gameController, Set<Point> availablePositions, CameraController cameraController) {
         this.hexTile = hexTile;
-        this.gameController = gameController;
         this.availablePositions = availablePositions;
-        this.cameraController = cameraController; // Initialiser CameraController
     }
 
     @Override
@@ -25,12 +21,10 @@ public class HexagonMouseListener extends MouseAdapter {
         Point position = hexTile.getPosition();
         if (availablePositions.contains(position)) {
             System.out.println("Hexagone cliqué à la position : " + position);
-            gameController.placeTile(position, cameraController);  // Appelle la méthode pour placer une tuile
+            // 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
         } else {
             System.out.println("Position non disponible pour le placement");
         }
     }
-
-
-
 }
diff --git a/src/main/java/controller/MouseDragHandler.java b/src/main/java/controller/MouseDragHandler.java
index 64735eb..a825d4c 100644
--- a/src/main/java/controller/MouseDragHandler.java
+++ b/src/main/java/controller/MouseDragHandler.java
@@ -1,18 +1,15 @@
 package controller;
 
 import view.HexagonTile;
-
-import javax.swing.*;
-import java.awt.*;
 import java.awt.event.MouseAdapter;
 import java.awt.event.MouseEvent;
-import java.util.HashMap;
-import java.util.Map;
+import java.awt.Point;
+import javax.swing.SwingUtilities;
 
 public class MouseDragHandler extends MouseAdapter {
 
     private CameraController controller;
-    private GameContext context;  // Utiliser GameContext pour regrouper les données
+    private GameContext context;
 
     public MouseDragHandler(CameraController controller, GameContext context) {
         this.controller = controller;
@@ -26,8 +23,8 @@ public class MouseDragHandler extends MouseAdapter {
             int deltaX = current.x - controller.getMouseDragStart().x;
             int deltaY = current.y - controller.getMouseDragStart().y;
 
-            // Déplacer uniquement les coordonnées visuelles, pas les coordonnées logiques
-            for (HexagonTile hexTile : context.hexagonMap.values()) {
+            // 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);
             }
@@ -44,37 +41,7 @@ public class MouseDragHandler extends MouseAdapter {
     @Override
     public void mouseReleased(MouseEvent e) {
         if (SwingUtilities.isRightMouseButton(e)) {
-            // Recalculer les positions logiques lorsque la souris est relâchée
-            Map<Point, HexagonTile> newHexagonMap = new HashMap<>();
-            
-            for (Map.Entry<Point, HexagonTile> entry : context.hexagonMap.entrySet()) {
-                HexagonTile hexTile = entry.getValue();
-                Point newLogicalPosition = calculateNewLogicalPosition(hexTile.getLocation());
-
-                // Mettre à jour les écouteurs de la souris
-                hexTile.removeMouseListener(hexTile.getMouseListeners()[0]);  // Supprimer l'ancien écouteur
-                hexTile.addMouseListener(new HexagonMouseListener(hexTile, context.gameController, context.availablePositions, context.cameraController));
-
-                // Ajouter la nouvelle position logique dans la nouvelle carte
-                newHexagonMap.put(newLogicalPosition, hexTile);
-            }
-
-            // Remplacer la carte hexagonMap avec la nouvelle carte
-            context.hexagonMap.clear();
-            context.hexagonMap.putAll(newHexagonMap);
-
             controller.resetMouseDragStart();
         }
     }
-
-    private Point calculateNewLogicalPosition(Point visualPosition) {
-        int logicalX = visualPosition.x / (int) (50 * 3 / 2);  // Ajuste pour la largeur de l'hexagone
-        int logicalY = visualPosition.y / (int) (Math.sqrt(3) * 50);  // Ajuste pour la hauteur de l'hexagone
-    
-        if (logicalX % 2 != 0) {
-            logicalY -= (int) (Math.sqrt(3) * 50 / 2);  // Ajustement pour les colonnes impaires
-        }
-
-        return new Point(logicalX, logicalY);
-    }
 }
diff --git a/src/main/java/controller/MousePressHandler.java b/src/main/java/controller/MousePressHandler.java
index 2dcd855..ad329ae 100644
--- a/src/main/java/controller/MousePressHandler.java
+++ b/src/main/java/controller/MousePressHandler.java
@@ -1,22 +1,14 @@
 package controller;
-
-import view.HexagonTile;
-import java.awt.Point;
 import java.awt.event.MouseAdapter;
 import java.awt.event.MouseEvent;
-import java.util.HashMap;
-import java.util.Map;
-
 import javax.swing.SwingUtilities;
 
 public class MousePressHandler extends MouseAdapter {
 
     private CameraController controller;
-    private GameContext context;  // Ajout du GameContext
 
     public MousePressHandler(CameraController controller, GameContext context) {
         this.controller = controller;
-        this.context = context;  // Utilisation du contexte
     }
     
     @Override
@@ -28,37 +20,9 @@ public class MousePressHandler extends MouseAdapter {
     }
 
     @Override
-public void mouseReleased(MouseEvent e) {
-    if (SwingUtilities.isRightMouseButton(e)) {
-        // Créer une nouvelle carte pour stocker les nouvelles positions logiques
-        Map<Point, HexagonTile> newHexagonMap = new HashMap<>();
-        
-        for (Map.Entry<Point, HexagonTile> entry : context.hexagonMap.entrySet()) {
-            HexagonTile hexTile = entry.getValue();
-            Point newLogicalPosition = calculateNewLogicalPosition(hexTile.getLocation());
-
-            // Ajouter la nouvelle position logique dans la nouvelle carte
-            newHexagonMap.put(newLogicalPosition, hexTile);
+    public void mouseReleased(MouseEvent e) {
+        if (SwingUtilities.isRightMouseButton(e)) {
+            controller.resetMouseDragStart();
         }
-
-        // Remplacer l'ancienne carte après avoir terminé l'itération
-        Map<Point, HexagonTile> oldHexagonMap = context.hexagonMap;  // Sauvegarder l'ancienne référence
-        context.hexagonMap = newHexagonMap;  // Réassigner la nouvelle carte
-
-        oldHexagonMap.clear();  // Vider l'ancienne carte (maintenant non utilisée)
-        controller.resetMouseDragStart();
-    }
-}
-
-
-    private Point calculateNewLogicalPosition(Point visualPosition) {
-        int logicalX = visualPosition.x / (int) (50 * 3 / 2);
-        int logicalY = visualPosition.y / (int) (Math.sqrt(3) * 50);
-
-        if (logicalX % 2 != 0) {
-            logicalY -= (int) (Math.sqrt(3) * 50 / 2);
-        }
-
-        return new Point(logicalX, logicalY);
     }
 }
diff --git a/src/main/java/controller/ResListener.java b/src/main/java/controller/ResListener.java
index 1f62dc9..c2a2b57 100644
--- a/src/main/java/controller/ResListener.java
+++ b/src/main/java/controller/ResListener.java
@@ -2,10 +2,14 @@ package controller;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 
+import javax.swing.SwingUtilities;
+
+import view.GameView;
+
 public class ResListener implements ActionListener {
     @Override
     public void actionPerformed(ActionEvent e) {
-        System.out.println("Juste pour tester ");
+        SwingUtilities.invokeLater(() -> new GameView());
         
     }
 }
\ No newline at end of file
diff --git a/src/main/java/view/GameView.java b/src/main/java/view/GameView.java
index 2f6c3d6..2edd334 100644
--- a/src/main/java/view/GameView.java
+++ b/src/main/java/view/GameView.java
@@ -7,90 +7,90 @@ import model.Tile;
 
 import javax.swing.*;
 import java.awt.*;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
 
 public class GameView extends JFrame {
-
     private JPanel gridPanel;
-    private Map<Point, HexagonTile> hexagonMap;
-    private Set<Point> availablePositions;
     private Tile nextTile;
     private HexagonTile nextTilePreview;
     private GameController gameController;
     private CameraController cameraController;
+    private GameContext gameContext;
 
     public GameView() {
-        this.hexagonMap = new HashMap<>();
-        this.availablePositions = new HashSet<>();
-
         setTitle("Jeu de Tuiles");
         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         setLayout(new BorderLayout());
+        setSize(1500, 750); 
+        setLocationRelativeTo(null);
 
-        // Générer la première tuile aléatoire
-        nextTile = generateRandomTile();
+        // Initialiser le contexte de jeu
+        gameContext = new GameContext();
 
-        // Créer la grille d'hexagones à gauche
+        // Créer la grille d'hexagones
         gridPanel = createHexagonGrid();
-        gridPanel.setLayout(null);  // Permet de placer les éléments sans layout manager
-        gridPanel.setPreferredSize(new Dimension(800, 800));  // Taille de la grille adaptée
+        
+        // Calculer et centrer la grille dans GameView
+        centerGridPanel();
 
-        // 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
+        controlPanel.setPreferredSize(new Dimension(200, 600));
         add(controlPanel, BorderLayout.EAST);
 
-        // Initialiser GameContext
-        GameContext context = new GameContext(hexagonMap, gameController, availablePositions, cameraController);
+        // Initialiser les contrôleurs avec le contexte de jeu
+        gameController = new GameController(gameContext, gridPanel, nextTile, nextTilePreview);
+        cameraController = new CameraController(gridPanel, gameContext);
 
-        // Initialiser le contrôleur du jeu avec le contexte
-        gameController = new GameController(hexagonMap, availablePositions, gridPanel, nextTile, nextTilePreview);
+        // Générer une première tuile pleine et la placer au centre
+        placeInitialTileWithRandomTile();
 
-        // 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, cameraController);
-
-        pack();
-        setLocationRelativeTo(null);
         setVisible(true);
     }
 
     private JPanel createHexagonGrid() {
         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
+        panel.setLayout(null);
+        panel.setBackground(Color.WHITE);
+        panel.setPreferredSize(new Dimension(800, 800));
         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();
+        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);
     }
 
     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.setBackground(Color.LIGHT_GRAY);
+        panel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
 
         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(150, 150));  // Augmenter la taille pour la prévisualisation
+        nextTilePreview.setPreferredSize(new Dimension(150, 150));
         nextTilePreview.setBackground(Color.GRAY);
-        nextTilePreview.setOpaque(true);  // Rendre le fond opaque pour une meilleure visibilité
-        nextTilePreview.setTile(nextTile);
+        nextTilePreview.setOpaque(true);
         panel.add(nextTilePreview);
 
         return panel;
diff --git a/src/main/java/view/MenuView.java b/src/main/java/view/MenuView.java
index 9d5cadb..0418fbe 100644
--- a/src/main/java/view/MenuView.java
+++ b/src/main/java/view/MenuView.java
@@ -3,7 +3,6 @@ package view;
 import javax.swing.*;
 import java.awt.*;
 
-
 public class MenuView extends JComponent {
     private BtnPerso resumeButton;
     private BtnPerso newGameButton;
@@ -14,42 +13,38 @@ public class MenuView extends JComponent {
     private ImageIcon quit;
     private JPanel panelCoté;
     private JLabel labelImg;
-    
-    
-   
 
-    public MenuView(){
+    public MenuView() {
 
-         panelCoté = new JPanel(new GridBagLayout());
+        panelCoté = new JPanel(new GridBagLayout());
         GridBagConstraints gbc = new GridBagConstraints();
-        panelCoté.setBackground(new Color(243,171,115,150));
-        panelCoté.setPreferredSize(new Dimension(300,0));
+        panelCoté.setBackground(new Color(243, 171, 115, 150));
+        panelCoté.setPreferredSize(new Dimension(300, 0));
 
-        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");
+        // Utilisation de getResource pour charger les images
+        backgroundImage = new ImageIcon(getClass().getResource("/view/img/bg.png")).getImage();
+        logo = new ImageIcon(getClass().getResource("/view/img/D.png"));
+        quit = new ImageIcon(getClass().getResource("/view/img/quit.png"));
+
+        // Redimensionnement des images
         Image quit1 = quit.getImage();
         Image lg = logo.getImage();
         Image resizedlg = lg.getScaledInstance(300, 300, Image.SCALE_SMOOTH);
         ImageIcon logoIcon = new ImageIcon(resizedlg);
 
-
-
         labelImg = new JLabel(logoIcon);
-    
-
 
         resumeButton = new BtnPerso("RESUME");
         newGameButton = new BtnPerso("NEW GAME");
-        
+
         int buttonWidth = 65;
         int buttonHeight = 40;
-        Image resizedImage = quit1.getScaledInstance(buttonWidth, buttonHeight, Image.SCALE_SMOOTH); 
+        Image resizedImage = quit1.getScaledInstance(buttonWidth, buttonHeight, Image.SCALE_SMOOTH);
         ImageIcon resizedIcon = new ImageIcon(resizedImage);
 
         quitButton = new JButton(resizedIcon);
         quitButton.setPreferredSize(new Dimension(buttonWidth, buttonHeight));
-        quitButton.setPreferredSize(new Dimension(50,50));
+        quitButton.setPreferredSize(new Dimension(50, 50));
         quitButton.setBackground(new Color(243, 171, 115, 150));
         quitButton.setBorderPainted(false);
         quitButton.setOpaque(true);
@@ -66,13 +61,11 @@ public class MenuView extends JComponent {
 
         gbc.gridx = 0;
         gbc.gridy = 0;
-       
-        panelCoté.add(labelImg,gbc); 
-        
+
+        panelCoté.add(labelImg, gbc);
 
         gbc.gridy = 1;
-        panelCoté.add(resumeButton,gbc);
-        
+        panelCoté.add(resumeButton, gbc);
 
         gbc.gridy = 2;
         panelCoté.add(newGameButton, gbc);
@@ -80,12 +73,8 @@ public class MenuView extends JComponent {
         gbc.gridy = 3;
         panelCoté.add(quitButton, gbc);
 
-
         setLayout(new BorderLayout());
-        add(panelCoté,BorderLayout.WEST);
-      
-        
-
+        add(panelCoté, BorderLayout.WEST);
     }
 
     @Override
@@ -93,6 +82,7 @@ public class MenuView extends JComponent {
         super.paintComponent(g);
         g.drawImage(backgroundImage, 0, 0, getWidth(), getHeight(), this);
     }
+
     public BtnPerso getResumeButton() {
         return resumeButton;
     }
@@ -101,8 +91,7 @@ public class MenuView extends JComponent {
         return newGameButton;
     }
 
-    public JButton getQuiButton(){
+    public JButton getQuiButton() {
         return quitButton;
     }
-
 }