From bf1f7dcffce799c2d947461f13a6db5f9d2afed6 Mon Sep 17 00:00:00 2001
From: Kopperoinen Paulus Juho <paulus.j.kopperoinen@student.jyu.fi>
Date: Fri, 24 Nov 2023 17:08:29 +0200
Subject: [PATCH] =?UTF-8?q?Vaihdoin=20nimet=20sellaisiksi,=20ettei=20niiss?=
 =?UTF-8?q?=C3=A4=20ole=20=5F.=20Muutin=20kent=C3=A4n=20sellaiseksi,=20ett?=
 =?UTF-8?q?=C3=A4=20se=20luodaan=20silmukoilla,=20eik=C3=A4=20sellaisella?=
 =?UTF-8?q?=20merkkikartalla.=20MuutinArvoOmena=20aliohjelman=20ArvoPaikak?=
 =?UTF-8?q?si,=20ja=20tein=20siit=C3=A4=20funktion,=20koska=20minulla=20ei?=
 =?UTF-8?q?=20ollut=20aiemmin=20yht=C3=A4k=C3=A4=C3=A4n=20funktiota,=20jok?=
 =?UTF-8?q?a=20palauttaisi=20jotain=20ohjelmassa?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 Matopeli/Matopeli/Matopeli.cs | 345 ++++++++++++++++++----------------
 1 file changed, 180 insertions(+), 165 deletions(-)

diff --git a/Matopeli/Matopeli/Matopeli.cs b/Matopeli/Matopeli/Matopeli.cs
index ea15621..38e6445 100644
--- a/Matopeli/Matopeli/Matopeli.cs
+++ b/Matopeli/Matopeli/Matopeli.cs
@@ -11,31 +11,9 @@ namespace matopeli;
 
 public class Matopeli : PhysicsGame
 {
-    private static readonly string[] Tasonkuva = {
-        "#####################",
-        "#                   #",
-        "#                   #",
-        "#                   #",
-        "#                   #",
-        "#                   #",
-        "#         m         #",
-        "#                   #",
-        "#                   #",
-        "#                   #",
-        "#                   #", 
-        "#                   #",
-        "#                   #",
-        "#                   #",
-        "#                   #",
-        "#                   #",
-        "#o                  #",
-        "#####################",
-    };
-    
-    
-    private Objektit _mato;
-    private Objektit _omena;
-    private Objektit _matoMuu;
+    private Objektit mato;
+    private Objektit omena;
+    private Objektit matomuu;
 
     private IntMeter Pistelaskuri;
     public IntMeter Ennatyslaskuri;
@@ -44,23 +22,23 @@ public class Matopeli : PhysicsGame
     private readonly List<PhysicsObject> MatoKeho = new List<PhysicsObject>();
 
     private int Leveys;
-    private int Korkeus;
-    private double Nopeus;
-
-    private Vector _omenaAlkuPaikka;
+    private int KenttaKoko;
+    private double Nopeus; 
+    private int KentanSijainti;
     
     private static readonly Image Seinakuva = LoadImage("seina.png");
     private static readonly Image Matopaakuva = LoadImage("matopaa.png");
-    private readonly Image _matokehokuva = LoadImage("matokeho.png");
-    private readonly Image _omenakuva = LoadImage("omena.png");
+    private readonly Image matokehokuva = LoadImage("matokeho.png");
+    private readonly Image omenakuva = LoadImage("omena.png");
     
-    private bool _suuntaYlos;
-    private bool _suuntaAlas;
-    private bool _suuntaOikea;
-    private bool _suuntaVasen;
+    private bool suuntaYlos;
+    private bool suuntaAlas;
+    private bool suuntaOikea;
+    private bool suuntaVasen;
 
-    private bool _matoLiikkunut;
-    private bool _omenaKentalla;
+    private bool matoLiikkunut;
+    private bool omenaKentalla;
+    
     
     /// <summary>
     /// Kun peli käynnistetään ensimmäisen kerran
@@ -80,11 +58,7 @@ public class Matopeli : PhysicsGame
         MatoSijainti.Clear();
         ClearAll();
         Asetukset();
-        TileMap tiles = TileMap.FromStringArray(Tasonkuva);
-        tiles['#'] = LuoSeina;
-        tiles['m'] = LuoMato;
-        tiles.Insert(Leveys,Korkeus); 
-        _omenaAlkuPaikka = _mato.Position;
+        LuoMato(Luoseinat(KenttaKoko, Leveys));
         Asetaohjaimet();
         LuoAikalaskuri();
         LuoPistelaskuri();
@@ -109,12 +83,12 @@ public class Matopeli : PhysicsGame
     /// <summary>
     /// Laskee pisteet, joita kerätään omenoita syömällä
     /// </summary>
-    void LuoPistelaskuri()
+    private void LuoPistelaskuri()
     {
         Pistelaskuri = new IntMeter(0);               
         Label pistenaytto = new Label(); 
-        pistenaytto.X = Screen.Left + 500;
-        pistenaytto.Y = Screen.Top - 5;
+        pistenaytto.X = KentanSijainti+ KenttaKoko/2  * Leveys;
+        pistenaytto.Y = KentanSijainti + (KenttaKoko+2) * Leveys;
         pistenaytto.TextColor = Color.Brown;
         pistenaytto.Color = Color.LightGreen;
         pistenaytto.Title = "Pisteet: ";
@@ -129,14 +103,15 @@ public class Matopeli : PhysicsGame
     private void Asetukset()
     {
     Leveys = 40;
-    Korkeus = 40;
-    _suuntaYlos = false;
-    _suuntaAlas = false;
-    _suuntaOikea = true; 
-    _suuntaVasen = false;
+    KenttaKoko = 16;
+    KentanSijainti = -300;
+    suuntaYlos = false;
+    suuntaAlas = false;
+    suuntaOikea = true; 
+    suuntaVasen = false;
     Nopeus = 0.1;
-    _matoLiikkunut = false;
-    _omenaKentalla = true;
+    matoLiikkunut = false;
+    omenaKentalla = true;
     }
     
     
@@ -148,22 +123,21 @@ public class Matopeli : PhysicsGame
         AloitaUusiPeli();
     }
     
+    
     /// <summary>
     /// Luo madon kentälle
     /// </summary>
     /// <returns></returns>
-    private PhysicsObject LuoMato()
+    private void LuoMato(Vector paikka)
     {
-        _mato = new Objektit(Leveys-5, Korkeus-5);
-        _mato.Image = Matopaakuva;
-        Add(_mato);
-        _mato.Tag = "mato";
-        
-        AddCollisionHandler(_mato, "omena", delegate(IPhysicsObject _, IPhysicsObject _) {MatoSyoOmenan();  });
-        AddCollisionHandler(_mato, "seina", delegate(IPhysicsObject _, IPhysicsObject _) {MatoKuolee();  });
-        AddCollisionHandler(_mato, "matokeho", delegate(IPhysicsObject _, IPhysicsObject _) {MatoKuolee();  });
-        
-        return _mato;
+        mato = new Objektit(Leveys-5, Leveys-5);
+        mato.Image = Matopaakuva;
+        Add(mato);
+        mato.Tag = "mato";
+        mato.Position = ArvoPaikka(paikka,3);
+        AddCollisionHandler(mato, "omena", delegate(IPhysicsObject omena, IPhysicsObject mato) {MatoSyoOmenan();  });
+        AddCollisionHandler(mato, "seina", delegate(IPhysicsObject seina, IPhysicsObject mato) {MatoKuolee();  });
+        AddCollisionHandler(mato, "matokeho", delegate(IPhysicsObject matomuu, IPhysicsObject mato) {MatoKuolee();  });
     }
 
     
@@ -172,74 +146,112 @@ public class Matopeli : PhysicsGame
     /// </summary>
     private void LuoOmena()
     {
-        Vector paikka = ArvoOmenaPaikka();
-        _omena = new Objektit(Korkeus-10, Leveys-10);
-        _omena.Shape = Shape.Circle;
-        _omena.Position = paikka;
-        _omena.Image = _omenakuva;
-        _omena.Tag = "omena";
-        Add(_omena);
-        _omenaKentalla = true;
+        int i = 1;
+        Vector paikka = ArvoPaikka(new Vector(KentanSijainti,KentanSijainti),0);
+        while (i>0)
+        {
+            if (paikka != mato.Position)
+            {
+                break;
+            }
+            paikka = ArvoPaikka(new Vector(KentanSijainti,KentanSijainti),0);
+        }
+        omena = new Objektit(Leveys-10, Leveys-10);
+        omena.Shape = Shape.Circle;
+        omena.Position = paikka;
+        omena.Image = omenakuva;
+        omena.Tag = "omena";
+        Add(omena);
+        omenaKentalla = true;
     }
 
     
     /// <summary>
-    /// tehtävä on arpoa omenalle paikka, johon se luodaan. En ole vieläkään varma kuinka hyvin tämä toimii.
+    /// Arpoo sattumanvaraisen paikan kentältä ja palauttaa kyseisen vektorin
     /// </summary>
-    private Vector ArvoOmenaPaikka()
+    /// <param name="alkupaikka">Mihin arvottavaa paikkaa halutaan suhteuttaa</param>
+    /// <param name="Keskitys">Kuinka paljon halutaan saada arvottavan paikan maksimaalinen arvo pois reunoilta</param>
+    /// <returns></returns>
+    private Vector ArvoPaikka(Vector alkupaikka, int Keskitys)
     {
-        Vector omenaPaikka;
+        Vector Paikka;
         double x;
         double y;
-
-        y = RandomGen.NextInt(-10, 5);
-        y = _omenaAlkuPaikka.Y + y * Leveys;
-            
-        x = RandomGen.NextInt(-8, 8);
-        x = _omenaAlkuPaikka.X + x * Leveys;
-
-        if (x - _mato.X < Leveys && y - _mato.Y < Leveys)
-        {
-            y = RandomGen.NextInt(-10, 5);
-            y = _omenaAlkuPaikka.Y + y * Leveys;
+        Vector omenaxy0 = new Vector(alkupaikka.X + Leveys, alkupaikka.X);
+        
+        y = RandomGen.NextInt(1 + Keskitys, KenttaKoko-1-Keskitys);
+        y = omenaxy0.Y + y * Leveys;
             
-            x = RandomGen.NextInt(-8, 8);
-            x = _omenaAlkuPaikka.X + x * Leveys;
-        }
+        x = RandomGen.NextInt(1+Keskitys, KenttaKoko-1-Keskitys);
+        x = omenaxy0.X + x * Leveys;
         
-        omenaPaikka = new Vector(x, y);
-        return omenaPaikka;
+        Paikka = new Vector(x, y);
+        return Paikka;
     }
         
     
     /// <summary>
     /// Luo kentän reunat
     /// </summary>
-    private PhysicsObject LuoSeina()
+    /// <param name="maara">luotavan kentän yhtä reunaa varten luotavien palikoiden määrä</param>
+    /// <param name="koko">kuinka isoja palikoita tehdään</param>
+    private Vector Luoseinat(int maara, int koko)
     {
-        PhysicsObject seina = new PhysicsObject(Leveys, Korkeus);
+        double x = KentanSijainti;
+        double y = KentanSijainti;
+        for (int i = 0; i < maara; i++)
+        {
+            LuoSeina(koko,new Vector(x,y));
+            x += koko;
+        }
+        for (int i = 0; i < maara+1; i++)
+        {
+            LuoSeina(koko,new Vector(x,y));
+            y += koko;
+        }
+        for (int i = 0; i < maara+1; i++)
+        {
+            LuoSeina(koko,new Vector(x,y));
+            x -= koko;
+        }
+        for (int i = 0; i < maara+2; i++)
+        {
+            LuoSeina(koko,new Vector(x,y));
+            y -= koko;
+        }
+
+        return new Vector(x, y);
+    }
+    
+    
+    /// <summary>
+    /// Luo kentän palikat, joista kentän reunat muodostuvat
+    /// </summary>
+    private void LuoSeina(int leveys, Vector paikka)
+    {
+        PhysicsObject seina = new PhysicsObject(leveys,leveys);
         seina.MakeStatic();
         seina.Color = Color.Green;
-        seina.Image = Seinakuva;
         seina.Tag = "seina";
-        return seina;
+        seina.Position = paikka;
+        seina.Image = Seinakuva;
+        Add(seina);
     }
     
     
     /// <summary>
     /// Tehdään aliohjelma, joka luo uusia osia madon perään.
     /// </summary>
-    public PhysicsObject LuoMatoKeho()
+    private void LuoMatoKeho()
     {
-        _matoMuu = new Objektit(Leveys-6, Korkeus-6);
-        _matoMuu.Tag = "matokeho";
-        _matoMuu.Image = _matokehokuva;
+        matomuu = new Objektit(Leveys-6, Leveys-6);
+        matomuu.Tag = "matokeho";
+        matomuu.Image = matokehokuva;
         Vector paikka = MatoSijainti[MatoSijainti.Count -1 - MatoKeho.Count];
-        _matoMuu.Position = paikka;
-        Add(_matoMuu);
-        MatoKeho.Add(_matoMuu);
-        AddCollisionHandler(_matoMuu, "omena", delegate(IPhysicsObject _, IPhysicsObject _) {LuoUusiOmena();  });
-        return _matoMuu;
+        matomuu.Position = paikka;
+        Add(matomuu);
+        MatoKeho.Add(matomuu);
+        AddCollisionHandler(matomuu, "omena", delegate(IPhysicsObject mato, IPhysicsObject omena) {LuoUusiOmena();  });
     }
 
     
@@ -248,8 +260,8 @@ public class Matopeli : PhysicsGame
     /// </summary>
     private void LuoUusiOmena()
     {
-        _omena.Destroy();
-        _omenaKentalla = false;
+        omena.Destroy();
+        omenaKentalla = false;
     }
     
     
@@ -258,9 +270,9 @@ public class Matopeli : PhysicsGame
     /// </summary>
     private void MatoSyoOmenan()
     {
-        _omena.Destroy();
+        omena.Destroy();
         Pistelaskuri.Value += 1;
-        _omenaKentalla = false;
+        omenaKentalla = false;
     }
     
     
@@ -270,19 +282,19 @@ public class Matopeli : PhysicsGame
      private void VaihdaSuuntaYlos()
         {
             
-            if (_suuntaAlas)
+            if (suuntaAlas)
             {
-                _suuntaOikea = false;
-                _suuntaVasen = false;
-                _suuntaYlos = false;
-                _suuntaAlas = true;
+                suuntaOikea = false;
+                suuntaVasen = false;
+                suuntaYlos = false;
+                suuntaAlas = true;
             }
             else
             {
-                _suuntaOikea = false;
-                _suuntaVasen = false;
-                _suuntaYlos = true;
-                _suuntaAlas = false;
+                suuntaOikea = false;
+                suuntaVasen = false;
+                suuntaYlos = true;
+                suuntaAlas = false;
             }
         }
      
@@ -292,19 +304,19 @@ public class Matopeli : PhysicsGame
     /// </summary>
      private void VaihdaSuuntaAlas()
         {
-            if (_suuntaYlos)
+            if (suuntaYlos)
             {
-                _suuntaOikea = false;
-                _suuntaVasen = false;
-                _suuntaYlos = true;
-                _suuntaAlas = false;
+                suuntaOikea = false;
+                suuntaVasen = false;
+                suuntaYlos = true;
+                suuntaAlas = false;
             }
             else
             {
-                _suuntaOikea = false;
-                _suuntaVasen = false;
-                _suuntaYlos = false;
-                _suuntaAlas = true;
+                suuntaOikea = false;
+                suuntaVasen = false;
+                suuntaYlos = false;
+                suuntaAlas = true;
             }
         }
       
@@ -314,20 +326,20 @@ public class Matopeli : PhysicsGame
     /// </summary>
      private void VaihdaSuuntaOikea()
         {
-            if (_suuntaVasen)
+            if (suuntaVasen)
             {
                 
-                _suuntaOikea = false;
-                _suuntaVasen = true;
-                _suuntaYlos = false;
-                _suuntaAlas = false;
+                suuntaOikea = false;
+                suuntaVasen = true;
+                suuntaYlos = false;
+                suuntaAlas = false;
             }
             else
             {
-                _suuntaOikea = true;
-                _suuntaVasen = false;
-                _suuntaYlos = false;
-                _suuntaAlas = false;
+                suuntaOikea = true;
+                suuntaVasen = false;
+                suuntaYlos = false;
+                suuntaAlas = false;
             }
 
         }
@@ -338,19 +350,19 @@ public class Matopeli : PhysicsGame
     /// </summary>
      private void VaihdaSuuntaVasen()
         {
-            if (_suuntaOikea)
+            if (suuntaOikea)
             {
-                _suuntaOikea = true;
-                _suuntaVasen = false;
-                _suuntaYlos = false;
-                _suuntaAlas = false;
+                suuntaOikea = true;
+                suuntaVasen = false;
+                suuntaYlos = false;
+                suuntaAlas = false;
             }
             else
             {
-                _suuntaOikea = false;
-                _suuntaVasen = true;
-                _suuntaYlos = false;
-                _suuntaAlas = false;
+                suuntaOikea = false;
+                suuntaVasen = true;
+                suuntaYlos = false;
+                suuntaAlas = false;
             }
         }
      
@@ -372,21 +384,21 @@ public class Matopeli : PhysicsGame
      /// </summary>
      private void PaivitaKentta()
      {
-         if (_matoLiikkunut == false)
+         if (matoLiikkunut == false)
          {
              return;
          }
          
-         if (_omenaKentalla == false)
+         if (omenaKentalla == false)
          {
              LuoMatoKeho();
              LuoOmena();
          }
          
-         MatoSijainti.Add(new Vector(_mato.X,_mato.Y));
+         MatoSijainti.Add(new Vector(mato.X,mato.Y));
          LiikutaMatoa();
          LiikutaKehoa();
-         MatoSijainti.Add(new Vector(_mato.X,_mato.Y));  
+         MatoSijainti.Add(new Vector(mato.X,mato.Y));  
      }
      
      
@@ -395,30 +407,30 @@ public class Matopeli : PhysicsGame
      /// </summary>
     private void LiikutaMatoa()
     {
-        _matoLiikkunut = false;
-        if (_suuntaYlos)
+        matoLiikkunut = false;
+        if (suuntaYlos)
         {
-            _mato.Y = _mato.Y + Leveys;
-            _mato.Angle = Angle.FromDegrees(90);
+            mato.Y = mato.Y + Leveys;
+            mato.Angle = Angle.FromDegrees(90);
         }
-        if (_suuntaAlas)
+        if (suuntaAlas)
         {
-            _mato.Y= _mato.Y - Leveys;
-            _mato.Angle = Angle.FromDegrees(270);
+            mato.Y= mato.Y - Leveys;
+            mato.Angle = Angle.FromDegrees(270);
         }
-        if (_suuntaOikea)
+        if (suuntaOikea)
         {
-            _mato.X= _mato.X + Leveys;
-            _mato.Angle = Angle.FromDegrees(0);
+            mato.X= mato.X + Leveys;
+            mato.Angle = Angle.FromDegrees(0);
            
         }
-        if (_suuntaVasen)
+        if (suuntaVasen)
         {
-            _mato.X= _mato.X - Leveys;
-            _mato.Angle = Angle.FromDegrees(180);
+            mato.X= mato.X - Leveys;
+            mato.Angle = Angle.FromDegrees(180);
             
         }
-        _matoLiikkunut = true;
+        matoLiikkunut = true;
     }
 
     
@@ -431,7 +443,7 @@ public class Matopeli : PhysicsGame
         {
             return;
         }
-        _matoLiikkunut = false;
+        matoLiikkunut = false;
         MatoKeho[0].X = MatoSijainti[MatoSijainti.Count - 1].X;
         MatoKeho[0].Y = MatoSijainti[MatoSijainti.Count - 1].Y;
         
@@ -441,10 +453,13 @@ public class Matopeli : PhysicsGame
             MatoKeho[i].Y = MatoSijainti[MatoSijainti.Count - 2*i].Y;
         }
 
-        _matoLiikkunut = true;
+        matoLiikkunut = true;
     }
-
-
+    
+    
+    /// <summary>
+    /// Pelin fysiikkaobjektit luodaan tämän classin mukaisesti
+    /// </summary>
     public class Objektit : PhysicsObject
     {
          public Objektit(double leveys, double korkeus)
-- 
GitLab