From ad853fcceafef37234302ba409405206b9a3d93e Mon Sep 17 00:00:00 2001
From: Elias Leinenweber <elias.leinenweber@etu.unistra.fr>
Date: Tue, 30 Mar 2021 17:50:19 +0200
Subject: [PATCH] Meilleur respect de MVC

---
 Wanderer.csproj           |  1 +
 model/Improvement.cs      | 11 ++++++++++
 model/Map.cs              |  7 ++++---
 model/Tile.cs             | 14 ++++++++++++-
 view/Controls/MapView.cs  |  1 +
 view/Controls/TileView.cs | 15 +------------
 view/FormJeu.cs           | 44 +++++++++++++++++++++++++++++----------
 7 files changed, 64 insertions(+), 29 deletions(-)
 create mode 100644 model/Improvement.cs

diff --git a/Wanderer.csproj b/Wanderer.csproj
index add06fe..1b05d80 100644
--- a/Wanderer.csproj
+++ b/Wanderer.csproj
@@ -47,6 +47,7 @@
     <Reference Include="System.Xml" />
   </ItemGroup>
   <ItemGroup>
+    <Compile Include="model\Improvement.cs" />
     <Compile Include="model\Player.cs" />
     <Compile Include="view\Controls\MapView.Designer.cs" />
     <Compile Include="view\FormFin.cs">
diff --git a/model/Improvement.cs b/model/Improvement.cs
new file mode 100644
index 0000000..e98d7fa
--- /dev/null
+++ b/model/Improvement.cs
@@ -0,0 +1,11 @@
+namespace Wanderer.model
+{
+    public enum Improvement
+    {
+        TrainStation,
+        Path,
+        Refuge,
+        Club,
+        Factory
+    }
+}
\ No newline at end of file
diff --git a/model/Map.cs b/model/Map.cs
index fd73419..b5ad3de 100644
--- a/model/Map.cs
+++ b/model/Map.cs
@@ -1,6 +1,4 @@
-using Wanderer.model;
-
-namespace Wanderer
+namespace Wanderer.model
 {
     public class Map
     {
@@ -9,6 +7,9 @@ namespace Wanderer
         public Map(int x, int y)
         {
             _tiles = new Tile[x, y];
+            for (int i = 0; i < x; ++i)
+                for (int j = 0; j < y; ++j)
+                    _tiles[i, j] = new Tile();
         }
 
         public Tile[,] Tiles
diff --git a/model/Tile.cs b/model/Tile.cs
index e211908..42273a9 100644
--- a/model/Tile.cs
+++ b/model/Tile.cs
@@ -2,7 +2,19 @@
 {
     public class Tile
     {
+        private Improvement _improvement;
         public Terrain Terrain { get; set; }
-        public Player Owner { get; set;  }
+        public Player Owner { get; set; }
+        public bool HasChanged { get; set; }
+
+        public Improvement Improvement
+        {
+            get => _improvement;
+            set
+            {
+                _improvement = _improvement == 0 ? value : _improvement;
+                HasChanged = true;
+            }
+        }
     }
 }
\ No newline at end of file
diff --git a/view/Controls/MapView.cs b/view/Controls/MapView.cs
index 38abee5..f01af9b 100644
--- a/view/Controls/MapView.cs
+++ b/view/Controls/MapView.cs
@@ -2,6 +2,7 @@
 using System.Drawing.Design;
 using System.Windows.Forms;
 using System.Windows.Forms.Design;
+using Wanderer.model;
 
 namespace Wanderer.view.Controls
 {
diff --git a/view/Controls/TileView.cs b/view/Controls/TileView.cs
index 7902f69..15ea695 100644
--- a/view/Controls/TileView.cs
+++ b/view/Controls/TileView.cs
@@ -7,7 +7,7 @@ namespace Wanderer.view.Controls
 {
     public class TileView : Button
     {
-        private Tile model;
+        public Tile model { get; }
         
         public TileView(Tile tile)
         {
@@ -36,18 +36,5 @@ namespace Wanderer.view.Controls
         {
             MapView.SelectedTile = this;
         }
-
-        private Image imageFromTerrain()
-        {
-            switch (model.Terrain)
-            {
-                case Terrain.Plains:
-                    break;
-                case Terrain.Hills:
-                    break;
-            }
-
-            return null;
-        }
     }
 }
\ No newline at end of file
diff --git a/view/FormJeu.cs b/view/FormJeu.cs
index 78fb30c..b369039 100644
--- a/view/FormJeu.cs
+++ b/view/FormJeu.cs
@@ -7,6 +7,7 @@ using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
 using System.Windows.Forms;
+using Wanderer.model;
 using Wanderer.view.Controls;
 
 namespace Wanderer.view
@@ -61,6 +62,11 @@ namespace Wanderer.view
             lblArgent.Text = "Argent :" + nombreMarks;
             lblMarcheur.Text = "Marcheurs : " + nombreRandonneurs;
             lblTour.Text = "Nombre d'action : " + nombreTour++;
+            if (MapView.SelectedTile != null && MapView.SelectedTile.model.HasChanged)
+            {
+                MapView.SelectedTile.Image = image();
+                MapView.SelectedTile.model.HasChanged = false;
+            }
         }
 
 
@@ -77,20 +83,18 @@ namespace Wanderer.view
 
         private void btnUsine_Click(object sender, EventArgs e)
         {
-            if(nombreMarks >= 60)
-            {
-                MapView.SelectedTile.Image = btnUsine.Image;
-                nombreUsine++;
-                nombreMarks -= 40;
-                updateLabels();
-            }
+            if (nombreMarks < 60) return;
+            MapView.SelectedTile.model.Improvement = Improvement.Factory;
+            nombreUsine++;
+            nombreMarks -= 40;
+            updateLabels();
         }
 
         private void btnTrain_Click(object sender, EventArgs e)
         {
             if(nombreMarks >= 10 && gareCreated)
             {
-                MapView.SelectedTile.Image = btnTrain.Image;
+                MapView.SelectedTile.model.Improvement = Improvement.TrainStation;
                 gareCreated = false;
                 nombreMarks -= 10;
                 updateLabels();
@@ -105,7 +109,7 @@ namespace Wanderer.view
             }
             if (nombreMarks >= 30)
             {
-                MapView.SelectedTile.Image = btnRefuge.Image;
+                MapView.SelectedTile.model.Improvement = Improvement.Refuge;
                 nombreRefuge++;
                 nombreMarks -= 30;
                 updateLabels();
@@ -121,7 +125,7 @@ namespace Wanderer.view
             }
             if (nombreMarks >= 10)
             {
-                MapView.SelectedTile.Image = btnChemin.Image;
+                MapView.SelectedTile.model.Improvement = Improvement.Path;
                 nombreChemin++;
                 nombreMarks -= 10;
                 updateLabels();
@@ -132,7 +136,7 @@ namespace Wanderer.view
         {
             if(nombreMarks >= 15)
             {
-                MapView.SelectedTile.Image = btnClub.Image;
+                MapView.SelectedTile.model.Improvement = Improvement.Club;
                 nombreClub++;
                 nombreMarks -= 10;
                 updateLabels();
@@ -165,6 +169,24 @@ namespace Wanderer.view
             Application.Exit();
         }
 
+        public Image image()
+        {
+            switch (MapView.SelectedTile.model.Improvement)
+            {
+                case Improvement.Club:
+                    return btnClub.Image;
+                case Improvement.Factory:
+                    return btnUsine.Image;
+                case Improvement.Path:
+                    return btnChemin.Image;
+                case Improvement.Refuge:
+                    return btnRefuge.Image;
+                case Improvement.TrainStation:
+                    return btnTrain.Image;
+            }
+
+            return null;
+        }
 
     }
 }
-- 
GitLab