From e8031f3707a2dc505456a211138dfd6ab72a66df Mon Sep 17 00:00:00 2001
From: Kopperoinen Paulus <paulus.j.kopperoinen@student.jyu.fi>
Date: Wed, 1 Nov 2023 21:59:42 +0200
Subject: [PATCH] =?UTF-8?q?sain=20vihdoinkin=20liikkumisesta=20suunnilleen?=
 =?UTF-8?q?=20sellaista=20kuin=20haluan.=20vaihdoin=20madon=20liikkumisen?=
 =?UTF-8?q?=20yhdest=C3=A4=20yksik=C3=B6st=C3=A4=20madon=20leveyteen?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 Matopeli/Matopeli/Matopeli.cs | 138 ++++++++++++++++++++++++----------
 1 file changed, 99 insertions(+), 39 deletions(-)

diff --git a/Matopeli/Matopeli/Matopeli.cs b/Matopeli/Matopeli/Matopeli.cs
index 75ee4a7..0762800 100644
--- a/Matopeli/Matopeli/Matopeli.cs
+++ b/Matopeli/Matopeli/Matopeli.cs
@@ -16,35 +16,34 @@ namespace matopeli;
 public class matopeli : PhysicsGame
 {
     private static readonly string[] tasonkuva = {
-        "#################",
-        "#               #",
-        "#               #",
-        "#               #",
-        "#               #",
-        "#               #",
-        "#               #", 
-        "#               #",
-        "#               #",
-        "#               #",
-        "#               #",
-        "#               #",
-        "#               #",
-        "#################",
+        "#####################",
+        "#                   #",
+        "#                   #",
+        "#                   #",
+        "#                   #",
+        "#                   #",
+        "#                   #",
+        "#                   #",
+        "#                   #",
+        "#                   #",
+        "#                   #", 
+        "#                   #",
+        "#                   #",
+        "#                   #",
+        "#                   #",
+        "#                   #",
+        "#                   #",
+        "#####################",
     };
     private Objektit Mato;
     private Objektit Omena;
+    private Objektit MatoMuu;
     
-    public double MatoX;
-    public double MatoY;
+    public List<Vector> MatoSijainti = new List<Vector>();
+    public List<PhysicsObject> MatoKeho = new List<PhysicsObject>();
 
-    public int LuoOmenaX;
-    public int LuoOmenaY;
-    
-    public int SuuntaX;
-    public int SuuntaY;
-
-    public int leveys = 60;
-    public int korkeus = 60;
+    public int leveys = 40;
+    public int korkeus = 40;
     
     private static readonly Image seinakuva = LoadImage("seina.png");
     private static readonly Image matopaakuva = LoadImage("matopaa.png");
@@ -57,7 +56,7 @@ public class matopeli : PhysicsGame
     private bool SuuntaOikea = false;
     private bool SuuntaVasen = false;
 
-    private bool OmenaKentalla = false;
+    private bool OmenaKentalla = true;
     public override void Begin()
     {
         // Kirjoita ohjelmakoodisi tähän
@@ -76,6 +75,7 @@ public class matopeli : PhysicsGame
         LuoMato();
         Asetaohjaimet();
         LuoAikalaskuri();
+        LuoOmena();
         
         TileMap tiles = TileMap.FromStringArray(tasonkuva);
         tiles['#'] = LuoSeina;
@@ -98,12 +98,43 @@ public class matopeli : PhysicsGame
         return Mato;
     }
 
+    /// <summary>
+    /// Luodaan omena johonkin satunnaiseen kohtaan kartalla, joka ei ole samassa kohtaa madon kanssa.
+    /// </summary>
+    /// <returns></returns>
     private PhysicsObject LuoOmena()
     {
+        
         Vector paikka = Level.GetRandomPosition();
-        if (paikka.X-Mato.X<20)
+
+        for (int i = 0; i < 20; i++)
         {
-            if (paikka.Y-Mato.Y<20)
+            if (paikka.X-Mato.X<20)
+            {
+                if (paikka.Y-Mato.Y<20)
+                {
+                    paikka = Level.GetRandomPosition();
+                }
+            }
+            if (paikka.X<70)
+            {
+                if (paikka.X<-70)
+                {
+                    paikka = Level.GetRandomPosition();
+                } 
+            }
+            else
+            {
+                paikka = Level.GetRandomPosition();
+            }
+            if (paikka.Y<70)
+            {
+                if (paikka.Y<-70)
+                {
+                    paikka = Level.GetRandomPosition();
+                } 
+            }
+            else
             {
                 paikka = Level.GetRandomPosition();
             }
@@ -127,6 +158,20 @@ public class matopeli : PhysicsGame
         return Seina;
     }
     
+    /// <summary>
+    /// Tehdään aliohjelma, joka luo uusia osia madon perään.
+    /// </summary>
+    private PhysicsObject LuoMatoKeho(Vector Paikka)
+    {
+        MatoMuu = new Objektit(leveys, korkeus, Paikka);
+        MatoMuu.Tag = "matokeho";
+        MatoMuu.Image = matokehokuva;
+        MatoMuu.Position = Paikka;
+        MatoKeho.Add(MatoMuu);
+        Add(MatoMuu);
+        return MatoMuu;
+    }
+    
     private void MatoSyoOmenan()
     {
         Omena.Destroy();
@@ -210,52 +255,67 @@ public class matopeli : PhysicsGame
      private void LuoAikalaskuri()
         {
             Timer aikalaskuri = new Timer();
-            aikalaskuri.Interval = 0.01;
+            aikalaskuri.Interval = 0.11;
             aikalaskuri.Timeout += PaivitaKentta;
             aikalaskuri.Start();
         }
 
+     /// <summary>
+     /// Kun ajastimesta loppuu aika, siirtyy peli tähän funktioon, jonka tarkoituksena on hahmottaa, mitä kaikkea pelissä on tapahtunut ja miten siihen tulee reagoida.
+     /// 
+     /// </summary>
      private void PaivitaKentta()
      {
-         if (Math.Abs(Mato.X)-Math.Abs(Mato.X)<0.001 && Math.Abs(Mato.Y)-Math.Abs(Mato.Y)<0.001)
-         {
-             LiikutaMatoa();
-         }
+         //Tämän on tarkoitus liikuttaa matoa, aina, kun se saapuu tasalukuun.
+         //tavoitteena oli,että mato ei liikkuisi, jos se on ruudun puolivälissä
+         
+
+         MatoSijainti.Add(Mato.Position);
+         LiikutaMatoa();
+             
+         
+         
          
          if (OmenaKentalla == false)
          {
+             LuoMatoKeho(MatoSijainti[MatoSijainti.Count-MatoKeho.Count-1]);
+             
              LuoOmena();
-             //KasvataMatoa();
          }
+         
      }
 
     private void LiikutaMatoa()
     {
         if (SuuntaYlos==true)
         {
-            Mato.Y++;
+            Mato.Y = Mato.Y + leveys;
             Mato.Angle = Angle.FromDegrees(90);
         }
         if (SuuntaAlas==true)
         {
-            Mato.Y--;
+            Mato.Y= Mato.Y - leveys;
             Mato.Angle = Angle.FromDegrees(270);
         }
         if (SuuntaOikea==true)
         {
-            Mato.X++;
+            Mato.X= Mato.X + leveys;
             Mato.Angle = Angle.FromDegrees(0);
         }
         if (SuuntaVasen==true)
         {
-            Mato.X--;
+            Mato.X= Mato.X - leveys;
             Mato.Angle = Angle.FromDegrees(180);
         }
-        
 
     }
 
-    private class Objektit : PhysicsObject
+    /// <summary>
+    /// Tehdään silmukka, joka käy madon kaikki sijainnit ja liikuttaa madon muut osat niiden mukaan.
+    /// </summary>
+
+
+    public class Objektit : PhysicsObject
     {
          public Objektit(double leveys, double korkeus, Vector paikka)
         : base(leveys, korkeus)
-- 
GitLab