diff --git a/src/Main.hs b/src/Main.hs index 1885e1feaad1ea53d7833beff2f4ad8a0ccd014c..67883991847d44bf62c158604cf2c45f108a8596 100644 --- a/src/Main.hs +++ b/src/Main.hs @@ -21,6 +21,15 @@ alkutilanne = [Hemmo (400, 100), Hemmo (600, 100)] ) +alkuKopteri :: Kopteri +alkuKopteri = Kopteri + (10, 0) -- paikka + 0 + (0,0) -- vauhti + 0 + 0 + 0 -- hemmoja + -- main :: IO () -- main = animate -- (InWindow "Choplifter" (400,400) (200,200)) @@ -69,6 +78,16 @@ onkoHyväLaskeutuminen nopeus kulma | magV nopeus < 250 && abs kulma <= 13 = True -- magV laskee vektoreista niiden kokonaismitan (kuinka pitkä vektori) | otherwise = False +cl_paikka :: Choplifter -> Point +cl_paikka peli = kop_paikka . cl_kopteri +cl_nopeus peli = kop_nopeus . cl_kopteri +cl_paikka :: Choplifter -> Point +cl_paikka peli = kop_paikka . cl_kopteri +cl_kulma, cl_teho :: Choplifter -> Float +cl_kulma peli = kop_kulma . cl_kopteri +cl_teho peli = kop_teho . cl_kopteri + + päivitäPeliTilanne :: Float -> PeliTilanne -> PeliTilanne päivitäPeliTilanne aikaedellisestä pelitilanne = case pelitilanne of @@ -79,7 +98,11 @@ päivitäPeliTilanne aikaedellisestä pelitilanne = Just Laskuteline | onkoHyväLaskeutuminen (cl_nopeus cl) (cl_kulma cl) -> GameOn (päivitäPeliä aikaedellisestä - cl{cl_kulma = 0 + cl{cl_kopteri = cl_kopteri cl{kop_kulma=0} + ,cl_kopteri = cl_kopteri cl {kop_nopeus = + pysäytäPystyssä + (cl_nopeus cl)}}) + cl_kulma = 0 ,cl_nopeus = pysäytäPystyssä (cl_nopeus cl)}) -- päivitetään samalla pysähdyksiin kopteri | otherwise -> GameOver cl @@ -248,18 +271,20 @@ data Choplifter -- modelin tilalle tehdäänkin tämä -- tehdään tietotyypp = Peli { -- annetaan nyt tämän (record tyyppisen) tietueen kentille oikeat nimet! Ei tarvitse paukutella auki case lauseissa koko ajan! cl_aika :: Float -- Aika pelin alusta - - ,cl_paikka :: (Float, Float) -- Missä kopteri (kopteriX, kopteriY) - ,cl_teho :: Float -- Teho - ,cl_nopeus :: (Float, Float) -- nopeus vektorina (suuntaX, suuntaY) - ,cl_kulma :: Float -- Kulma eli kuinka vinossa - ,cl_kiihtyvyysKerroin :: Float - ,cl_hemmojaKyydissä :: Natural - + ,cl_kopteri :: Kopteri ,cl_talot :: [Talo] ,cl_hemmot :: [Hemmo] } -- Annettiin cl_nimet koska muuten voisi tulla inhimillisiä virheitä helpommin +data Kopteri = Kopteri { + kop_paikka :: (Float, Float) -- Missä kopteri (kopteriX, kopteriY) + ,kop_teho :: Float -- Teho + ,kop_nopeus :: (Float, Float) -- nopeus vektorina (suuntaX, suuntaY) + ,kop_kulma :: Float -- Kulma eli kuinka vinossa + ,kop_kiihtyvyysKerroin :: Float + ,kop_hemmojaKyydissä :: Natural +} + korkeusKohdassa :: Float -> Choplifter -> Float -- korkeuskoordinaatti eka arg korkeusKohdassa kohta peli = maybe 0 maximum1 . nonEmpty . map osuukoTaloon . cl_talot $ peli -- selkeämpi kylläkin tehdä näin: maybe 0 maximum1 (nonEmpty (map osuukoTaloon (cl_talot peli)))