| Copyright | Henrique Faria <d14410@di.uminho.pt> Emanuel Rodrigues <d14960@di.uminho.pt> Nelson Estevão <d12733@di.uminho.pt> Olga Pacheco <omp@di.uminho.pt> Sérgio Alves <sfa@di.uminho.pt> Xavier Pinho <d12736@di.uminho.pt> |
|---|---|
| Safe Haskell | None |
| Language | GHC2021 |
Labs2026
Description
Tipos de dados e funções auxiliares para a realização do projeto de LI1/LP1 em 2026/27.
O projeto é uma versão simplificada do jogo Motherload: uma escavadora explora um mundo visto de lado, recolhe minérios, e vende-os à superfície.
Synopsis
- type Combustivel = Int
- type Creditos = Int
- type Dimensao = (Int, Int)
- data Direcao
- type Nivel = Int
- type Peso = Int
- type Posicao = (Int, Int)
- type Semente = Int
- type Ticks = Int
- type Matriz a = [[a]]
- type Mapa = Matriz Bloco
- data Bloco
- data TipoMinerio
- data Escavadora = Escavadora {
- posicaoEscavadora :: Posicao
- direcaoEscavadora :: Direcao
- combustivelEscavadora :: Combustivel
- depositoEscavadora :: Combustivel
- vidaEscavadora :: Int
- vidaMaximaEscavadora :: Int
- brocaEscavadora :: Nivel
- cargaEscavadora :: [TipoMinerio]
- capacidadeEscavadora :: Peso
- quedaEscavadora :: Int
- voandoEscavadora :: Bool
- dinamitesEscavadora :: Int
- data Edificio = Edificio {}
- data TipoEdificio
- data Objeto = Dinamite {}
- data Melhoria
- type Loja = [(Creditos, Melhoria)]
- data Jogo = Jogo {
- mapaJogo :: Mapa
- escavadoraJogo :: Escavadora
- edificiosJogo :: [Edificio]
- objetosJogo :: [Objeto]
- creditosJogo :: Creditos
- lojaJogo :: Loja
- data Jogada
- valorMinerio :: TipoMinerio -> Creditos
- pesoMinerio :: TipoMinerio -> Peso
- durezaBloco :: Bloco -> Maybe Nivel
- custoEscavacao :: Bloco -> Combustivel
- custoMovimento :: Combustivel
- custoVoo :: Combustivel
- danoLava :: Int
- alturaQuedaSegura :: Int
- danoQueda :: Int
- precoCombustivel :: Creditos
- precoReparacao :: Creditos
- duracaoDinamite :: Ticks
- raioDinamite :: Int
- danoDinamite :: Int
- geraAleatorios :: Semente -> Int -> [Int]
Tipos de dados
Básicos
type Combustivel = Int Source #
Unidades de combustível.
Instances
| Bounded Direcao Source # | |
| Enum Direcao Source # | |
| Read Direcao Source # | |
| Show Direcao Source # | |
| Eq Direcao Source # | |
| Ord Direcao Source # | |
type Posicao = (Int, Int) Source #
Uma posição numa matriz é dada como um par (linha,colunha). As coordenadas são dois números naturais e começam com (0,0) no canto superior esquerdo, com as linhas incrementando para baixo e as colunas incrementando para a direita.

Unidade de tempo do jogo. Por tick a escavadora desloca-se, no máximo, um bloco.
Mapas
type Matriz a = [[a]] Source #
Uma matriz é um conjunto de elementos a duas dimensões.
Em notação matemática, é geralmente representada por:

O Mapa do jogo, em Labs2026, é precisamente uma matriz de blocos.
Bloco do mundo.
Constructors
| Ar | Espaço livre (céu ou túnel). A escavadora só ocupa blocos de ar. |
| Terra | Escavável, sem valor. |
| Rocha | Inescavável. |
| Minerio TipoMinerio | Escavável; ao ser escavado o minério passa para a carga da escavadora. |
| Lava | Escavável, mas causa |
data TipoMinerio Source #
Minérios, por ordem crescente de valor.
Instances
Entidades
data Escavadora Source #
Escavadora controlada pelo jogador.
Constructors
| Escavadora | |
Fields
| |
Instances
| Read Escavadora Source # | |
Defined in Labs2026 Methods readsPrec :: Int -> ReadS Escavadora # readList :: ReadS [Escavadora] # readPrec :: ReadPrec Escavadora # readListPrec :: ReadPrec [Escavadora] # | |
| Show Escavadora Source # | |
Defined in Labs2026 Methods showsPrec :: Int -> Escavadora -> ShowS # show :: Escavadora -> String # showList :: [Escavadora] -> ShowS # | |
| Eq Escavadora Source # | |
Defined in Labs2026 | |
| Ord Escavadora Source # | |
Defined in Labs2026 Methods compare :: Escavadora -> Escavadora -> Ordering # (<) :: Escavadora -> Escavadora -> Bool # (<=) :: Escavadora -> Escavadora -> Bool # (>) :: Escavadora -> Escavadora -> Bool # (>=) :: Escavadora -> Escavadora -> Bool # max :: Escavadora -> Escavadora -> Escavadora # min :: Escavadora -> Escavadora -> Escavadora # | |
Edifício à superfície (linha 0).
Constructors
| Edificio | |
Fields
| |
data TipoEdificio Source #
Tipo de edifício à superfície.
Constructors
| Posto | Abastecer combustível. |
| Refinaria | Vender a carga. |
| Oficina | Reparar a escavadora e comprar melhorias. |
Instances
Objeto colocado no mapa.
Constructors
| Dinamite | |
Fields
| |
Melhoria comprável na Oficina. Os valores são absolutos (a nova capacidade), exceto
Dinamites, que é somada ao inventário.
Constructors
| Deposito Combustivel | Novo |
| Vida Int | Novo |
| Broca Nivel | Novo |
| Carga Peso | Nova |
| Dinamites Int | Acrescenta dinamites ao inventário. |
type Loja = [(Creditos, Melhoria)] Source #
Loja de melhorias com o respetivo preço. O stock é infinito: comprar não altera a loja.
Jogo
Estado completo do jogo.
Constructors
| Jogo | |
Fields
| |
Ações do jogador.
Constructors
| Parado | Ausência de ação que desliga propulsores ativos. |
| Move Direcao | Deslocar-se ( |
| Vende | Na |
| Abastece | No |
| Repara | Na |
| Compra Int | |
| LargaDinamite | Coloca uma dinamite na posição atual. |
Constantes do jogo
Minérios
valorMinerio :: TipoMinerio -> Creditos Source #
pesoMinerio :: TipoMinerio -> Peso Source #
Escavação e movimento
durezaBloco :: Bloco -> Maybe Nivel Source #
Dureza de um bloco, ou seja, o nível mínimo de brocaEscavadora que o consegue escavar.
Devolve Nothing para os blocos que não são escaváveis: Ar (não há nada para escavar) e
Rocha (inescavável a qualquer nível).
custoEscavacao :: Bloco -> Combustivel Source #
Combustível gasto a escavar um bloco: a sua durezaBloco.
>>>custoEscavacao Terra1>>>custoEscavacao Rocha0
custoMovimento :: Combustivel Source #
Combustível gasto a deslocar-se um bloco na horizontal.
custoVoo :: Combustivel Source #
Combustível gasto a subir um bloco com os propulsores.
Dano
alturaQuedaSegura :: Int Source #
Número de blocos que a escavadora pode cair sem sofrer dano.
Vida perdida por cada bloco caído acima da alturaQuedaSegura.
Edifícios
precoCombustivel :: Creditos Source #
Créditos por unidade de combustível, no Posto.
precoReparacao :: Creditos Source #
Créditos por ponto de vida reparado, na Oficina.
Dinamite
duracaoDinamite :: Ticks Source #
Ticks entre largar uma dinamite e a sua explosão.
raioDinamite :: Int Source #
Raio da explosão de uma dinamite, em blocos (distância de Chebyshev).
danoDinamite :: Int Source #
Vida perdida numa explosão que apanhe a escavadora.