Untitled

 avatar
unknown
plain_text
a month ago
1.9 kB
2
Indexable
import Graphics.Gloss
import Graphics.Gloss.Interface.Pure.Game
import ImmutableTowers

-- Função principal para desenhar o mapa
desenha :: Mapa -> Picture
desenha mapa = Pictures $ concatMap desenhaLinha (zip [0..] mapa)

desenhaLinha :: (Int, [Terreno]) -> [Picture]
desenhaLinha (y, linha) = concatMap (desenhaChao y) (zip [0..] linha)

desenhaChao :: Int -> (Int, Terreno) -> [Picture]
desenhaChao y (x, terreno) = [desenhaTerreno terreno (posicaoCentro x y)]

-- Calcula a posição do centro de um quadrado no mapa
posicaoCentro :: Int -> Int -> (Float, Float)
posicaoCentro x y = (fromIntegral x + 0.5, fromIntegral y + 0.5)

-- Função para desenhar cada tipo de terreno
desenhaTerreno :: Terreno -> Posicao -> Picture
desenhaTerreno Agua (x, y) = desenhaChaoBase (x, y) (makeColorI 154 209 221 255)
desenhaTerreno Relva (x, y) = desenhaChaoBase (x, y) (makeColorI 91 142 80 255)
desenhaTerreno Terra (x, y) = desenhaChaoBase (x, y) (makeColorI 186 140 93 255)

desenhaChaoBase :: Posicao -> Color -> Picture
desenhaChaoBase (x, y) color = Color color $ translate (x * w) (-y * h) $ rectangleSolid w h

w :: Float
w = 40

h :: Float
h = 40

mapa01 :: [[Terreno]]
mapa01 =
    [ [t,t,a,r,r,r,r,r],
      [a,t,a,a,r,t,t,t],
      [a,t,a,a,r,t,r,a],
      [a,t,a,a,r,t,r,a],
      [t,t,a,a,r,t,t,t],
      [t,a,a,a,r,r,r,t],
      [t,a,t,t,t,t,t,t],
      [t,t,t,a,r,r,r,a]
    ]
  where
    t = Terra
    r = Relva
    a = Agua

-- Função para contar o número de colunas no mapa
contaCol :: Mapa -> Int
contaCol [] = 0
contaCol (linha:_) = length linha

-- Função para contar o número de linhas no mapa
contaLinhas :: Mapa -> Int
contaLinhas = length

background :: Color
background = greyN 0.6

-- Função principal para exibir a janela
main :: IO ()
main = display
            (InWindow "Immutable Towers" (800, 600) (100, 100))
            background
            (desenha mapa01)
Leave a Comment