diff --git a/Sammakkopeli/Sammakkopeli/Sammakkopeli.cs b/Sammakkopeli/Sammakkopeli/Sammakkopeli.cs
index 2e6b66194af6ad03413c807e9470d23e7ed6e10c..5b31c8d47f6769f03a1ef5ee04e4603f19cb88dd 100644
--- a/Sammakkopeli/Sammakkopeli/Sammakkopeli.cs
+++ b/Sammakkopeli/Sammakkopeli/Sammakkopeli.cs
@@ -5,6 +5,11 @@ using Jypeli.Widgets;
 using System;
 using System.Collections.Generic;
 
+/// @author snelvjxz ja kmsaksyt
+/// @version 5.12.2022
+/// <summary>
+///  Sammakkopeli
+/// </summary>
 namespace Sammakkopeli
 {
     public class Sammakkopeli : PhysicsGame
@@ -19,11 +24,13 @@ namespace Sammakkopeli
         Timer hyppyViive;
         Timer kieliAjastin;
         Timer liikutaKielta;
+        Timer aika;
 
         IntMeter karpasLaskuri;
 
         int sammakkoTippuuKertoja = -10;
         int edellinenSuunta = 1;
+        int nykyisenKentanNumero;
 
         bool onkoHypannut = false;
         bool ajastinKaynnissa = false;
@@ -42,32 +49,42 @@ namespace Sammakkopeli
         Image kielikuva = LoadImage("kieli.png");
         Image menu = LoadImage("SammakkoMenu");
 
+        List<double> ajat1 = new List<double>();
+        List<double> ajat2 = new List<double>();
+        List<double> ajat3 = new List<double>();
+
         Image[] kuvatSammakkoHyppaa = LoadImages("a2", "a3", "a4", "a5", "a6", "a7", "a8", "a9", 
             "a10", "a11", "a12", "a13", "a14", "a15", "a16");
 
-
-
+        /// <summary>
+        /// Käynnistää pelin.
+        /// </summary>
         public override void Begin()
         {
             TeeAlkuValikko();
             Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
         }
 
-
+        /// <summary>
+        /// Tekee peliin alkuvalikon.
+        /// </summary>
         void TeeAlkuValikko()
         {
             ClearAll();
             MultiSelectWindow alkuValikko = new MultiSelectWindow("Sammakkopeli", 
-                "Valitse taso", "Ohjaimet", "Lopeta peli");
+                "Valitse taso", "Tasojen ajat", "Lopeta peli");
 
             Level.Background.Image = menu;
             alkuValikko.AddItemHandler(0, TeeTasovalikko);
-            alkuValikko.AddItemHandler(1, ShowControlHelp);
+            alkuValikko.AddItemHandler(1, TeeAikaTaulukko);
             alkuValikko.AddItemHandler(2, Exit);
             alkuValikko.DefaultCancel = -1;
             Add(alkuValikko);
         }
 
+        /// <summary>
+        /// Tekee peliin taukovalikon.
+        /// </summary>
         void TeeValikko()
         {
             Pause();
@@ -77,6 +94,10 @@ namespace Sammakkopeli
             Add(valikko);
         }
 
+        /// <summary>
+        /// Käsittelee taukovalikon tapahtuman.
+        /// </summary>
+        /// <param name="valinta">Mitä valikon napeista painettiin.</param>
         void PainettiinValikonNappia(int valinta)
         {
             switch (valinta)
@@ -97,7 +118,65 @@ namespace Sammakkopeli
             }
         }
 
+        /// <summary>
+        /// Tekee parhaiden aikojen taulukon.
+        /// </summary>
+        void TeeAikaTaulukko()
+        {
+            ClearAll();
+
+            ajat1.Sort();
+            ajat2.Sort();
+            ajat3.Sort();
+
+            Widget ajatTaso1 = new Widget(new VerticalLayout());
+            ajatTaso1.X = -300;
+            Label parhaatAjat1 = new Label("Tason 1 Parhaat ajat:");
+            ajatTaso1.Add(parhaatAjat1);
+            int i = 0;
+            foreach (double aika in ajat1)
+            {
+                if (i > 2) break;
+                Label aikaRuutu = new Label(aika.ToString("N2"));
+                ajatTaso1.Add(aikaRuutu);
+                i++;
+            }
+            Add(ajatTaso1);
+
+            Widget ajatTaso2 = new Widget(new VerticalLayout());
+            ajatTaso2.X = 9;
+            Label parhaatAjat2 = new Label("Tason 2 Parhaat ajat:");
+            ajatTaso2.Add(parhaatAjat2);
+            int j = 0;
+            foreach (double aika in ajat2)
+            {
+                if (j > 9) break;
+                Label aikaRuutu = new Label(aika.ToString("N2"));
+                ajatTaso2.Add(aikaRuutu);
+                j++;
+            }
+            Add(ajatTaso2);
+            
+            Widget ajatTaso3 = new Widget(new VerticalLayout());
+            ajatTaso3.X = +300;
+            Label parhaatAjat3 = new Label("Tason 3 Parhaat ajat:");
+            ajatTaso3.Add(parhaatAjat3);
+            int k = 0;
+            foreach (double aika in ajat3)            
+            {
+                if (k > 9) break;
+                Label aikaRuutu = new Label(aika.ToString("N2"));
+                ajatTaso3.Add(aikaRuutu);
+                k++;
+            }
+            Add(ajatTaso3);
+            
+            Keyboard.Listen(Key.Back, ButtonState.Pressed, TeeAlkuValikko, "Takaisin");
+        }
 
+        /// <summary>
+        /// Tekee tasovalikon.
+        /// </summary>
         void TeeTasovalikko()
         {
             ClearAll();
@@ -107,18 +186,22 @@ namespace Sammakkopeli
             Add(tasovalikko);
         }
 
+        /// <summary>
+        /// Käsittelee tasovalikon valinnan.
+        /// </summary>
+        /// <param name="valinta">Mikä taso valittiin.</param>
         void PainettiinTasovalikonNappia(int valinta)
         {
             switch (valinta)
             {
                 case 0:
-                    AlustaKentta("Kentta1", 5);
+                    AlustaKentta(1, "Kentta1", 5);
                     break;
                 case 1:
-                    AlustaKentta("Kentta2", 4);
+                    AlustaKentta(2, "Kentta2", 4);
                     break;
                 case 2:
-                    AlustaKentta("Kentta3", 4);
+                    AlustaKentta(3, "Kentta3", 4);
                     break;
                 case 3:
                     TeeAlkuValikko();
@@ -127,7 +210,7 @@ namespace Sammakkopeli
         }
 
         /// <summary>
-        /// Asetetaan ohjaimet peliä varten
+        /// Asetetaan ohjaimet peliä varten.
         /// </summary>
         void AsetaOhjaimet()
         {
@@ -142,11 +225,11 @@ namespace Sammakkopeli
             Keyboard.Listen(Key.Up, ButtonState.Pressed, SammakkoHyppaa, "Hyppää", 8);
             Keyboard.Listen(Key.Space, ButtonState.Pressed, KaytaKielta, "Käytä kieltä");
 
-            Keyboard.Listen(Key.P, ButtonState.Pressed, TeeValikko, "Valikko");
+            Keyboard.Listen(Key.Escape, ButtonState.Pressed, TeeValikko, "Valikko");
         }
 
         /// <summary>
-        /// Määritetään pelihahmon nopeus
+        /// Laitetaan pelihahmo liikkumaan haluttuun suuntaan.
         /// </summary>
         /// <param name="suunta"></param>
         void AsetaNopeus(int suunta)
@@ -164,7 +247,10 @@ namespace Sammakkopeli
             }
         }
 
-
+        /// <summary>
+        /// Kääntää pelihahmon spriten menosuuntaan.
+        /// </summary>
+        /// <param name="suunta">suunta, johon pelihahmoa liikutetaan</param>
         void MuutaSammakonKuvaa(int suunta)
         {
             if (suunta != edellinenSuunta)
@@ -184,10 +270,11 @@ namespace Sammakkopeli
         }
 
         /// <summary>
-        /// Luo peliin kentän ja alustaa pelin
+        /// Luo kentän ja alustaa pelin
         /// </summary>
-        void AlustaKentta(string kenttakartta, int karpastenMaara)
+        void AlustaKentta(int kentanNumero, string kenttakartta, int karpastenMaara)
         {
+            nykyisenKentanNumero = kentanNumero;
             GameObject taustakuva = new GameObject(2026, 1447);
             taustakuva.Image = LoadImage("Tausta");
             Add(taustakuva, -3);
@@ -217,6 +304,9 @@ namespace Sammakkopeli
             AsetaOhjaimet();       
         }
 
+        /// <summary>
+        /// Nollaa pelin muuttujat.
+        /// </summary>
         void AsetaMuuttujat()
         {
             sammakkoTippuuKertoja = -10;
@@ -234,7 +324,7 @@ namespace Sammakkopeli
 
 
         /// <summary>
-        /// Luo ajastimet pelihahmon liikuttamista varten
+        /// Luo ajastimet.
         /// </summary>
         void LuoAjastimet()
         {
@@ -260,7 +350,10 @@ namespace Sammakkopeli
             kieliAjastin.Timeout += PoistaKieli;
         }
 
-
+        /// <summary>
+        /// Luo laskurit.
+        /// </summary>
+        /// <param name="karpastenMaara">Kuinka monta kärpästä tasossa on.</param>
         void LuoLaskurit(int karpastenMaara)
         {
             karpasLaskuri = new IntMeter(0, 0, karpastenMaara);
@@ -272,9 +365,15 @@ namespace Sammakkopeli
             karpasNaytto.Color = Color.Black;
             karpasNaytto.BindTo(karpasLaskuri);
             Add(karpasNaytto);
-            karpasLaskuri.UpperLimit += TasoLapaistiin;
+            karpasLaskuri.UpperLimit += delegate { TasoLapaistiin(nykyisenKentanNumero); };
+
+            Label karpasiaTasossa = new Label(" / " + karpastenMaara.ToString());
+            karpasiaTasossa.Position = new Vector(karpasNaytto.Right + karpasiaTasossa.Width/2, karpasNaytto.Y);
+            karpasiaTasossa.TextColor = Color.White;
+            karpasiaTasossa.Color = Color.Black;
+            Add(karpasiaTasossa);
 
-            Timer aika = new Timer();
+            aika = new Timer();
             aika.Start();
             Label aikaNaytto = new Label();
             aikaNaytto.Title = "Aika: ";
@@ -282,22 +381,40 @@ namespace Sammakkopeli
             aikaNaytto.Y = Screen.Top - 150.0;
             aikaNaytto.TextColor = Color.White;
             aikaNaytto.Color = Color.Black;
-            aikaNaytto.DecimalPlaces = 0;
+            aikaNaytto.DecimalPlaces = 2;
             aikaNaytto.BindTo(aika.SecondCounter);
             Add(aikaNaytto);
         }
 
-
-        void TasoLapaistiin()
+        /// <summary>
+        /// Tekee ikkunan kun taso läpäistään.
+        /// </summary>
+        /// <param name="nro">läpäistyn tason numero</param>
+        void TasoLapaistiin(int nro)
         {
             Pause();
-            MultiSelectWindow tasoLapaistu = new MultiSelectWindow("Läpäisit tason!",
-                "Takaisin tason valintaan");
+            double sekunnit = aika.CurrentTime;
+            MultiSelectWindow tasoLapaistu = new MultiSelectWindow("Läpäisit tason ajassa: " +
+            sekunnit.ToString("N2") + "!", "Takaisin tason valintaan");
             tasoLapaistu.AddItemHandler(0, TeeTasovalikko);
             Add(tasoLapaistu);
+            switch (nro)
+            {
+                case 1:
+                    ajat1.Add(sekunnit);
+                    break;
+                case 2:
+                    ajat2.Add(sekunnit);
+                    break;
+                case 3:
+                    ajat3.Add(sekunnit);
+                    break;
+            }
         }
 
-
+        /// <summary>
+        /// Tekee ikkunan kun taso hävitään.
+        /// </summary>
         void TasoHavittiin()
         {
             Pause();
@@ -307,6 +424,9 @@ namespace Sammakkopeli
             Add(tasoHavittu);
         }
 
+        /// <summary>
+        /// Lisää viiveen pelihahmon hyppäämiseen.
+        /// </summary>
         void HyppyViive()
         {
             hyppyViive.Stop();
@@ -338,7 +458,7 @@ namespace Sammakkopeli
         }
 
         /// <summary>
-        /// Liikuttaa pelihahmoa vasemmalle ja oikealle
+        /// Liikuttaa pelihahmoa vasemmalle ja oikealle.
         /// </summary>
         void LiikutaPelihahmoa()
         {
@@ -346,6 +466,9 @@ namespace Sammakkopeli
             sammakko.Velocity = suunta;
         }
 
+        /// <summary>
+        /// Asettaa kielen liikkumaan pelihahmon mukana.
+        /// </summary>
         void LiikutaKielta()
         {
             kieli.Position = sammakko.Position
@@ -364,8 +487,8 @@ namespace Sammakkopeli
                 sammakkoTippuuKertoja = korkeus;
                 hyppyLaskuri.Start();
                 sammakko.Animation = new Animation(kuvatSammakkoHyppaa);
-                sammakko.Animation.FPS = 3;
-                sammakko.Animation.Start();
+                sammakko.Animation.FPS = 30;
+                sammakko.Animation.Start(1);
             }
         }
 
@@ -381,19 +504,13 @@ namespace Sammakkopeli
                 nopeusY = -1000.0;
                 return;
             }
-            if (sammakkoTippuuKertoja < 0)
-            {
-
-            }
-
             nopeusY = sammakkoTippuuKertoja * 100;
             sammakkoTippuuKertoja -= 1;
-            //sammakko.Animation = new Animation(animaatioSammakkoTippuu);
-            sammakko.Animation.FPS = 3;
-            sammakko.Animation.Stop();
         }
 
-
+        /// <summary>
+        /// Piirtää pelihahmon kielen.
+        /// </summary>
         void KaytaKielta()
         {
             if (kaytetaankoKielta == false)
@@ -405,7 +522,7 @@ namespace Sammakkopeli
                 kieli.IgnoresCollisionResponse = true;
                 kieli.Velocity = sammakko.Velocity;
                 kieli.Position = sammakko.Position + new Vector((sammakko.Width / 2 + kieli.Width / 2) * edellinenSuunta, 0);
-                kieli.LifetimeLeft = TimeSpan.FromSeconds(0.25);
+                kieli.LifetimeLeft = TimeSpan.FromSeconds(0.35);
                 kaytetaankoKielta = true;
                 kieliAjastin.Start(1);
                 liikutaKielta.Start();
@@ -414,7 +531,9 @@ namespace Sammakkopeli
             }
         }
 
-
+        /// <summary>
+        /// Pysäyttää ja nollaa pelihahmon kieleen liittyvät ajastimet.
+        /// </summary>
         void PoistaKieli()
         {
             kaytetaankoKielta = false;
@@ -424,7 +543,11 @@ namespace Sammakkopeli
             liikutaKielta.Reset();
         }
 
-
+        /// <summary>
+        /// Käsittelee pelihahmon törmäykset.
+        /// </summary>
+        /// <param name="tormaaja">Objekti joka törmää.</param>
+        /// <param name="kohde">Törmäyksen kohde.</param>
         void KasitteleSammakonTormays(PhysicsObject tormaaja, PhysicsObject kohde)
         {
             if (tormaaja.Bottom >= kohde.Top)
@@ -439,12 +562,22 @@ namespace Sammakkopeli
             }
         }
 
+        /// <summary>
+        /// Käsittelee kielen törmäykset.
+        /// </summary>
+        /// <param name="tormaaja">Objekti joka törmää.</param>
+        /// <param name="kohde">Törmäyksen kohde.</param>
         void KasitteleKielenTormays(PhysicsObject tormaaja, PhysicsObject kohde)
         {
             kohde.Destroy();
             karpasLaskuri.Value += 1;
         }
 
+        /// <summary>
+        /// Käsittelee hillerin törmäykset.
+        /// </summary>
+        /// <param name="tormaaja">Objekti joka törmää.</param>
+        /// <param name="kohde">Törmäyksen kohde</param>
         void KasitteleHillerinTormays(PhysicsObject tormaaja, PhysicsObject kohde)
         {
             if (kohde == sammakko)
@@ -474,6 +607,12 @@ namespace Sammakkopeli
             Add(taso);
         }
 
+        /// <summary>
+        /// Tekee mutaruohopalikan.
+        /// </summary>
+        /// <param name="paikka">palikan paikka</param>
+        /// <param name="leveys">palikan leveys</param>
+        /// <param name="korkeus">palikan korkeus</param>
         void LuoMutaRuoho(Vector paikka, double leveys, double korkeus)
         {
             PhysicsObject mutaruoho = PhysicsObject.CreateStaticObject(leveys, korkeus);
@@ -515,9 +654,9 @@ namespace Sammakkopeli
         /// <summary>
         /// Luo peliin kerättävän kärpäsen
         /// </summary>
-        /// <param name="paikka"></param>
-        /// <param name="leveys"></param>
-        /// <param name="korkeus"></param>
+        /// <param name="paikka">kärpäsen paikka</param>
+        /// <param name="leveys">kärpäsen leveys</param>
+        /// <param name="korkeus">kärpäsen korkeus</param>
         void LuoKarpanen(Vector paikka, double leveys, double korkeus)
         {
             PhysicsObject karpanen = new PhysicsObject(leveys, 45);
@@ -530,7 +669,7 @@ namespace Sammakkopeli
 
             RandomMoverBrain karpanenAivot = new RandomMoverBrain();
             karpanenAivot.WanderRadius = 30;
-            karpanenAivot.Speed = 80;
+            karpanenAivot.Speed = 100;
             karpanenAivot.WanderPosition = paikka;            
             karpanen.Brain = karpanenAivot;
         }