{-|
Module      : Tarefa0_2025
Description : Funções auxiliares.

Módulo que define funções auxiliares que serão úteis na resolução do trabalho prático de LI1/LP1 em 2025/26.
-}

-- | Este módulo 
module Tarefa0_2025 where
    
import Labs2025

-- | Retorna a quantidade de munições disponíveis de uma minhoca para uma dada arma.
encontraQuantidadeArmaMinhoca :: TipoArma -> Minhoca -> Int
encontraQuantidadeArmaMinhoca :: TipoArma -> Minhoca -> Int
encontraQuantidadeArmaMinhoca = TipoArma -> Minhoca -> Int
forall a. HasCallStack => a
undefined
-- | Atualia a quantidade de munições disponíveis de uma minhoca para uma dada arma.
atualizaQuantidadeArmaMinhoca :: TipoArma -> Minhoca -> Int -> Minhoca
atualizaQuantidadeArmaMinhoca :: TipoArma -> Minhoca -> Int -> Minhoca
atualizaQuantidadeArmaMinhoca = TipoArma -> Minhoca -> Int -> Minhoca
forall a. HasCallStack => a
undefined

-- | Verifica se um tipo de terreno é destrutível, i.e., pode ser destruído por explosões.
--
-- __NB:__ Apenas @Terra@ é destrutível.
eTerrenoDestrutivel :: Terreno -> Bool
eTerrenoDestrutivel :: Terreno -> Bool
eTerrenoDestrutivel = Terreno -> Bool
forall a. HasCallStack => a
undefined

-- | Verifica se um tipo de terreno é opaco, i.e., não permite que objetos ou minhocas se encontrem por cima dele.
--
-- __NB:__ Apenas @Terra@ ou @Pedra@ são opacos.
eTerrenoOpaco :: Terreno -> Bool
eTerrenoOpaco :: Terreno -> Bool
eTerrenoOpaco = Terreno -> Bool
forall a. HasCallStack => a
undefined

-- | Verifica se uma posição do mapa está livre, i.e., pode ser ocupada por um objeto ou minhoca.
--
-- __NB:__ Uma posição está livre se não contiver um terreno opaco.
ePosicaoMapaLivre :: Posicao -> Mapa -> Bool
ePosicaoMapaLivre :: Posicao -> Mapa -> Bool
ePosicaoMapaLivre = Posicao -> Mapa -> Bool
forall a. HasCallStack => a
undefined

-- | Verifica se uma posição do estado está livre, i.e., pode ser ocupada por um objeto ou minhoca.
--
-- __NB:__ Uma posição está livre se o mapa estiver livre e se não estiver já uma minhoca ou um barril nessa posição.
ePosicaoEstadoLivre :: Posicao -> Estado -> Bool
ePosicaoEstadoLivre :: Posicao -> Estado -> Bool
ePosicaoEstadoLivre = Posicao -> Estado -> Bool
forall a. HasCallStack => a
undefined

-- Verifica se numa lista de objetos já existe um disparo feito para uma dada arma por uma dada minhoca.
minhocaTemDisparo :: TipoArma -> Minhoca -> [Objeto] -> Bool
minhocaTemDisparo :: TipoArma -> Minhoca -> [Objeto] -> Bool
minhocaTemDisparo = TipoArma -> Minhoca -> [Objeto] -> Bool
forall a. HasCallStack => a
undefined

-- Destrói uma dada posição no mapa (tipicamente como consequência de uma explosão).
--
-- _NB__: Só terrenos @Terra@ pode ser destruídos.
destroiPosicao :: Posicao -> Mapa -> Mapa
destroiPosicao :: Posicao -> Mapa -> Mapa
destroiPosicao = Posicao -> Mapa -> Mapa
forall a. HasCallStack => a
undefined