diff --git a/Matopeli/Matopeli/Matopeli.cs b/Matopeli/Matopeli/Matopeli.cs index 0762800f9a00c5423d4e5b7b6d90457273b19a26..3de0e5fd0e8467ac7b34d70add6aa3411bee2b6b 100644 --- a/Matopeli/Matopeli/Matopeli.cs +++ b/Matopeli/Matopeli/Matopeli.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Linq; using System.Security.Cryptography.X509Certificates; using Jypeli; using Jypeli.Assets; @@ -90,7 +91,7 @@ public class matopeli : PhysicsGame } private PhysicsObject LuoMato() { - Mato = new Objektit(leveys, korkeus, new Vector(0,0)); + Mato = new Objektit(leveys, korkeus); Mato.Image = matopaakuva; Add(Mato); Mato.Tag = "mato"; @@ -107,40 +108,37 @@ public class matopeli : PhysicsGame Vector paikka = Level.GetRandomPosition(); - for (int i = 0; i < 20; i++) + for (int i = 0; i < 100; i++) { - if (paikka.X-Mato.X<20) + if (paikka.X-Mato.X<5) { - if (paikka.Y-Mato.Y<20) - { - paikka = Level.GetRandomPosition(); - } + paikka = Level.GetRandomPosition(); } - if (paikka.X<70) + if (paikka.X-Mato.Y<5) { - if (paikka.X<-70) - { - paikka = Level.GetRandomPosition(); - } + paikka= Level.GetRandomPosition(); } - else + if (paikka.X<30) { - paikka = Level.GetRandomPosition(); + if (paikka.X < -30) + { + paikka = Level.GetRandomPosition(); + } } - if (paikka.Y<70) + if (paikka.Y<30) { - if (paikka.Y<-70) + if (paikka.Y<-30) { paikka = Level.GetRandomPosition(); } } else { - paikka = Level.GetRandomPosition(); + break; } } - Omena = new Objektit(korkeus, leveys, paikka); + Omena = new Objektit(korkeus, leveys); Omena.Shape = Shape.Circle; Omena.Position = paikka; Omena.Image = omenakuva; @@ -163,10 +161,11 @@ public class matopeli : PhysicsGame /// </summary> private PhysicsObject LuoMatoKeho(Vector Paikka) { - MatoMuu = new Objektit(leveys, korkeus, Paikka); + MatoMuu = new Objektit(leveys, korkeus); MatoMuu.Tag = "matokeho"; MatoMuu.Image = matokehokuva; MatoMuu.Position = Paikka; + MatoMuu.AngularDamping = 0.0; MatoKeho.Add(MatoMuu); Add(MatoMuu); return MatoMuu; @@ -176,6 +175,7 @@ public class matopeli : PhysicsGame { Omena.Destroy(); OmenaKentalla = false; + LuoMatoKeho(MatoSijainti[MatoSijainti.Count-MatoKeho.Count-1]); } private void VaihdaSuuntaYlos() @@ -255,7 +255,7 @@ public class matopeli : PhysicsGame private void LuoAikalaskuri() { Timer aikalaskuri = new Timer(); - aikalaskuri.Interval = 0.11; + aikalaskuri.Interval = 0.1; aikalaskuri.Timeout += PaivitaKentta; aikalaskuri.Start(); } @@ -269,19 +269,19 @@ public class matopeli : PhysicsGame //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(); } + LiikutaMatoa(); + if (MatoKeho.Count>0) + { + LiikutaKehoa(); + } } @@ -289,35 +289,52 @@ public class matopeli : PhysicsGame { if (SuuntaYlos==true) { - Mato.Y = Mato.Y + leveys; + Mato.Y = Mato.Y + leveys+5; Mato.Angle = Angle.FromDegrees(90); + } if (SuuntaAlas==true) { - Mato.Y= Mato.Y - leveys; + Mato.Y= Mato.Y - leveys+5; Mato.Angle = Angle.FromDegrees(270); + } if (SuuntaOikea==true) { - Mato.X= Mato.X + leveys; + Mato.X= Mato.X + leveys+5; Mato.Angle = Angle.FromDegrees(0); + } if (SuuntaVasen==true) { - Mato.X= Mato.X - leveys; + Mato.X= Mato.X - leveys+5; Mato.Angle = Angle.FromDegrees(180); + } - + + MatoSijainti.Add(Mato.Position); + } /// <summary> /// Tehdään silmukka, joka käy madon kaikki sijainnit ja liikuttaa madon muut osat niiden mukaan. /// </summary> + private void LiikutaKehoa() + { + MatoKeho[0].X = MatoSijainti[MatoSijainti.Count - 2].X; + MatoKeho[0].Y = MatoSijainti[MatoSijainti.Count - 2].Y; + for (int i = 1; i < MatoKeho.Count-1; i++) + { + MatoKeho[i].X = MatoKeho[i - 1].X; + MatoKeho[i].Y = MatoKeho[i - 1].Y; + } + } + public class Objektit : PhysicsObject { - public Objektit(double leveys, double korkeus, Vector paikka) + public Objektit(double leveys, double korkeus) : base(leveys, korkeus) { Mass = 10000;