Untitled
unknown
plain_text
a year ago
6.3 kB
2
Indexable
import Graphics.Gloss import Graphics.Gloss.Interface.IO.Game import Graphics.Gloss.Interface.Pure.Game import Graphics.Gloss.Data.Bitmap import Data.Maybe import LI12324 import Tarefa4 type MapaBlocos = [[Bloco]] data Menu = Opcoes | EmJogo | MenuInicial data Opcoes = Jogar | Sair data CategoriaImagens = IBlocos | IPersonagem | IInimigos type ImagensBlocos = [(Bloco, Picture)] type ImagensPersonagens = [(Entidade, Picture)] data Imagens = Imagens {blocos :: ImagensBlocos, personagens :: ImagensPersonagens } data World = World { jogo :: Jogo , menu :: Menu , opcao :: Opcoes , imagens :: Imagens } m1 :: Mapa m1 = Mapa ((0.5,5.5), Oeste) (3.5,3.5) mapaBl mapaBl :: MapaBlocos mapaBl = [[P, P, P, P, P, P, P, P, P, P], [P, V, V, V, V, V, V, V, V, P], [P, V, V, P, P, P, P, V, V, P], [P, V, V, E, V, V, E, V, V, P], [P, V, V, E, V, V, E, V, V, P], [P, V, P, P, P, P, P, P, V, P], [P, V, E, V, V, V, V, E, V, P], [P, V, E, V, V, V, V, E, V, P], [P, P, P, P, A, A, P, P, P, P], [P, E, V, V, V, V, V, V, E, P], [P, E, V, V, V, V, V, V, E, P], [P, P, P, P, P, P, P, P, P, P]] inim = [Personagem {velocidade = (1,1), posicao = (2.5,2.5), tipo = MacacoMalvado, vida = 1, tamanho = (1,1), direcao = Este, emEscada = False, ressalta = False, pontos = 2, aplicaDano = (False,0)} ,Personagem {velocidade = (1,1), posicao = (7.5,2.5), tipo = Fantasma, vida = 1, tamanho = (1,1), direcao = Este, emEscada = False, ressalta = False, pontos = 2, aplicaDano = (False,0)} ,Personagem {velocidade = (1,1), posicao = (4.5,4.5), tipo = MacacoMalvado, vida = 2, tamanho = (1,1), direcao = Este, emEscada = False, ressalta = False, pontos = 2, aplicaDano = (False,0)}] jogad = Personagem {velocidade = (2,2), posicao = (3.5,10.5), tipo = Jogador, vida = 2, tamanho = (1,1), direcao = Oeste, emEscada = True, ressalta = False, pontos = 2, aplicaDano = (False,0)} colec = [(Moeda,(0.5,0.5)), (Martelo,(2.5,2.5)), (Moeda,(4.5,6))] jogoInicial :: Jogo jogoInicial = Jogo m1 inim colec jogad --personagens :: (Entidade,[Picture]) -> Picture --personagens (Jogador,pics) = pics !! 0 blocosPic :: (Bloco,Picture) -> Picture blocosPic (P,p) = p blocosPic (E,e) = e blocosPic (A,a) = a blocosPic (V,_) = Blank desenhaLinha :: [(Bloco,Picture)] -> Int -> [Picture] desenhaLinha [] _ = [] desenhaLinha (bp:t) x = translate (fromIntegral (x*64)) 350 (blocosPic bp):desenhaLinha t (x+1) desenhaMapa :: [[(Bloco,Picture)]] -> (Int,Int) -> [Picture] desenhaMapa [] _ = [] desenhaMapa (bp:t) (x,y) = translate (-250) (fromIntegral (y*(-64))) (pictures (desenhaLinha bp x)):desenhaMapa t (x,y+1) blocoPic :: Bloco -> ImagensBlocos -> (Bloco,Picture) blocoPic P p = (P,snd (p !! 0)) blocoPic E e = (E,snd (e !! 1)) blocoPic A a = (A,snd (a !! 2)) blocoPic V v = (V, Blank) blocoComIm :: [[Bloco]] -> ImagensBlocos -> [[(Bloco,Picture)]] blocoComIm [[]] _ = [] blocoComIm mpbl imbl = map (map (\x -> blocoPic x imbl)) mpbl blToIm :: Imagens -> ImagensBlocos blToIm (Imagens {blocos = imbl}) = imbl jogIm :: Imagens -> [(Entidade,Picture)] jogIm (Imagens {personagens = [(Jogador,j)]}) = [(Jogador,j)] desenhaEstado :: World -> Picture desenhaEstado (World (Jogo m1 inim colec jogad) EmJogo op img) = Pictures $ desenhaMapa (blocoComIm mapaBl imbl) (0,0) ++ [jogPic] where imbl = blToIm img jogPic = desenhaJogador ((jogIm img) !! 0) (posicao jogad) desenhaJogador :: (Entidade,Picture) -> (Double, Double)-> Picture desenhaJogador (Jogador,pic) (x,y) = translate (realToFrac (x*64) - 280) (realToFrac (y*(-64) + 380)) (pictures [pic]) --desenhaJogador :: Personagem -> Int -> MapaBlocos -> [Picture] -> Picture --desenhaJogador (Personagem v t (1,1) dir tam esc ress vida pts apDano) n mapa jogPic -- = translate (fromIntegral (n*500)) 0 (persPic (p,pics)) reageEvento :: Event -> World -> World reageEvento (EventKey (Char 'w') Down _ _) (World jogo EmJogo op img) = World (atualiza [Nothing] (Just Subir) jogo) EmJogo op img reageEvento (EventKey (Char 'w') Up _ _) (World jogo EmJogo op img) = World (atualiza [Nothing] Nothing jogo) EmJogo op img reageEvento (EventKey (Char 's') Down _ _) (World jogo EmJogo op img) = World (atualiza [Nothing] (Just Descer) jogo) EmJogo op img reageEvento (EventKey (Char 's') Up _ _) (World jogo EmJogo op img) = World (atualiza [Nothing] Nothing jogo) EmJogo op img reageEvento (EventKey (Char 'a') Down _ _) (World jogo EmJogo op img) = World (atualiza [Nothing] (Just AndarEsquerda) jogo) EmJogo op img reageEvento (EventKey (Char 'a') Up _ _) (World jogo EmJogo op img) = World (atualiza [Nothing] Nothing jogo) EmJogo op img reageEvento (EventKey (Char 'd') Down _ _) (World jogo EmJogo op img) = World (atualiza [Nothing] (Just AndarDireita) jogo) EmJogo op img reageEvento (EventKey (Char 'd') Up _ _) (World jogo EmJogo op img) = World (atualiza [Nothing] Nothing jogo) EmJogo op img reageEvento (EventKey (SpecialKey KeySpace) Down _ _) (World jogo EmJogo op img) = World (atualiza [Nothing] (Just Saltar) jogo) EmJogo op img reageEvento (EventKey (SpecialKey KeySpace) Up _ _) (World jogo EmJogo op img) = World (atualiza [Nothing] Nothing jogo) EmJogo op img reageEvento _ s = s estadoInicial :: Imagens -> World estadoInicial img = World jogoInicial EmJogo Jogar img reageTempo :: Float -> World -> World --reageTempo t (World jogo) = World (movimenta 10 t jogo) reageTempo _ e = e displayMode :: Display displayMode = FullScreen loadImg :: IO Imagens loadImg = do p <- loadBMP "plat.bmp" e <- loadBMP "escada.bmp" a <- loadBMP "alc.bmp" j <- loadBMP "mush.bmp" return $ Imagens {personagens = [(Jogador,j)], blocos = [(P,p), (E,e), (A, a), (V, Blank)]} main :: IO () main = do imgg <- loadImg play displayMode white 50 (estadoInicial imgg) desenhaEstado reageEvento reageTempo
Editor is loading...
Leave a Comment