diff --git a/Hiko/Hiko/Hiko.cs b/Hiko/Hiko/Hiko.cs
index 1ae6b300e582313644cc02d3a12119720e182fc4..0488e8a2491cfd4087d8e7cb835ab881f06899aa 100644
--- a/Hiko/Hiko/Hiko.cs
+++ b/Hiko/Hiko/Hiko.cs
@@ -4,6 +4,8 @@ using Jypeli.Controls;
 using Jypeli.Widgets;
 using System;
 using System.Collections.Generic;
+using System.Runtime.CompilerServices;
+using System.Security.Cryptography;
 using System.Threading;
 
 namespace Hiko
@@ -29,20 +31,24 @@ namespace Hiko
         GameObject tahtain;
         Image taustakuva = LoadImage("Testitaustakuva");
         IntMeter pistelaskuri;
+        Label aikanaytto;
+        int jaljellaOlevatVihut;
+        private ScoreList topLista = new ScoreList(10, false, 0);
+        bool temp = true;
 
         /// <summary>
         /// Luodaan peliin kenttä
         /// </summary>
         private static readonly String[] lines =
         {
+                  "    X X                 ",
+                  "   ______        X      ",
+                  "                ____    ",
                   "                        ",
                   "                        ",
-                  "                        ",
-                  "                        ",
-                  "                        ",
-                  "                        ",
-                  "                        ",
-                  "                   X    ",
+                  "    X                   ",
+                  "   ___                  ",
+                  "                  X     ",
                   "                 ___    ",
                   "           X            ",
                   "         _____          ",
@@ -52,38 +58,61 @@ namespace Hiko
                   "          X             ",
                   "       __________       ",
                   "                        ",
-                  "                        ",
-                  "                        ",
-                  "                        ",
-                  "                        ",
+                  "                 X      ",
+                  "                ____    ",
+                  "    X                   ",
+                  "  ______                ",
                   "                        ",
                   "                        ",
                   };
         private static readonly int tileWidth = 800 / lines[0].Length;
         private static readonly int tileHeight = 480 / lines.Length;
+        public static int LaskeVihollistenMaara(String[] vihutaulukko)
+        {
+            int vihujenLkm = 0;
+            for (int i = 0; i < vihutaulukko.Length; i++)
+            {
+                for (int j = 0; j < vihutaulukko[i].Length; j++)
+                {
+                    if (vihutaulukko[i][j] == 'X') vihujenLkm++;
+                }
+            }
+            return vihujenLkm;
+        }
+        
         public override void Begin()
         {
-            // Kirjoita ohjelmakoodisi tähän
-            string[] vaihtoehdot = { "Aloita peli", "Parhaat pisteet", "Lopeta" };
-            MultiSelectWindow alkuvalikko = new MultiSelectWindow("HIKO", vaihtoehdot);
-            
-            alkuvalikko.AddItemHandler(0, AloitaPeli);
-            //alkuvalikko.AddItemHandler(1, ParhaatPisteet);
-            alkuvalikko.AddItemHandler(2, Exit);
-            alkuvalikko.Color = Color.AshGray;
-            alkuvalikko.SetButtonColor(Color.BlueGray);
-            alkuvalikko.SetButtonTextColor(Color.Blue);
-            Add(alkuvalikko);
+            if (temp)
+            {
+                // Kirjoita ohjelmakoodisi tähän
+
+                string[] vaihtoehdot = { "Aloita peli", "Tehokkaimmat nukkujat", "Lopeta" };
+                MultiSelectWindow alkuvalikko = new MultiSelectWindow("HIKO", vaihtoehdot);
+
+                alkuvalikko.AddItemHandler(0, AloitaPeli);
+                alkuvalikko.AddItemHandler(1, ParhaatPisteet);
+                alkuvalikko.AddItemHandler(2, Exit);
+                alkuvalikko.Color = Color.AshGray;
+                alkuvalikko.SetButtonColor(Color.BlueGray);
+                alkuvalikko.SetButtonTextColor(Color.Blue);
+                Add(alkuvalikko);
+            }
+            temp = false;
         }
 
 
+
         /// <summary>
         /// Tämä aliohjelma aloittaa sen varsinaisen pelin
         /// </summary>
         public void AloitaPeli()
         {
 
-            Level.CreateBorders();
+            //Level.CreateBorders();
+            PhysicsObject alareuna = Level.CreateBottomBorder();
+            alareuna.Restitution = 1.0;
+            alareuna.IsVisible = true;
+
             Camera.ZoomToLevel();
 
             TileMap tiles = TileMap.FromStringArray(lines);
@@ -98,9 +127,27 @@ namespace Hiko
             tiles.SetTileMethod('X', LuoMaavihu);
             tiles.SetTileMethod('_', LuoTaso);
             tiles.Execute(tileWidth, tileHeight);
+            jaljellaOlevatVihut = LaskeVihollistenMaara(lines);
+            AddCollisionHandler(pelaaja, alareuna, OsuiReunaan);
+
+            
         }
 
 
+        void ParhaatPisteet()
+        {
+            temp = true;
+            topLista = DataStorage.TryLoad<ScoreList>(topLista, "pisteet.xml");
+            HighScoreWindow topIkkuna = new HighScoreWindow("Tehokkaimmat nukkujat", topLista);
+
+            Add(topIkkuna);
+
+            Mouse.Listen(MouseButton.Left, ButtonState.Down, Begin, null);
+
+                
+        }
+
+        
         /// <summary>
         /// Luo pelaajamodellin ja antaa sille ominaisuudet
         /// </summary>
@@ -117,10 +164,43 @@ namespace Hiko
             Add(pelaaja);
             return pelaaja;
         }
+
+
+        /// <summary>
+        /// Kun pelaaja törmää vihuun aliohjelma
+        /// </summary>
+        /// <param name="tormaaja"></param>
+        /// <param name="kohde"></param>
         void PelaajaTormasi(PhysicsObject tormaaja, Vihu kohde)
+        {
+            PelaajaKuolee();
+        }
+
+
+        /// <summary>
+        /// Kun pelaaja osuu kentän reunaan
+        /// </summary>
+        /// <param name="pelaaja"></param>
+        /// <param name="kohde"></param>
+        void OsuiReunaan(PhysicsObject pelaaja, PhysicsObject kohde)
+        {
+            PelaajaKuolee();
+        }
+
+
+        /// <summary>
+        /// Kun pelaaja kuolee x-asian tapahtumasta, niin tämä suoritetaan
+        /// </summary>
+        void PelaajaKuolee()
         {
             MessageDisplay.Add("You died!");
-            //Exit();
+            pelaaja.Destroy();
+
+            this.Pause();
+            topLista = DataStorage.TryLoad<ScoreList>(topLista, "pisteet.xml");
+
+            HighScoreWindow topIkkuna = new HighScoreWindow("Tehokkaimmat nukkujat", topLista);
+            Add(topIkkuna);
         }
 
         /// <summary>
@@ -245,7 +325,38 @@ namespace Hiko
         private void LuotiOsuuVihuun(PhysicsObject luoti, Vihu vihu)
         {
             MessageDisplay.Add("luoti osui vihuun");
+            pistelaskuri.Value++;
+
+            if (vihu.Elamalaskuri.Value == 1) jaljellaOlevatVihut--;
+
             vihu.Elamalaskuri.Value--;
+
+            if (jaljellaOlevatVihut == 0) VoitaPeli();
+        }
+
+
+        void VoitaPeli()
+        {
+            MessageDisplay.Add(Double.Parse(aikanaytto.Text).ToString());
+            this.Pause();
+
+
+            topLista = DataStorage.TryLoad<ScoreList>(topLista, "pisteet.xml");
+            double i = Double.Parse(aikanaytto.Text);
+
+            
+            double tehokkuus = pistelaskuri.Value / i;
+
+            HighScoreWindow topIkkuna = new HighScoreWindow("Tehokkaimmat nukkujat", "Hiivuit listalle ajalla", topLista, tehokkuus);
+
+            topIkkuna.Closed += TallennaPisteet;
+            Add(topIkkuna);
+        }
+
+
+        private void TallennaPisteet(Window sender)
+        {
+            DataStorage.Save<ScoreList>(topLista, "pisteet.xml");
         }
 
 
@@ -269,10 +380,11 @@ namespace Hiko
         /// </summary>
         void LuoAikalaskuri()
         {
+
             Jypeli.Timer aikalaskuri = new Jypeli.Timer();
             aikalaskuri.Start();
 
-            Label aikanaytto = new Label();
+            aikanaytto = new Label();
             aikanaytto.TextColor = Color.Orange;
             aikanaytto.DecimalPlaces = 1;
             aikanaytto.BindTo(aikalaskuri.SecondCounter);