diff --git a/.stack-work/dist/29cc6475/build/choplifter/choplifter.exe b/.stack-work/dist/29cc6475/build/choplifter/choplifter.exe
index 5e10001d45c3e1532ac1521c31ecaac150bb1a79..daf525c8115782965eddbff0715e2c8b15f9e3ca 100644
Binary files a/.stack-work/dist/29cc6475/build/choplifter/choplifter.exe and b/.stack-work/dist/29cc6475/build/choplifter/choplifter.exe differ
diff --git a/.stack-work/dist/29cc6475/stack-build-caches/6eb920625479cbea8700e1720c6b6df9985d350a35c1107cb4b076b0c0ef5da3/exe-choplifter b/.stack-work/dist/29cc6475/stack-build-caches/6eb920625479cbea8700e1720c6b6df9985d350a35c1107cb4b076b0c0ef5da3/exe-choplifter
index 58310e3022b621003c2a7ae5837124b8013e9f78..f81ce44fa849365c971cd7c905cc7d56611c64c3 100644
--- a/.stack-work/dist/29cc6475/stack-build-caches/6eb920625479cbea8700e1720c6b6df9985d350a35c1107cb4b076b0c0ef5da3/exe-choplifter
+++ b/.stack-work/dist/29cc6475/stack-build-caches/6eb920625479cbea8700e1720c6b6df9985d350a35c1107cb4b076b0c0ef5da3/exe-choplifter
@@ -7,6 +7,6 @@ C:\Users\Juuso\source\choplifter\choplifter.cabal:
   size: 1271
   modtime: 1603193097
 C:\Users\Juuso\source\choplifter\src\Main.hs:
-  hash: dd18ac9cb011130767f723d7dd63d4b04e78531536aa313ef37fdb7ee5a104ca
-  size: 5578
-  modtime: 1603366930
+  hash: 0b5d17faca20992a63d801f93dac97286eac18829bf0fa65d90c9da3356d05f7
+  size: 5684
+  modtime: 1603368203
diff --git a/.stack-work/stack.sqlite3 b/.stack-work/stack.sqlite3
index 4a26c1f73e4a595f7d6ba8b7601c126ccddf86b4..f24a5827f93a6995fd09dba3bab7f237357f3e64 100644
Binary files a/.stack-work/stack.sqlite3 and b/.stack-work/stack.sqlite3 differ
diff --git a/src/MainEdellisLuennonLoppu.hs b/src/MainEdellisLuennonLoppu.hs
new file mode 100644
index 0000000000000000000000000000000000000000..9c9ec186bb41a069e209dfc00639fb6ba04ce795
--- /dev/null
+++ b/src/MainEdellisLuennonLoppu.hs
@@ -0,0 +1,91 @@
+module Main where
+import Graphics.Gloss
+import Graphics.Gloss.Interface.Pure.Game
+import Prelude hiding (Down) -- peruskirjastossa oli määritelmä Down, joka nyt piilotettiin (vaikuttaa sort funktion järjestystä)
+import Graphics.Gloss.Geometry.Angle
+import Graphics.Gloss.Data.Vector
+
+
+main :: IO ()
+main = play
+        (InWindow "Choplifter klooni" (400,400) (200,200)) --Display  -- eka pari ikkunan koko, jälkimmäisestä ei hajuakaan
+        ( light blue)  -- Color
+        60 -- Int montako kuvaa sekunnissa -- 24 alunp.
+        (Peli 0 (10, 0) 0 0)  -- model
+        piirräPeli  -- function to convert model to picture
+        reagoi -- keskeytys
+        päivitäPeliä -- function to step the model one iteration
+
+-- "Animaatio on funktio joka ottaa ajan ja tuottaa kuvan. Se on ihan hauska ajatus"
+
+reagoi :: Event -> Choplifter -> Choplifter  -- Event -> world -> world
+reagoi tapahtuma peli
+  = case tapahtuma of -- event voi olla hiirenliikkauksia, näppäimenpainalluksia jne
+      EventKey (Char 'p') Down _ _ -> muutaTehoa 6 peli  -- char, special key tai mouse button, kaksi koordinaattia luultavasti hiiren
+      EventKey (Char 'ö') Down _ _ -> muutaTehoa (-6) peli
+      EventKey (Char 'l') Down _ _ -> kallista (-8) peli
+      EventKey (Char 'ä') Down _ _ -> kallista 8 peli
+      _ -> peli -- jos painallus joku muu ei tehdä mitään
+
+-- funktio joka muuttaa Pelin kuvaksi
+päivitäPeliä :: Float -> Choplifter -> Choplifter
+päivitäPeliä aikaEdellisestä edellinenTila
+  = case edellinenTila of 
+      Peli aika (kopteriX,kopteriY)
+                teho kulma
+        -> let
+            (vX,vY) = kulmaJaTehoNopeudeksi teho kulma -- mites saa hidastumaan...? Mieti itse! §
+        in Peli (aika + aikaEdellisestä)
+                (kopteriX+aikaEdellisestä*21*vX,
+                max 0 (kopteriY+aikaEdellisestä*21*vY - 2)) -- köyhän miehen painovoima tuo miinus
+                teho
+                kulma
+
+
+kulmaJaTehoNopeudeksi :: Float -> Float -> (Float,Float)
+kulmaJaTehoNopeudeksi teho kulma  -- Tässä gloss menee opettajasta metsään, koska sotketaan että Point ja Vector voivat olla sama asia (molemmissa x ja y), vaikka niillä on ihan eri _tarkoitus_
+  = rotateV (- degToRad kulma) (0, teho) -- otetaan vektori joka suoraan ylöspäin se teho  -- rotateV ottaa kulman radiaaneina...
+
+piirräPeli :: Choplifter -> Picture
+piirräPeli peli = case peli of
+                    Peli aika (kopteriX, kopteriY)
+                              _teho kulma  -- suunta
+                      -> let
+                          kopterikuva = rotate kulma (scale 0.4 0.4 (kopteri 20 aika))
+                          peliKuva = translate kopteriX kopteriY kopterikuva
+                                  <> maa
+                         in scale 0.25 0.25 (translate 0 (-180) peliKuva)
+
+kallista :: Float -> Choplifter -> Choplifter
+kallista muutos peli = case peli of
+                          Peli aika paikka teho kulma
+                            -> Peli aika paikka teho (kulma + muutos)
+
+muutaTehoa :: Float -> Choplifter -> Choplifter
+muutaTehoa muutos peli = case peli of
+                    Peli aika paikka teho kulma
+                      -> Peli aika paikka (teho+muutos) kulma
+
+data Choplifter  -- modelin tilalle tehdäänkin tämä  -- tehdään tietotyyppi, johon survotaan kaikki olioiden tilat, sen sijaan että olsi yksi möntti (olio-ohjelmoinnissa), johon säilöttäisiin tilat, tehdään paljon funktioita jotka käsittelevät sitä paskaa
+  = Peli
+      Float -- Aika pelin alusta
+      (Float, Float) -- Missä kopteri (kopteriX, kopteriY)
+      Float   -- Teho
+      Float  -- Kulma eli kuinka vinossa
+
+maa :: Picture
+maa = color green (translate 0 (-500) (rectangleSolid 5000 1000))
+
+kopteri :: Float -> Float -> Picture
+kopteri teho aika = translate 0 150 (color white runko)
+  where
+    runko = arcSolid 0 0 100 --circleSolid 100
+            <> translate (-200) 0 (rectangleSolid 300 30)  -- mikäs tämä <> olikaan..
+            <> translate (-350) 0 (rectangleSolid 50 100)
+            <> lapa -- pallo on puoliryhmien yhdistämisoperaatio... eli vähän kuin + joka toimii kuville... ja teksteille (kans puoliryhmiä) ja listoille...
+            <> translate 0 90     (rectangleSolid 10 120)
+
+            <> translate (-50) (-90)  (rectangleSolid 10 120)
+            <> translate (50) (-90)   (rectangleSolid 10 120)
+            <> translate 0 (-150)     (rectangleSolid 200 15)
+    lapa = translate 0 150 (rectangleSolid (350 * sin (aika * teho)) 10)   -- sini funktiohan on kätevästi tasaisen vaihteleva x:n (vaikkapa sitten ajan) suhteen!
\ No newline at end of file