Este projeto foi desenvolvido no âmbito da unidade curricular Laboratórios de Informática I (2024/2025), da Licenciatura em Engenharia Informática da Universidade do Minho.
Immutable Towers é uma interpretação funcional do clássico género Tower Defense, desenvolvida em Haskell, com interface gráfica baseada em gloss. O jogador deve posicionar torres estrategicamente para impedir que ondas de inimigos cheguem à base, utilizando diferentes tipos de projéteis com sinergias e efeitos.
Para mais detalhes sobre as regras do projeto: Descrição Oficial
- Guilherme Ferreira — A11042
- Lucas Pinto — A111042
- Simulação completa de um jogo Tower Defense
- Diferentes tipos de terrenos: relva, terra e água
- Torres com projéteis variados e sinergias:
- Fogo 🔥 – dano contínuo
- Gelo ❄️ – congela inimigos
- Resina 🟡 – reduz velocidade
- Veneno ☠️ – aplica efeitos mais fracos de Fogo e Resina
- Inimigos com estados ativos, direção, vida e velocidade
- Portais com ondas programadas de inimigos
- Sistema de loja e compra de torres
- Interface gráfica com animações, interação por rato e visão isométrica
- Sistema de níveis, saves e carregamento de jogo
- Efeitos visuais e suporte a torres com lasers
Certifique-se de ter o GHC e o Cabal instalados.
Para compilar e executar o jogo:
cabal run
Para correr os testes:
cabal test
Módulo | Descrição |
---|---|
Mapa.hs |
Representação e validação do mapa |
Base.hs |
Estado e mecânica da base do jogador |
Torre.hs |
Definições de torres e projéteis |
Inimigo.hs |
Movimento e efeitos dos inimigos |
Portal.hs |
Geração e gestão de ondas de inimigos |
Jogo.hs |
Estado global do jogo |
Main.hs |
Interface gráfica usando gloss |
Testes.hs |
Testes unitários com HUnit |
Este projeto inclui diversas funcionalidades adicionais que vão além do enunciado original:
- 🌐 Isometria: representação visual mais rica do mapa
- ⚡ Novos poderes e tipos de torre, incluindo lasers
- 🎯 Interação por rato: clique para comprar e posicionar torres
- ✨ Animações visuais para eventos no jogo
- 🎮 Sistema de níveis com progressão
- 💾 Sistema de saves e carregamento de estado do jogo
Os testes foram implementados utilizando a biblioteca HUnit.
Para executar todos os testes:
cabal test
- Estrutura modular em Haskell, com separação clara por responsabilidades
- Testes automatizados com HUnit
- Interface reativa com gloss
- Utilização de
git
para controlo de versões - Código documentado com foco em clareza e manutenção