motherload
CopyrightHenrique 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 HaskellNone
LanguageGHC2021

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

Tipos de dados

Básicos

type Combustivel = Int Source #

Unidades de combustível.

type Creditos = Int Source #

Moeda do jogo.

type Dimensao = (Int, Int) Source #

Dimensão de uma matriz: (número de linhas, número de colunas).

data Direcao Source #

Direção de um movimento numa matriz: Cima e Baixo mudam a linha, Esquerda e Direita mudam a coluna.

Constructors

Cima 
Baixo 
Esquerda 
Direita 

Instances

Instances details
Bounded Direcao Source # 
Instance details

Defined in Tarefa0_geral

Enum Direcao Source # 
Instance details

Defined in Tarefa0_geral

Read Direcao Source # 
Instance details

Defined in Tarefa0_geral

Show Direcao Source # 
Instance details

Defined in Tarefa0_geral

Eq Direcao Source # 
Instance details

Defined in Tarefa0_geral

Methods

(==) :: Direcao -> Direcao -> Bool #

(/=) :: Direcao -> Direcao -> Bool #

Ord Direcao Source # 
Instance details

Defined in Tarefa0_geral

type Nivel = Int Source #

Nível da broca / dureza de um bloco.

type Peso = Int Source #

Peso de minérios na carga.

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.

type Semente = Int Source #

Valor inicial que determina a sequência de números pseudo-aleatórios.

type Ticks = Int Source #

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.

type Mapa = Matriz Bloco Source #

Mapa retangular de blocos, ou seja, uma Matriz de Blocos. A linha 0 é a superfície e é toda Ar.

data Bloco Source #

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 danoLava à escavadora quando escavado.

Instances

Instances details
Read Bloco Source # 
Instance details

Defined in Labs2026

Show Bloco Source # 
Instance details

Defined in Labs2026

Methods

showsPrec :: Int -> Bloco -> ShowS #

show :: Bloco -> String #

showList :: [Bloco] -> ShowS #

Eq Bloco Source # 
Instance details

Defined in Labs2026

Methods

(==) :: Bloco -> Bloco -> Bool #

(/=) :: Bloco -> Bloco -> Bool #

Ord Bloco Source # 
Instance details

Defined in Labs2026

Methods

compare :: Bloco -> Bloco -> Ordering #

(<) :: Bloco -> Bloco -> Bool #

(<=) :: Bloco -> Bloco -> Bool #

(>) :: Bloco -> Bloco -> Bool #

(>=) :: Bloco -> Bloco -> Bool #

max :: Bloco -> Bloco -> Bloco #

min :: Bloco -> Bloco -> Bloco #

data TipoMinerio Source #

Minérios, por ordem crescente de valor.

Constructors

Ferro 
Bronze 
Prata 
Ouro 
Platina 
Diamante 

Instances

Instances details
Bounded TipoMinerio Source # 
Instance details

Defined in Labs2026

Enum TipoMinerio Source # 
Instance details

Defined in Labs2026

Read TipoMinerio Source # 
Instance details

Defined in Labs2026

Show TipoMinerio Source # 
Instance details

Defined in Labs2026

Eq TipoMinerio Source # 
Instance details

Defined in Labs2026

Ord TipoMinerio Source # 
Instance details

Defined in Labs2026

Entidades

data Escavadora Source #

Escavadora controlada pelo jogador.

Constructors

Escavadora 

Fields

data Edificio Source #

Edifício à superfície (linha 0).

Constructors

Edificio 

Fields

Instances

Instances details
Read Edificio Source # 
Instance details

Defined in Labs2026

Show Edificio Source # 
Instance details

Defined in Labs2026

Eq Edificio Source # 
Instance details

Defined in Labs2026

Ord Edificio Source # 
Instance details

Defined in Labs2026

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

Instances details
Bounded TipoEdificio Source # 
Instance details

Defined in Labs2026

Enum TipoEdificio Source # 
Instance details

Defined in Labs2026

Read TipoEdificio Source # 
Instance details

Defined in Labs2026

Show TipoEdificio Source # 
Instance details

Defined in Labs2026

Eq TipoEdificio Source # 
Instance details

Defined in Labs2026

Ord TipoEdificio Source # 
Instance details

Defined in Labs2026

data Objeto Source #

Objeto colocado no mapa.

Constructors

Dinamite 

Fields

Instances

Instances details
Read Objeto Source # 
Instance details

Defined in Labs2026

Show Objeto Source # 
Instance details

Defined in Labs2026

Eq Objeto Source # 
Instance details

Defined in Labs2026

Methods

(==) :: Objeto -> Objeto -> Bool #

(/=) :: Objeto -> Objeto -> Bool #

Ord Objeto Source # 
Instance details

Defined in Labs2026

data Melhoria Source #

Melhoria comprável na Oficina. Os valores são absolutos (a nova capacidade), exceto Dinamites, que é somada ao inventário.

Instances

Instances details
Read Melhoria Source # 
Instance details

Defined in Labs2026

Show Melhoria Source # 
Instance details

Defined in Labs2026

Eq Melhoria Source # 
Instance details

Defined in Labs2026

Ord Melhoria Source # 
Instance details

Defined in Labs2026

type Loja = [(Creditos, Melhoria)] Source #

Loja de melhorias com o respetivo preço. O stock é infinito: comprar não altera a loja.

Jogo

data Jogo Source #

Estado completo do jogo.

Constructors

Jogo 

Fields

Instances

Instances details
Read Jogo Source # 
Instance details

Defined in Labs2026

Show Jogo Source # 
Instance details

Defined in Labs2026

Methods

showsPrec :: Int -> Jogo -> ShowS #

show :: Jogo -> String #

showList :: [Jogo] -> ShowS #

Eq Jogo Source # 
Instance details

Defined in Labs2026

Methods

(==) :: Jogo -> Jogo -> Bool #

(/=) :: Jogo -> Jogo -> Bool #

Ord Jogo Source # 
Instance details

Defined in Labs2026

Methods

compare :: Jogo -> Jogo -> Ordering #

(<) :: Jogo -> Jogo -> Bool #

(<=) :: Jogo -> Jogo -> Bool #

(>) :: Jogo -> Jogo -> Bool #

(>=) :: Jogo -> Jogo -> Bool #

max :: Jogo -> Jogo -> Jogo #

min :: Jogo -> Jogo -> Jogo #

data Jogada Source #

Ações do jogador.

Constructors

Parado

Ausência de ação que desliga propulsores ativos.

Move Direcao

Deslocar-se (Ar), voar (Cima) ou escavar (bloco escavável, só quando apoiado).

Vende

Na Refinaria: vende toda a carga.

Abastece

No Posto: enche o depósito, limitado pelos créditos.

Repara

Na Oficina: repara a escavadora, limitado pelos créditos.

Compra Int

Na Oficina: compra a melhoria com este índice na Loja.

LargaDinamite

Coloca uma dinamite na posição atual.

Instances

Instances details
Read Jogada Source # 
Instance details

Defined in Labs2026

Show Jogada Source # 
Instance details

Defined in Labs2026

Eq Jogada Source # 
Instance details

Defined in Labs2026

Methods

(==) :: Jogada -> Jogada -> Bool #

(/=) :: Jogada -> Jogada -> Bool #

Ord Jogada Source # 
Instance details

Defined in Labs2026

Constantes do jogo

Minérios

valorMinerio :: TipoMinerio -> Creditos Source #

Valor de venda de uma unidade de cada minério, na Refinaria.

Cada minério vale cerca de duas vezes e meia o anterior, e o mesmo salto separa cada nível da broca: o valor de uma viagem cresce com a profundidade a que se consegue chegar.

MinérioValor
Ferro25
Bronze60
Prata150
Ouro400
Platina1000
Diamante2500

pesoMinerio :: TipoMinerio -> Peso Source #

Peso de uma unidade de cada minério na carga da escavadora.

NB: o Diamante é o mais valioso e o mais leve; a Platina obriga a escolher.

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 Terra
1
>>> custoEscavacao Rocha
0

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

danoLava :: Int Source #

Vida perdida ao escavar um bloco de Lava.

alturaQuedaSegura :: Int Source #

Número de blocos que a escavadora pode cair sem sofrer dano.

danoQueda :: Int Source #

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.

Funções auxiliares

geraAleatorios :: Semente -> Int -> [Int] Source #

Função que gera uma lista de números aleatórios a partir de uma Semente.

Exemplos

>>> geraAleatorios 2627 3
[7884690122452951765,-2301222553746467507,2230926884526872602]