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