Untitled
unknown
plain_text
2 years ago
6.3 kB
6
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
reageTempoEditor is loading...
Leave a Comment