Untitled
unknown
plain_text
a year ago
2.0 kB
5
Indexable
{-|
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 ->
Editor is loading...
Leave a Comment