diff --git a/Matopeli/Matopeli/Matopeli.cs b/Matopeli/Matopeli/Matopeli.cs index 75ee4a7594a0a3ed46f122122fe005feb7849d1a..0762800f9a00c5423d4e5b7b6d90457273b19a26 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)