diff --git a/Matopeli/Matopeli/Matopeli.cs b/Matopeli/Matopeli/Matopeli.cs
index 2b5e9c837fd9458715a5664d4a431234a4a00223..5874291e99201d614f14f82389ff01dcff623bac 100644
--- a/Matopeli/Matopeli/Matopeli.cs
+++ b/Matopeli/Matopeli/Matopeli.cs
@@ -1,5 +1,6 @@
 using System;
 using System.Collections.Generic;
+using System.Runtime.ExceptionServices;
 using System.Xml.Serialization;
 using Jypeli;
 using Jypeli.Assets;
@@ -15,141 +16,167 @@ namespace Matopeli;
 /// <summary>
 /// 
 /// </summary>
-public class Matopeli : PhysicsGame
-{
-
-    private static readonly string[] kentta ={
-        "---------------",
-        "-             -",
-        "-             -",
-        "-          o  -",
-        "-             -",
-        "-             -",
-        "-   km        -",
-        "-             -",
-        "-             -",
-        "-             -",
-        "-             -",
-        "-             -",
-        "-             -",
-        "---------------",
-    };
-    private int seinaleveys= 600 / kentta.Length;
-    private int seinakorkeus = 600 / kentta.Length;
-
-    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 kenttatausta = LoadImage("kenttatausta.png");
-    
-    
-    
-    public readonly IntMeter pisteet = new IntMeter(0);
-    private Label pisteNaytto;
-
-    public override void Begin()
+    public class Matopeli : PhysicsGame
     {
-        ClearAll();
-       // Background.Image = LoadImage("kenttatausta");
-        //LuoTausta();
-    
-        AloitaUusiPeli();
-    }
-    public void AloitaUusiPeli()
-    {
-        pisteet.Value = 0;
-        TileMap seinat = TileMap.FromStringArray(kentta);
-        seinat.SetTileMethod('-',LuoSeina);
-        seinat.SetTileMethod('m',LuoMatopaa);
-        seinat.SetTileMethod('o',LuoOmena);
-        //seinat.SetTileMethod('k',LuoMatokeho);
-
-        seinat.Execute(seinaleveys, seinakorkeus);
-        ArvotaanOmena(kentta);
-        Matoliikkeelle();
-    }
-    private void LuoSeina(Vector paikka, double leveys, double korkeus)
+
+        private static readonly string[] kentta ={
+            "---------------",
+            "-             -",
+            "-             -",
+            "-             -",
+            "-             -",
+            "-             -",
+            "-    m        -",
+            "-             -",
+            "-             -",
+            "-             -",
+            "-             -",
+            "-             -",
+            "-             -",
+            "---------------",
+        };
+        private int seinaleveys= 600 / kentta.Length;
+        private int seinakorkeus = 600 / kentta.Length;
+
+        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 kenttatausta = LoadImage("kenttatausta.png");
+
+        private LiikkuvaMato mato;
+        private LiikkuvaMato omena;
+        
+        public readonly IntMeter pisteet = new IntMeter(0);
+
+
+        public override void Begin()
         {
-            PhysicsObject seina = new PhysicsObject(leveys, korkeus);
-            seina.Position = paikka;
-            seina.Image = seinakuva;
-            Add(seina);
+            ClearAll();
+           // Background.Image = LoadImage("kenttatausta");
+            //LuoTausta();
+        
+            AloitaUusiPeli();
         }
-    
-    private void LuoOmena(Vector paikka, double leveys, double korkeus)
-    {
-        PhysicsObject omena = new PhysicsObject(leveys, korkeus);
-        omena.Position = paikka;
-        omena.Image = omenakuva;
-        omena.Tag = "omena";  
-        Add(omena);
-    }
-    
-    private void LuoMatopaa(Vector paikka, double leveys, double korkeus)
-    {
-        PhysicsObject matopaa = new PhysicsObject(leveys, korkeus);
-        matopaa.Position = paikka;
-        matopaa.Image = Matopeli.matopaakuva;
-        matopaa.Tag = matopaa;
-        AddCollisionHandler(matopaa, "omena", delegate(IPhysicsObject matopaa, IPhysicsObject omena) { MatosyoOmenan(omena); pisteet.Value += 1; });
-        Timer lahtoaika = new Timer();
-        lahtoaika.Interval = 1.5;
-        Add(matopaa);
-        lahtoaika.Timeout += KaannyOikea(matopaa);
-    }
-    
-    //private void LuoMatokeho(Vector paikka, double leveys, double korkeus)
-    //{
-      //  PhysicsObject matokeho = new PhysicsObject(leveys, korkeus);
-        //matokeho.Position = paikka;
-        //matokeho.Image = matokehokuva;
-        //Add(matokeho);  
-    //})
-    private void AsetaOhjaimet()
-    {
-        Keyboard.Listen(Key.Up, ButtonState.Down, KaannyYlos, "Turn upwards";
-        Keyboard.Listen(Key.Down, ButtonState.Down, KaannyAlas, "Turn downwards";
-        Keyboard.Listen(Key.Left, ButtonState.Down, KaannaVasen, "Turn left";
-        Keyboard.Listen(Key.Right, ButtonState.Down, KaannaOikea, "Turn right";
-    }
-    private void ArvotaanOmena(string[]t)
-    {
-        int x = t.GetLength(0);
-        int y = t.GetLength(1);
-        int ix = RandomGen.NextInt(1, x - 1);
-        int iy = RandomGen.NextInt(1, y - 1);
-        Vector paikka = (ix, iy);
-        LuoOmena(paikka, seinaleveys, seinakorkeus);
-    }
-    
 
+        public void AloitaUusiPeli()
+        {
+            // pisteet.Value = 0;
 
-    private void MatosyoOmenan(IPhysicsObject omena)
-    {
+            TileMap seinat = TileMap.FromStringArray(kentta);
+            seinat.SetTileMethod('-', LuoSeina);
+            seinat['m'] = LuoMato;
+            //seinat.SetTileMethod('k',LuoMatokeho);
+            seinat.Insert(seinaleveys, seinakorkeus);
+            Asetaohjaimet();
+
+            seinat.Execute(seinaleveys, seinakorkeus);
+            LuoOmena();
+        }
+
+
+
+        private void Asetaohjaimet()
+        {
+            Keyboard.Listen(Key.Up, ButtonState.Down, KaannyYlos, "Turn upwards");
+            Keyboard.Listen(Key.Down, ButtonState.Down, KaannyAlas, "Turn downwards");
+            Keyboard.Listen(Key.Left, ButtonState.Down, KaannyVasen, "Turn left");
+            Keyboard.Listen(Key.Right, ButtonState.Down, KaannyOikea, "Turn right");
+        }
+
+        private void KaannyYlos()
+        {
+            
+            mato.Velocity = new Vector(0, 150);
+            mato.Angle = Angle.FromDegrees(90);
+        }
+        private void KaannyAlas()
+        {
+            
+            mato.Velocity = new Vector(0, -150);
+            mato.Angle = Angle.FromDegrees(270);
+        }
+        private void KaannyVasen()
+        {
+            
+            mato.Velocity = new Vector(-150, 0);
+            mato.Angle = Angle.FromDegrees(180);
+        }
+        private void KaannyOikea()
+        {
+            
+            mato.Velocity = new Vector(150, 0);
+            mato.Angle = Angle.FromDegrees(0);
+        }
+
+        private void LuoSeina(Vector paikka, double leveys, double korkeus)
+            {
+                PhysicsObject seina = new PhysicsObject(leveys, korkeus);
+                seina.Position = paikka;
+                seina.Image = seinakuva;
+                seina.Tag = "seina";
+                seina.MakeStatic();
+                Add(seina);
+            }
         
-        pisteet+;
-        omena.Destroy();
-    }
 
-    private void KaannyVasen(IPhysicsObject matopaa)
-    {
         
-    }
-    
-    private void KaannyOikea(IPhysicsObject matopaa)
-    {
-        matopaa.Push(new Vector(1000, 0));
-        pelaaja1.MaxVelocity = 200;
-    }
-    
-    private void KaannyAlas(IPhysicsObject matopaa)
-    {
+        private PhysicsObject LuoMato()
+        {
+            mato = new LiikkuvaMato(seinaleveys, seinakorkeus);
+            mato.Image = Matopeli.matopaakuva;
+            mato.Tag = "mato";
+            mato.Velocity = new Vector(150, 0);
+            AddCollisionHandler(mato, "seina", TormaaSeinaan);
+            AddCollisionHandler(mato, "omena", SyoOmenan);
+            return mato;
+
+        }
+
+        private PhysicsObject LuoOmena()
+        {
+            omena = new LiikkuvaMato(seinaleveys, seinakorkeus);
+            omena.Image = omenakuva;
+            omena.Tag = "omena";
+            return omena;
+        }
         
+        
+        private void TormaaSeinaan(IPhysicsObject mato,IPhysicsObject seina)
+        {
+            mato.Velocity = new Vector(0,0);
+            seina.Velocity = new Vector(0, 0);
+            
+        }
+
+        private void SyoOmenan(IPhysicsObject mato, IPhysicsObject omena)
+        {
+            omena.Destroy();
+        }
+
     }
     
-    private void KaannyYlos(IPhysicsObject matopaa)
+
+
+    public class LiikkuvaMato : PhysicsObject
     {
+        public LiikkuvaMato(double leveys, double korkeus)
+            : base(leveys, korkeus)
+        {
+            Mass = 10000;
+            IgnoresGravity = true;
+            IsUpdated = true;
+        }
+    }       
         
-    }
-}
+
+
+
+
+
+        
+
+
+
+
+    
\ No newline at end of file