diff --git a/src/main/Main.java b/src/main/Main.java
new file mode 100644
index 0000000..06f6410
--- /dev/null
+++ b/src/main/Main.java
@@ -0,0 +1,10 @@
+package main;
+
+import javax.swing.SwingUtilities;
+import view.GameView;
+
+public class Main {
+    public static void main(String[] args) {
+        SwingUtilities.invokeLater(() -> new GameView());
+    }
+}
diff --git a/src/main/java/controller/GameController.java b/src/main/java/controller/GameController.java
new file mode 100644
index 0000000..086b323
--- /dev/null
+++ b/src/main/java/controller/GameController.java
@@ -0,0 +1,98 @@
+package controller;
+
+import model.Tile;
+import view.HexagonTile;
+import view.GameView;
+
+import java.awt.*;
+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 JPanel gridPanel;
+
+    public GameController(Map<Point, HexagonTile> hexagonMap, Set<Point> availablePositions, JPanel gridPanel, Tile nextTile, HexagonTile nextTilePreview) {
+        this.hexagonMap = hexagonMap;
+        this.availablePositions = availablePositions;
+        this.gridPanel = gridPanel;
+        this.nextTile = nextTile;
+        this.nextTilePreview = nextTilePreview;
+    }
+
+    public void placeInitialTile(Point position) {
+        addHexagonTile(position, gridPanel, 50);
+        availablePositions.remove(position);
+
+        Point[] adjacentPositions = getAdjacentPositions(position);
+        for (Point adj : adjacentPositions) {
+            if (!hexagonMap.containsKey(adj)) {
+                availablePositions.add(adj);
+                addHexagonTile(adj, gridPanel, 50);
+            }
+        }
+    }
+
+    public void placeTile(Point position) {
+        if (availablePositions.contains(position)) {
+            HexagonTile hexTile = hexagonMap.get(position);
+            if (hexTile != null && !hexTile.isFilled()) {
+                // Placer la tuile actuelle
+                hexTile.setTile(nextTile);
+
+                // Générer une nouvelle tuile et mettre à jour la prévisualisation
+                nextTile = generateRandomTile();
+                nextTilePreview.setTile(nextTile);
+
+                updateAdjacentPositions(position);
+            }
+        }
+    }
+
+    private void addHexagonTile(Point position, JPanel panel, int hexSize) {
+        int xOffset = position.x * (int) (hexSize * 3 / 2);  // Décalage horizontal ajusté
+        int yOffset = position.y * (int) (Math.sqrt(3) * hexSize);  // Décalage vertical ajusté
+
+        if (position.x % 2 != 0) {
+            yOffset += (int) (Math.sqrt(3) * hexSize / 2);
+        }
+
+        HexagonTile hexTile = new HexagonTile(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();
+    }
+
+    private void updateAdjacentPositions(Point position) {
+        Point[] adjacentPositions = getAdjacentPositions(position);
+        for (Point adj : adjacentPositions) {
+            if (!hexagonMap.containsKey(adj)) {
+                availablePositions.add(adj);
+                addHexagonTile(adj, gridPanel, 50);
+            }
+        }
+    }
+
+    private Point[] getAdjacentPositions(Point position) {
+        return new Point[]{
+                new Point(position.x + 1, position.y),
+                new Point(position.x - 1, position.y),
+                new Point(position.x, position.y + 1),
+                new Point(position.x, position.y - 1),
+                new Point(position.x + 1, position.y - 1),
+                new Point(position.x - 1, position.y + 1)
+        };
+    }
+
+    private Tile generateRandomTile() {
+        return new Tile();
+    }
+}
diff --git a/src/main/java/controller/HexagonMouseListener.java b/src/main/java/controller/HexagonMouseListener.java
index 254c1de..689da25 100644
--- a/src/main/java/controller/HexagonMouseListener.java
+++ b/src/main/java/controller/HexagonMouseListener.java
@@ -1,7 +1,6 @@
 package controller;
 
 import view.HexagonTile;
-import view.GameView;
 import java.awt.event.MouseAdapter;
 import java.awt.event.MouseEvent;
 import java.awt.Point;
@@ -10,12 +9,12 @@ import java.util.Set;
 public class HexagonMouseListener extends MouseAdapter {
 
     private final HexagonTile hexTile;
-    private final GameView gameView;
+    private final GameController gameController;  // Utilise maintenant GameController
     private final Set<Point> availablePositions;
 
-    public HexagonMouseListener(HexagonTile hexTile, GameView gameView, Set<Point> availablePositions) {
+    public HexagonMouseListener(HexagonTile hexTile, GameController gameController, Set<Point> availablePositions) {
         this.hexTile = hexTile;
-        this.gameView = gameView;
+        this.gameController = gameController;
         this.availablePositions = availablePositions;
     }
 
@@ -23,7 +22,7 @@ public class HexagonMouseListener extends MouseAdapter {
     public void mouseClicked(MouseEvent e) {
         Point position = hexTile.getPosition();
         if (availablePositions.contains(position)) {
-            gameView.placeTile(position);
+            gameController.placeTile(position);  // Appelle la méthode placeTile du contrôleur
         }
     }
 }
diff --git a/src/main/java/view/GameView.java b/src/main/java/view/GameView.java
index 0db1374..7cc29ec 100644
--- a/src/main/java/view/GameView.java
+++ b/src/main/java/view/GameView.java
@@ -1,7 +1,7 @@
 package view;
 
+import controller.GameController;
 import model.Tile;
-import controller.HexagonMouseListener;
 
 import javax.swing.*;
 import java.awt.*;
@@ -18,6 +18,7 @@ public class GameView extends JFrame {
     private Tile nextTile;
     private HexagonTile nextTilePreview; // Tuile de prévisualisation à droite
     private int tileCount;
+    private GameController gameController;
 
     public GameView() {
         this.hexagonMap = new HashMap<>();
@@ -41,9 +42,12 @@ public class GameView extends JFrame {
         JPanel controlPanel = createControlPanel();
         add(controlPanel, BorderLayout.EAST);
 
+        // Initialiser le contrôleur
+        gameController = new GameController(hexagonMap, availablePositions, gridPanel, nextTile, nextTilePreview);
+
         // Placer la première tuile au centre
         Point initialPosition = new Point(0, 0);
-        placeInitialTile(initialPosition);
+        gameController.placeInitialTile(initialPosition);
         centerScrollOnPosition(initialPosition, scrollPane);
 
         pack();
@@ -51,83 +55,10 @@ public class GameView extends JFrame {
         setVisible(true);
     }
 
-    private void placeInitialTile(Point position) {
-        addHexagonTile(position, gridPanel, 50);
-        availablePositions.remove(position);
-
-        Point[] adjacentPositions = getAdjacentPositions(position);
-        for (Point adj : adjacentPositions) {
-            if (!hexagonMap.containsKey(adj)) {
-                availablePositions.add(adj);
-                addHexagonTile(adj, gridPanel, 50);
-            }
-        }
-    }
-
     private JPanel createHexagonGrid() {
         return new HexagonGridPanel();
     }
 
-    // Ajouter un hexagone à une position donnée
-    private void addHexagonTile(Point position, JPanel panel, int hexSize) {
-        int xOffset = position.x * (int) (hexSize * 3 / 2);  // Décalage horizontal ajusté
-        int yOffset = position.y * (int) (Math.sqrt(3) * hexSize);  // Décalage vertical ajusté
-
-        // Décaler les colonnes impaires verticalement
-        if (position.x % 2 != 0) {
-            yOffset += (int) (Math.sqrt(3) * hexSize / 2);
-        }
-
-        HexagonTile hexTile = new HexagonTile(position);
-        hexTile.setBounds(xOffset, yOffset, hexSize, hexSize);
-        // Utiliser la classe HexagonMouseListener à la place de la classe anonyme
-        hexTile.addMouseListener(new HexagonMouseListener(hexTile, this, availablePositions));
-
-        hexagonMap.put(position, hexTile);
-        panel.add(hexTile);
-        panel.revalidate();
-        panel.repaint();
-    }
-
-    // Placer une tuile à la position spécifiée
-    public void placeTile(Point position) {
-        if (availablePositions.contains(position)) {
-            HexagonTile hexTile = hexagonMap.get(position);
-            if (hexTile != null && !hexTile.isFilled()) {
-                // Placer la tuile actuelle
-                hexTile.setTile(nextTile);
-                tileCount++;
-
-                // Générer une nouvelle tuile et mettre à jour la prévisualisation
-                nextTile = generateRandomTile();
-                nextTilePreview.setTile(nextTile);
-
-                updateAdjacentPositions(position);
-            }
-        }
-    }
-
-    private void updateAdjacentPositions(Point position) {
-        Point[] adjacentPositions = getAdjacentPositions(position);
-        for (Point adj : adjacentPositions) {
-            if (!hexagonMap.containsKey(adj)) {
-                availablePositions.add(adj);
-                addHexagonTile(adj, gridPanel, 50);
-            }
-        }
-    }
-
-    private Point[] getAdjacentPositions(Point position) {
-        return new Point[]{
-                new Point(position.x + 1, position.y),
-                new Point(position.x - 1, position.y),
-                new Point(position.x, position.y + 1),
-                new Point(position.x, position.y - 1),
-                new Point(position.x + 1, position.y - 1),
-                new Point(position.x - 1, position.y + 1)
-        };
-    }
-
     private Tile generateRandomTile() {
         return new Tile();
     }
@@ -153,8 +84,4 @@ public class GameView extends JFrame {
 
         return panel;
     }
-
-    public static void main(String[] args) {
-        SwingUtilities.invokeLater(() -> new GameView());
-    }
 }
diff --git a/src/main/java/view/HexagonTile.java b/src/main/java/view/HexagonTile.java
index 044363f..58c3918 100644
--- a/src/main/java/view/HexagonTile.java
+++ b/src/main/java/view/HexagonTile.java
@@ -1,7 +1,7 @@
 package view;
 
 import model.Tile;
-import model.TerrainType;  // Ajout de l'import pour TerrainType
+import model.TerrainType;
 
 import javax.swing.*;
 import java.awt.*;
diff --git a/src/main/java/view/TileView.java b/src/main/java/view/TileView.java
index dd10353..d7684c6 100644
--- a/src/main/java/view/TileView.java
+++ b/src/main/java/view/TileView.java
@@ -1,7 +1,7 @@
 package view;
 
 import model.Tile;
-import model.TerrainType;  // Ajout de l'import pour TerrainType
+import model.TerrainType; 
 
 import javax.swing.*;
 import java.awt.*;
@@ -13,7 +13,7 @@ public class TileView extends JPanel {
 
     public TileView(Tile tile) {
         this.tile = tile;
-        setPreferredSize(new Dimension(100, 100));  // Ajuste selon la taille de la tuile
+        setPreferredSize(new Dimension(100, 100));
     }
 
     @Override