From 0b745bf05c559aa6cc2d05f00e4db039f216106e Mon Sep 17 00:00:00 2001
From: juhevali <juuso.h.valimaa@gmail.com>
Date: Thu, 22 Oct 2020 15:08:44 +0300
Subject: [PATCH] =?UTF-8?q?Laitoin=20t=C3=A4nne=20luennon=20alkuun=20omat?=
 =?UTF-8?q?=20muutokset,=20mutta=20my=C3=B6s=20edellisluennon=20koodin=20(?=
 =?UTF-8?q?ihan=20pienin=20muutoksin)=20valmiiiksi=20MainEdellisen...=20ti?=
 =?UTF-8?q?edostoon?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../29cc6475/build/choplifter/choplifter.exe  | Bin 28585823 -> 28585823 bytes
 .../exe-choplifter                            |   6 +-
 .stack-work/stack.sqlite3                     | Bin 90112 -> 90112 bytes
 src/MainEdellisLuennonLoppu.hs                |  91 ++++++++++++++++++
 4 files changed, 94 insertions(+), 3 deletions(-)
 create mode 100644 src/MainEdellisLuennonLoppu.hs

diff --git a/.stack-work/dist/29cc6475/build/choplifter/choplifter.exe b/.stack-work/dist/29cc6475/build/choplifter/choplifter.exe
index 5e10001d45c3e1532ac1521c31ecaac150bb1a79..daf525c8115782965eddbff0715e2c8b15f9e3ca 100644
GIT binary patch
delta 1511
zcmWN=2h<1z07lXCi^`UfEkqI-AyIaPh?caitn4jB#<L<jql{>f2Bn?$o?5C`(cXJ%
z_uX^u{(XB&?$4$33+<h-Y+;W=2YSpD3$PF#goUvP9*l?Jp;#1)VR0;hC9xEi#xi&q
zmc?>d9xLGCSP?5>Wvqf#u^Lv#8h8ZO#9CMzkHk7y7mvbvcr@0>W3T}>#AC4$HpV8{
z6pzDZ*c@Bn@z@eiz*g8APsEe34YtL0*d9AzN9=?r<0*J5cE&E)6;H!%*d0&D9@rDl
zz%%hIJR8r!UU)9{#`ExeyZ|r6i|}H+1p8oL?1%kv0A7j%aS#s1AvhE-!(liaN8m^t
zg`;r{j>T~}9w*>LoP?9{a-4!waT;EM({Tn~i8FB)&c-<i&c%5+9~a<4yb2fLV!Rrc
z;8I+M%W(y+#8r3=uEsUE7T4jmcpa|C4Y(0E;q|x~x8MzUBi@8J<5t{;x8QcX6>r1a
z@ebU9JMm7u3wPn&cn{u-_u>8c06vHh;ck2wAHhfQF?<}Kz$fu3d>Ws@XYo0F9$&y0
z@g;m2U%@^2D!zuV;~V%U?!~w8ZF~pCckw-ZANS#Y`~W}1kMLvs1V6>k@N@hEzr?Tb
zYy1Yk#qaQY`~iQ&pYUh=1%Jig@OM0bf8d|^7yga^;J^6a0t*&fkcIM~ESyF1;5;M`
z&7xT>i)V=}nWeIHmdV4iY?jONSs@S4idiWuXO*m))v|il$Ro05*2>y>WY)>Lc~sWR
zqqBY<lMS+A9-ED_aW=`Od0aNj=Gh{T&z5;Yw#wFdVxE+3vTe4@_SqpjW~V$kPsvlW
zb9TwDd0KYM?s<Cl$ewvdo|$Lm*?CU(%5$@Ko|ot61$kj!lo#hE*(dvEzwDm_^3oib
zgK}^V$)R~!4$I*=B1h(^9GzowY>vzEIUy(Jq@0|W=aih9)AEX(o-^{woSCz7cFsw1
zZqCd3xgZzjRk<h^=he9+m*%ouo-1-?uF7k2b*{;^xh}8G>vDZ=$c?!vug}f7C2z<Z
j^QOExx8}CICAa6Td0XC|cjS)TnRn)01-so<K%@TwPq8Qc

delta 1511
zcmWN=2h<P(07lXCCsHJ(rJ>T+Af=QdBBh}{DHTzPP?6R0T9lUd-a|WE_TGCul)d-f
zeD|DtVE;?S59I7=g=&wQGoy2%_U$K%1y~3V!oqkk9)d;iP%MhY@Gv|ai{lYk0*}O!
zSPGBA(pUz|VmU02M`H!7h?TH19)ne|Dptc|u{zeknpg{KV;!uE$6-CJj}5RP9*-wr
zBRmlsV-q|Hn_@FO8JlAZJOx`~D?AlX!`65@o`G%fOgszQ;@Q{^+v7Rd0Xt$R?2PAP
z7wn4Nusim^p4ba}V;}5`{jfithv(w}9Eca-ARLTC@It%@hvLO}2@b>II07%lk$4$i
zj-&7jyb`a%(KrUj;?;N!j>Bv5I=milz#DNqPQZyc2`A%C2u{JNI1Q)c47?d{!I?M<
zZ^hX-2j}8EoR7ER0$hlTa4{~yrML{2;|g4ft8g{0!L_&!*W(7<h?{UTZo#d1J8r}6
zxC3|MF5HcKa4+70cj8@mH{OHy;(d5O?!yQ0L3{`w#z*i`d<-AQC-6yp3ZKSj@L7Bg
zpT`&QMSKZg##iuFd<|d6H}Fk-3*ScZ9efwx!~J*w-^UN|L;MIo#!v85{0u+GFYrtJ
z3ctp0@LT*2zsDc&NBjwY#$WJP{0)D{Kk!fd3;)J{@L&9Ix&<>W$U=Eg7S4n7kSvmi
zX3;E`hvnf}Jdel{d1RK%Qh8LC&N5jx%VqgIIxA$wtdy1Wn5>djvsxaT)w4#{%vxDH
z>tx+LF6(9eY>*A}_&gyS<%!uio8(E^G@Iqg**sh1DcLex<*9jEw$9V@jBJx<=2_V`
z&(3z)KF`Sx*)cn1=R7yNWY_GL-Lpsb%wE|$`()qjm;Lj+JU<8Iz`P&_<=`BW7v@Dd
zG%wCea##+}5qW8j%**of9F<q(m3dW;&M`SQug+_7Twa^k<@I?(-k9TaLQc#{IXQ1i
za!O9kX*oS-<jr|Y&dgbPYtGI&IXCC!{Jbp}<icE(i*rdX&1JbfSLDiEm8)}2uFZA1
iJ~!mX+?1PhOK#2Eb6alD9l0}i<?h^5u+O~(H2fbH8zz+i

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 58310e3..f81ce44 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
GIT binary patch
delta 22
dcmZoTz}j$tb%Hdb?nD`9M%~7QtqF_^;sICu2Y3Jg

delta 22
dcmZoTz}j$tb%Hdb`a~ILM)k&otqF_^;sIBF2W$WU

diff --git a/src/MainEdellisLuennonLoppu.hs b/src/MainEdellisLuennonLoppu.hs
new file mode 100644
index 0000000..9c9ec18
--- /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
-- 
GitLab