Untitled
{-| Module : Tarefa3 Description : Mecânica do Jogo Copyright : Vasco Marques Machado <a109949@alunos.uminho.pt> Duarte Emanuel Soares Arruda <a109840@alunos.uminho.pt> Módulo para a realização da Tarefa 3 de LI1 em 2024/25. -} module Tarefa3 where import LI12425 import Tarefa1 import Tarefa2 atualizaJogo :: Tempo -> Jogo -> Jogo atualizaJogo t (Jogo{torresJogo = (Torre{} : ts)}) = undefined atualizaTorres :: Tempo -> [Torre] -> [Inimigo] -> ([Torre], [Inimigo]) atualizaTorres _ [] i = ([],i) atualizaTorres t (tr : ts) i = let (torreAtualizada, inimigosAtualizados) = atualizaTorre t tr i (torresRestantes, inimigosFinais) = atualizaTorres t ts inimigosAtualizados in (torreAtualizada : torresRestantes, inimigosFinais) atualizaTorre :: Tempo -> Torre -> [Inimigo] -> (Torre, [Inimigo]) atualizaTorre t torre@(Torre{cicloTorre = ct, tempoTorre = tt, rajadaTorre = rt, projetilTorre = pt}) inimigos | tt > 0 = (torre{tempoTorre = tt - t}, inimigos) | length (inimigosNoAlcance torre inimigos) == 0 = (torre, inimigos) | otherwise = (torre{tempoTorre = ct}, ia ++ ii) where (ia, ii) = rajadaInimigos torre (inimigosNoAlcance torre inimigos) rajadaInimigos :: Torre -> [Inimigo] -> ([Inimigo], [Inimigo]) rajadaInimigos t i = rajadaInimigosAc t i [] 1 where rajadaInimigosAc :: Torre -> [Inimigo] -> [Inimigo] -> Int -> ([Inimigo], [Inimigo]) rajadaInimigosAc _ [] l _ = (l, []) rajadaInimigosAc torre@(Torre{danoTorre = dt, rajadaTorre = rt, projetilTorre = pt}) (inimigo : ic) ia ac | ac == rt = ((ia ++ [atingeInimigo torre inimigo]), ic) | ac < rt = rajadaInimigosAc torre ic (ia ++ [atingeInimigo torre inimigo]) (ac+1) atualizaInimigos :: Tempo -> [Inimigo] -> ([Inimigo], Base) --atualizaBase :: Tempo -> --atualizaPortais :: Tempo ->
Leave a Comment