diff --git a/Financial_Freedom/Financial_Freedom/Financial_Freedom.cs b/Financial_Freedom/Financial_Freedom/Financial_Freedom.cs
index 27e887bdfb45fdfff0a12fcdd5811d5e75f0379d..fcf84929c85431aea45a42c39da9029112cd8d82 100644
--- a/Financial_Freedom/Financial_Freedom/Financial_Freedom.cs
+++ b/Financial_Freedom/Financial_Freedom/Financial_Freedom.cs
@@ -3,6 +3,7 @@ using System.Collections.Generic;
 using System.ComponentModel;
 using System.Transactions;
 using System.Drawing;
+using System.IO;
 using System.Linq;
 using System.Security.Cryptography;
 using System.Threading.Tasks;
@@ -23,19 +24,26 @@ using Window = Jypeli.Window;
 /// @author Miklas, Joonatan, Santeri
 /// @version 0.69.420
 /// <summary>
+
 /// Pelissä koitetaan pelastaa pelaajan poika joka on joutunut venäläisen mafian kidnappaamaksi.
 /// He vaativat lunnasrahoja joita sinulla ei ole ja päätät suunnata kasinolle tienaamaan
 /// Kasinolla voit voittaa 10000000% rahastasi takaisin mutta hävitä vain 100% joten sehän on kannattavaa
 
 /// Pelaa erilaisia minipelejä kasvattaen rahamäärääsi kohti miljardia 1 000 000 000€ 
-/// Kontrollit on peleissä näytetty merkinnöillä (*), peli vaatii suurimmilta osin näppäimistöä mutta joskus joudut käyttämään myös hiirtäsi.
+/// Kontrollit on peleissä näytetty merkinnöillä (*nappi*), peli vaatii suurimmilta osin näppäimistöä mutta joskus joudut käyttämään myös hiirtäsi.
 
 ///Credits:
-/// Miku: Plinko, Slots, yleinen ulkoasu
+/// Miklas: Plinko, Slots, yleinen ulkoasu
 /// Joonatan: Blackjack, Coinflip, yleinen ulkoasu
-/// Santeri: Ruletti(ei tehty), pelikorttien ja hedelmien kuvat
+/// Santeri: Ruletti(ei tehty), kuvat(ei kaikki), aloitus ja lopetus kuvat (ei tehty)
 /// </summary>
 
+//Seuraavaksi:
+//minimi/maksimipanokset, slots ei minimiä mutta joku maksimi koska muuten op, plinko pieni minimi ei maksimia (ehkä)
+//bj suurempi minimi ei max, cf sama??
+
+//ruletti?????
+
 namespace Financial_Freedom{
 
 
@@ -105,7 +113,14 @@ public class  Financial_Freedom : PhysicsGame
     private bool tavoiteSaavutettu = false;
     private bool peliOhi = false;
     private double tavoiteRaha = 1000000000;
+    private double highScore = 0;
+    private double finalscore;
     private bool AloitusRaha = false;
+    private Timer aikaLaskuri;
+    private double lopetusAika;
+    private EasyHighScore topLista = new ("toplistsave.txt", 10);
+
+    private bool voitto;
     
     private int pelaajanSumma;
     private int jakajanSumma;
@@ -156,12 +171,24 @@ public class  Financial_Freedom : PhysicsGame
         pistenaytto = new Label();
         pistelaskuri.Value += 1000;
         AloitusRaha = true;
+        
+        topLista.EnterText = "Onnittelut, olet päässyt kymmenen parhaimman uhkapelaajan joukkoon! Syötä nimesi niin jäät historian kirjoihin.";
+        topLista.Text = "Parhaat uhkapelaajat";
+        topLista.HighScoreWindow.Size = new Vector(300,500);
+        topLista.HighScoreWindow.Color = Color.Mint;
+        
+        LuoAikaLaskuri();
         LuoPistelaskuri();
         PelinValinta();
         
-        
     }
-    
+
+    private void LuoAikaLaskuri()
+    {
+        aikaLaskuri = new Timer();
+        aikaLaskuri.Start();
+    }
+
     void LuoPistelaskuri() //luo pistelaskurin rahalle
     {
         pistenaytto.X = 0 ;
@@ -192,17 +219,22 @@ public class  Financial_Freedom : PhysicsGame
 
         // Tarkista, onko tavoite saavutettu
         TarkistaRahaTavoite();
+        TarkistaScore();
     }
     
     private void TarkistaRahaTavoite()
     {
         if (pistelaskuri == null) return;
         //Console.WriteLine("päästiin nullin läpi mennään if lauseeseen pelejä kesken: "+peliKesken);
+        
+        
+        
         // Tarkista vain, jos tavoitetta ei ole jo saavutettu
         if (pistelaskuri.Value >= tavoiteRaha && !tavoiteSaavutettu)
         {
             tavoiteSaavutettu = true;
             MessageDisplay.Add("Tavoite saavutettu!");
+            LaskeScore();
             Voitto();
         }
 
@@ -211,10 +243,43 @@ public class  Financial_Freedom : PhysicsGame
             //Console.WriteLine("päästiin loppuun rahat nollassa ja avataan defeat");
             peliOhi = true;
             MessageDisplay.Add("Luuseri");
+            ClearAll();
+            LaskeScore();
             Defeat();
         }
         //Console.WriteLine("päästiin defeatin ohi mitään ei tapahtunut");
     }
+
+    private void TarkistaScore()
+    {
+        if (peliKesken == 0)
+        {
+            if (pistelaskuri == null) return;
+            else if (pistelaskuri.Value > highScore)
+            {
+                highScore = pistelaskuri.Value;
+                Console.WriteLine("uusi highscore: "+highScore);
+            }
+            else
+            {
+                return;
+            }
+        }
+        else
+        {
+            return;
+        }
+    }
+
+    private void LaskeScore()
+    {
+        lopetusAika = aikaLaskuri.SecondCounter.Value;
+        Console.WriteLine("lopetusaika on "+aikaLaskuri.SecondCounter.Value);
+        finalscore = Math.Round((highScore-1000)/lopetusAika, 2);
+        Console.WriteLine(highScore+"-1000 on "+ (highScore-1000)+" ja se jaetaan "+lopetusAika+" tulee "+((highScore-1000)/lopetusAika));
+        Console.WriteLine("finalscore: "+finalscore);
+    }
+    
     
     //kuvien lataus
     Image taustakuvaPV = LoadImage("kasinoLobby.jpg");
@@ -570,7 +635,7 @@ public class  Financial_Freedom : PhysicsGame
         
         pelaajanKortit.Add(uudetKortit[0]);
         pelaajanSumma = 0;
-        foreach (var card in pelaajanKortit)
+        foreach (var card in pelaajanKortit) // laskee summat ja ässät
         {
             Console.WriteLine("pelaajankortti "+card);
             if (card.BjCardValue == 11)
@@ -586,10 +651,11 @@ public class  Financial_Freedom : PhysicsGame
         foreach (var card in jakajanKortit)
         {
             Console.WriteLine("jakajan kortti: "+card);
-            if (card.BjCardValue == 11) aCountD++; // Lasketaan ässät
+            if (card.BjCardValue == 11) aCountD++;
             jakajanSumma += card.BjCardValue;
         }
         
+        //laskee ässät pois
         while (pelaajanSumma > 21 && aCountP > 0)
         {
             pelaajanSumma -= 10;
@@ -602,6 +668,8 @@ public class  Financial_Freedom : PhysicsGame
             aCountD--;
         }
         
+        
+        //kattoo insta 21
         if (pelaajanSumma != 21)
         {
             pelaajanSummalab = new Label("Sinulla on "+ pelaajanSumma +" ja jakajalla on "+jakajanKortit[0].BjCardValue)
@@ -658,8 +726,9 @@ public class  Financial_Freedom : PhysicsGame
         }
         
     }
-
-    public async Task DoubleDown(Label bjV, Label sum)
+    
+    // voit ottaa vielä viimeisen kortin ja tuplata panoksen, sen jälkeen et voi tehdä enää mitääm
+    public async Task DoubleDown(Label bjV, Label sum) 
     {
         Remove(bjV);
         Remove(sum);
@@ -762,7 +831,7 @@ public class  Financial_Freedom : PhysicsGame
         else DealerFinish(pelaajanSummalab);
     }
     
-    public async Task PysyTassa(Label bjV, Label sum)
+    public async Task PysyTassa(Label bjV, Label sum) // olet tyytyväinen kortteihin
     {
         Remove(bjV);
         Remove(sum);
@@ -821,7 +890,7 @@ public class  Financial_Freedom : PhysicsGame
     }
 
 
-    public async Task DealerFinish(Label sum)
+    public async Task DealerFinish(Label sum) // lopettaa pelin jakajan vuoroon
     {
         Remove(sum);
         Card kortti;
@@ -1057,7 +1126,7 @@ public class  Financial_Freedom : PhysicsGame
     }
     
     // Luo korttipakka
-    public List<Card> LuoPakka()
+    public List<Card> LuoPakka() // luo korttipakan no shit sherlock
     {
         //var pakka = new List<Card>();
         pakka.Clear();
@@ -1073,7 +1142,7 @@ public class  Financial_Freedom : PhysicsGame
         
     
     //sekoittaa pakan
-    public static void SekoitaPakka(List<Card> pakka)
+    public static void SekoitaPakka(List<Card> pakka) // oisko vaikka että sekoittaa pakan
     {
         Random rand = new Random();
         int n = pakka.Count;
@@ -1086,7 +1155,7 @@ public class  Financial_Freedom : PhysicsGame
             pakka[k] = temp;
         }
     }
-    public List<Card> JaaKortit(List<Card> pakka, int korttienMaara)
+    public List<Card> JaaKortit(List<Card> pakka, int korttienMaara) // kenties jakaa kortit
     {
         var jaetutKortit = new List<Card>();
         Random random = new Random();
@@ -1105,14 +1174,14 @@ public class  Financial_Freedom : PhysicsGame
         return jaetutKortit;
     }
     
-    public async Task VaihdaPanos()
+    public async Task VaihdaPanos() // hmmmmmm voisiko ehkä vaihtaa panosta
     { //esim plinkossa voi vaihtaa panosta lennosta
         InputWindow kysymysIkkuna = new InputWindow("Aseta Panos" );
         kysymysIkkuna.TextEntered += ProcessInput;
         Add( kysymysIkkuna );
     }
     
-    void ProcessInput( InputWindow ikkuna )
+    void ProcessInput( InputWindow ikkuna ) // prosessoi inputin kun panos on asetettu
     {
         string vastaus = ikkuna.InputBox.Text;
         if (double.TryParse(vastaus, out panos) && panos > 0 && panos <= pistelaskuri.Value)
@@ -1236,8 +1305,8 @@ public class  Financial_Freedom : PhysicsGame
             };
             
             PisteAntaja(0, 200,  (0.25*tsplinko * yTs), ptpallo);
-            PisteAntaja(177, 150, (0.9*tsplinko * yTs), ptpallo);
-            PisteAntaja(-177, 150, (0.9*tsplinko * yTs), ptpallo);
+            PisteAntaja(177, 150, (0.75*tsplinko * yTs), ptpallo);
+            PisteAntaja(-177, 150, (0.75*tsplinko * yTs), ptpallo);
             PisteAntaja(316, 125, (2.5*tsplinko * yTs),ptpallo);
             PisteAntaja(-316, 125, (2.5*tsplinko * yTs), ptpallo);
             PisteAntaja(430, 100, (5*tsplinko * yTs), ptpallo);
@@ -1885,58 +1954,58 @@ public class  Financial_Freedom : PhysicsGame
     }
     async Task Voitto()
     {
+        Console.WriteLine(finalscore);
+        voitto = true;
         ClearAll();
-        await Task.Delay(100);
-        Label uusi = new Label("Voitit Pelin!!!")
-        {
-            Color = Color.White,
-            Position = new Vector(0, 0), // Asetetaan sijainti
-            TextScale = new Vector(3, 3)
-        };
-        Add(uusi);
-        Label uusi3 = new Label("Yritä uudelleen (N) tai luovuta (Esc)")
-        {
-            Color = Color.Transparent,
-            TextColor = Color.Violet,
-            Position = new Vector(0, Level.Bottom+50), // Asetetaan sijainti
-            TextScale = new Vector(3, 3)
-        };
-        Add(uusi3);
-        Keyboard.Listen(Key.Escape, ButtonState.Pressed, () =>
-        {
-            ClearAll();
-            Exit();
-        }, "ulos");
-        Keyboard.Listen(Key.N, ButtonState.Pressed, () =>
-        {
-            ClearAll();
-            peliKesken = 0;
-            peliOhi = false;
-            pistelaskuri = null;
-            Begin();
-        }, "uus kiesi");
+        ScoreBoard();
     }
     async Task Defeat()
     {
-        await Task.Delay(2000);
+        Console.WriteLine(finalscore);
+        ClearAll();
+        ScoreBoard();  // Odotetaan, kunnes panos on asetettu
+    }
+
+    private void ScoreBoard()
+    {
+        topLista.EnterAndShow(finalscore);
+        topLista.HighScoreWindow.Closed += loppuTekstit;
+    }
+
+    private void loppuTekstit(Window sender)
+    {
         ClearAll();
-        Console.WriteLine("hävisit pelin");
-        Label uusi = new Label("Hävisit pelin")
+        if (voitto)
         {
-            Color = Color.White,
-            Position = new Vector(0, 25), // Asetetaan sijainti
-            TextScale = new Vector(3, 3)
-        };
-        Add(uusi);
-        Label uusi2 = new Label("Poikasi teloitettiin.")
+            Label uusi = new Label("Voitit Pelin!!!")
+            {
+                Color = Color.White,
+                Position = new Vector(0, 0), // Asetetaan sijainti
+                TextScale = new Vector(3, 3)
+            };
+            Add(uusi);
+        }
+        else
         {
-            Color = Color.Transparent,
-            TextColor = Color.Red,
-            Position = new Vector(0, -50), // Asetetaan sijainti
-            TextScale = new Vector(3, 3)
-        };
-        Add(uusi2);
-        Label uusi3 = new Label("Yritä uudelleen (N) tai luovuta (Esc)")
+            Console.WriteLine("hävisit pelin");
+            Label uusi = new Label("Hävisit pelin")
+            {
+                Color = Color.White,
+                Position = new Vector(0, 25), // Asetetaan sijainti
+                TextScale = new Vector(3, 3)
+            };
+            Add(uusi);
+            Label uusi2 = new Label("Poikasi teloitettiin.")
+            {
+                Color = Color.Transparent,
+                TextColor = Color.Red,
+                Position = new Vector(0, -50), // Asetetaan sijainti
+                TextScale = new Vector(3, 3)
+            };
+            Add(uusi2);
+        }
+        Task.Delay(100);
+        Label uusi3 = new Label("Yritä uudelleen (N), katso parhaat pisteet (S) tai luovuta (Esc)")
         {
             Color = Color.Transparent,
             TextColor = Color.Violet,
@@ -1944,11 +2013,24 @@ public class  Financial_Freedom : PhysicsGame
             TextScale = new Vector(3, 3)
         };
         Add(uusi3);
+        Label uusi4 = new Label("Sait "+finalscore+" pistettä")
+        {
+            Color = Color.Transparent,
+            TextColor = Color.Green,
+            Position = new Vector(0, Level.Bottom+200), // Asetetaan sijainti
+            TextScale = new Vector(3, 3)
+        };
+        Add(uusi4);
         Keyboard.Listen(Key.Escape, ButtonState.Pressed, () =>
         {
             ClearAll();
             Exit();
         }, "ulos");
+        Keyboard.Listen(Key.S, ButtonState.Pressed, () =>
+        {
+            topLista.Show();
+            topLista.HighScoreWindow.Position = new Vector(Screen.Right-225,0);
+        }, "Scoreboard");
         Keyboard.Listen(Key.N, ButtonState.Pressed, () =>
         {
             ClearAll();