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