Untitled

 avatar
unknown
plain_text
a month ago
2.0 kB
1
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 ->

Leave a Comment