module Labs2026
(
Combustivel
, Creditos
, Dimensao
, Direcao (..)
, Nivel
, Peso
, Posicao
, Semente
, Ticks
, Matriz
, Mapa
, Bloco (..)
, TipoMinerio (..)
, Escavadora (..)
, Edificio (..)
, TipoEdificio (..)
, Objeto (..)
, Melhoria (..)
, Loja
, Jogo (..)
, Jogada (..)
, valorMinerio
, pesoMinerio
, durezaBloco
, custoEscavacao
, custoMovimento
, custoVoo
, danoLava
, alturaQuedaSegura
, danoQueda
, precoCombustivel
, precoReparacao
, duracaoDinamite
, raioDinamite
, danoDinamite
, geraAleatorios
) where
import Data.Maybe (fromMaybe)
import System.Random (mkStdGen, randoms)
import Tarefa0_geral (Dimensao, Direcao (..), Matriz, Posicao)
type Ticks = Int
type Creditos = Int
type Combustivel = Int
type Peso = Int
type Nivel = Int
type Semente = Int
data TipoMinerio = Ferro | Bronze | Prata | Ouro | Platina | Diamante
deriving (TipoMinerio -> TipoMinerio -> Bool
(TipoMinerio -> TipoMinerio -> Bool)
-> (TipoMinerio -> TipoMinerio -> Bool) -> Eq TipoMinerio
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: TipoMinerio -> TipoMinerio -> Bool
== :: TipoMinerio -> TipoMinerio -> Bool
$c/= :: TipoMinerio -> TipoMinerio -> Bool
/= :: TipoMinerio -> TipoMinerio -> Bool
Eq, Eq TipoMinerio
Eq TipoMinerio =>
(TipoMinerio -> TipoMinerio -> Ordering)
-> (TipoMinerio -> TipoMinerio -> Bool)
-> (TipoMinerio -> TipoMinerio -> Bool)
-> (TipoMinerio -> TipoMinerio -> Bool)
-> (TipoMinerio -> TipoMinerio -> Bool)
-> (TipoMinerio -> TipoMinerio -> TipoMinerio)
-> (TipoMinerio -> TipoMinerio -> TipoMinerio)
-> Ord TipoMinerio
TipoMinerio -> TipoMinerio -> Bool
TipoMinerio -> TipoMinerio -> Ordering
TipoMinerio -> TipoMinerio -> TipoMinerio
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: TipoMinerio -> TipoMinerio -> Ordering
compare :: TipoMinerio -> TipoMinerio -> Ordering
$c< :: TipoMinerio -> TipoMinerio -> Bool
< :: TipoMinerio -> TipoMinerio -> Bool
$c<= :: TipoMinerio -> TipoMinerio -> Bool
<= :: TipoMinerio -> TipoMinerio -> Bool
$c> :: TipoMinerio -> TipoMinerio -> Bool
> :: TipoMinerio -> TipoMinerio -> Bool
$c>= :: TipoMinerio -> TipoMinerio -> Bool
>= :: TipoMinerio -> TipoMinerio -> Bool
$cmax :: TipoMinerio -> TipoMinerio -> TipoMinerio
max :: TipoMinerio -> TipoMinerio -> TipoMinerio
$cmin :: TipoMinerio -> TipoMinerio -> TipoMinerio
min :: TipoMinerio -> TipoMinerio -> TipoMinerio
Ord, Int -> TipoMinerio -> ShowS
[TipoMinerio] -> ShowS
TipoMinerio -> String
(Int -> TipoMinerio -> ShowS)
-> (TipoMinerio -> String)
-> ([TipoMinerio] -> ShowS)
-> Show TipoMinerio
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> TipoMinerio -> ShowS
showsPrec :: Int -> TipoMinerio -> ShowS
$cshow :: TipoMinerio -> String
show :: TipoMinerio -> String
$cshowList :: [TipoMinerio] -> ShowS
showList :: [TipoMinerio] -> ShowS
Show, ReadPrec [TipoMinerio]
ReadPrec TipoMinerio
Int -> ReadS TipoMinerio
ReadS [TipoMinerio]
(Int -> ReadS TipoMinerio)
-> ReadS [TipoMinerio]
-> ReadPrec TipoMinerio
-> ReadPrec [TipoMinerio]
-> Read TipoMinerio
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
$creadsPrec :: Int -> ReadS TipoMinerio
readsPrec :: Int -> ReadS TipoMinerio
$creadList :: ReadS [TipoMinerio]
readList :: ReadS [TipoMinerio]
$creadPrec :: ReadPrec TipoMinerio
readPrec :: ReadPrec TipoMinerio
$creadListPrec :: ReadPrec [TipoMinerio]
readListPrec :: ReadPrec [TipoMinerio]
Read, Int -> TipoMinerio
TipoMinerio -> Int
TipoMinerio -> [TipoMinerio]
TipoMinerio -> TipoMinerio
TipoMinerio -> TipoMinerio -> [TipoMinerio]
TipoMinerio -> TipoMinerio -> TipoMinerio -> [TipoMinerio]
(TipoMinerio -> TipoMinerio)
-> (TipoMinerio -> TipoMinerio)
-> (Int -> TipoMinerio)
-> (TipoMinerio -> Int)
-> (TipoMinerio -> [TipoMinerio])
-> (TipoMinerio -> TipoMinerio -> [TipoMinerio])
-> (TipoMinerio -> TipoMinerio -> [TipoMinerio])
-> (TipoMinerio -> TipoMinerio -> TipoMinerio -> [TipoMinerio])
-> Enum TipoMinerio
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
$csucc :: TipoMinerio -> TipoMinerio
succ :: TipoMinerio -> TipoMinerio
$cpred :: TipoMinerio -> TipoMinerio
pred :: TipoMinerio -> TipoMinerio
$ctoEnum :: Int -> TipoMinerio
toEnum :: Int -> TipoMinerio
$cfromEnum :: TipoMinerio -> Int
fromEnum :: TipoMinerio -> Int
$cenumFrom :: TipoMinerio -> [TipoMinerio]
enumFrom :: TipoMinerio -> [TipoMinerio]
$cenumFromThen :: TipoMinerio -> TipoMinerio -> [TipoMinerio]
enumFromThen :: TipoMinerio -> TipoMinerio -> [TipoMinerio]
$cenumFromTo :: TipoMinerio -> TipoMinerio -> [TipoMinerio]
enumFromTo :: TipoMinerio -> TipoMinerio -> [TipoMinerio]
$cenumFromThenTo :: TipoMinerio -> TipoMinerio -> TipoMinerio -> [TipoMinerio]
enumFromThenTo :: TipoMinerio -> TipoMinerio -> TipoMinerio -> [TipoMinerio]
Enum, TipoMinerio
TipoMinerio -> TipoMinerio -> Bounded TipoMinerio
forall a. a -> a -> Bounded a
$cminBound :: TipoMinerio
minBound :: TipoMinerio
$cmaxBound :: TipoMinerio
maxBound :: TipoMinerio
Bounded)
data Bloco
=
Ar
|
Terra
|
Rocha
|
Minerio TipoMinerio
|
Lava
deriving (Bloco -> Bloco -> Bool
(Bloco -> Bloco -> Bool) -> (Bloco -> Bloco -> Bool) -> Eq Bloco
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Bloco -> Bloco -> Bool
== :: Bloco -> Bloco -> Bool
$c/= :: Bloco -> Bloco -> Bool
/= :: Bloco -> Bloco -> Bool
Eq, Eq Bloco
Eq Bloco =>
(Bloco -> Bloco -> Ordering)
-> (Bloco -> Bloco -> Bool)
-> (Bloco -> Bloco -> Bool)
-> (Bloco -> Bloco -> Bool)
-> (Bloco -> Bloco -> Bool)
-> (Bloco -> Bloco -> Bloco)
-> (Bloco -> Bloco -> Bloco)
-> Ord Bloco
Bloco -> Bloco -> Bool
Bloco -> Bloco -> Ordering
Bloco -> Bloco -> Bloco
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: Bloco -> Bloco -> Ordering
compare :: Bloco -> Bloco -> Ordering
$c< :: Bloco -> Bloco -> Bool
< :: Bloco -> Bloco -> Bool
$c<= :: Bloco -> Bloco -> Bool
<= :: Bloco -> Bloco -> Bool
$c> :: Bloco -> Bloco -> Bool
> :: Bloco -> Bloco -> Bool
$c>= :: Bloco -> Bloco -> Bool
>= :: Bloco -> Bloco -> Bool
$cmax :: Bloco -> Bloco -> Bloco
max :: Bloco -> Bloco -> Bloco
$cmin :: Bloco -> Bloco -> Bloco
min :: Bloco -> Bloco -> Bloco
Ord, Int -> Bloco -> ShowS
[Bloco] -> ShowS
Bloco -> String
(Int -> Bloco -> ShowS)
-> (Bloco -> String) -> ([Bloco] -> ShowS) -> Show Bloco
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Bloco -> ShowS
showsPrec :: Int -> Bloco -> ShowS
$cshow :: Bloco -> String
show :: Bloco -> String
$cshowList :: [Bloco] -> ShowS
showList :: [Bloco] -> ShowS
Show, ReadPrec [Bloco]
ReadPrec Bloco
Int -> ReadS Bloco
ReadS [Bloco]
(Int -> ReadS Bloco)
-> ReadS [Bloco]
-> ReadPrec Bloco
-> ReadPrec [Bloco]
-> Read Bloco
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
$creadsPrec :: Int -> ReadS Bloco
readsPrec :: Int -> ReadS Bloco
$creadList :: ReadS [Bloco]
readList :: ReadS [Bloco]
$creadPrec :: ReadPrec Bloco
readPrec :: ReadPrec Bloco
$creadListPrec :: ReadPrec [Bloco]
readListPrec :: ReadPrec [Bloco]
Read)
type Mapa = Matriz Bloco
data Escavadora = Escavadora
{
Escavadora -> Posicao
posicaoEscavadora :: Posicao
,
Escavadora -> Direcao
direcaoEscavadora :: Direcao
,
Escavadora -> Int
combustivelEscavadora :: Combustivel
,
Escavadora -> Int
depositoEscavadora :: Combustivel
,
Escavadora -> Int
vidaEscavadora :: Int
,
Escavadora -> Int
vidaMaximaEscavadora :: Int
,
Escavadora -> Int
brocaEscavadora :: Nivel
,
Escavadora -> [TipoMinerio]
cargaEscavadora :: [TipoMinerio]
,
Escavadora -> Int
capacidadeEscavadora :: Peso
,
Escavadora -> Int
quedaEscavadora :: Int
,
Escavadora -> Bool
voandoEscavadora :: Bool
,
Escavadora -> Int
dinamitesEscavadora :: Int
}
deriving (Escavadora -> Escavadora -> Bool
(Escavadora -> Escavadora -> Bool)
-> (Escavadora -> Escavadora -> Bool) -> Eq Escavadora
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Escavadora -> Escavadora -> Bool
== :: Escavadora -> Escavadora -> Bool
$c/= :: Escavadora -> Escavadora -> Bool
/= :: Escavadora -> Escavadora -> Bool
Eq, Eq Escavadora
Eq Escavadora =>
(Escavadora -> Escavadora -> Ordering)
-> (Escavadora -> Escavadora -> Bool)
-> (Escavadora -> Escavadora -> Bool)
-> (Escavadora -> Escavadora -> Bool)
-> (Escavadora -> Escavadora -> Bool)
-> (Escavadora -> Escavadora -> Escavadora)
-> (Escavadora -> Escavadora -> Escavadora)
-> Ord Escavadora
Escavadora -> Escavadora -> Bool
Escavadora -> Escavadora -> Ordering
Escavadora -> Escavadora -> Escavadora
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: Escavadora -> Escavadora -> Ordering
compare :: Escavadora -> Escavadora -> Ordering
$c< :: Escavadora -> Escavadora -> Bool
< :: Escavadora -> Escavadora -> Bool
$c<= :: Escavadora -> Escavadora -> Bool
<= :: Escavadora -> Escavadora -> Bool
$c> :: Escavadora -> Escavadora -> Bool
> :: Escavadora -> Escavadora -> Bool
$c>= :: Escavadora -> Escavadora -> Bool
>= :: Escavadora -> Escavadora -> Bool
$cmax :: Escavadora -> Escavadora -> Escavadora
max :: Escavadora -> Escavadora -> Escavadora
$cmin :: Escavadora -> Escavadora -> Escavadora
min :: Escavadora -> Escavadora -> Escavadora
Ord, Int -> Escavadora -> ShowS
[Escavadora] -> ShowS
Escavadora -> String
(Int -> Escavadora -> ShowS)
-> (Escavadora -> String)
-> ([Escavadora] -> ShowS)
-> Show Escavadora
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Escavadora -> ShowS
showsPrec :: Int -> Escavadora -> ShowS
$cshow :: Escavadora -> String
show :: Escavadora -> String
$cshowList :: [Escavadora] -> ShowS
showList :: [Escavadora] -> ShowS
Show, ReadPrec [Escavadora]
ReadPrec Escavadora
Int -> ReadS Escavadora
ReadS [Escavadora]
(Int -> ReadS Escavadora)
-> ReadS [Escavadora]
-> ReadPrec Escavadora
-> ReadPrec [Escavadora]
-> Read Escavadora
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
$creadsPrec :: Int -> ReadS Escavadora
readsPrec :: Int -> ReadS Escavadora
$creadList :: ReadS [Escavadora]
readList :: ReadS [Escavadora]
$creadPrec :: ReadPrec Escavadora
readPrec :: ReadPrec Escavadora
$creadListPrec :: ReadPrec [Escavadora]
readListPrec :: ReadPrec [Escavadora]
Read)
data TipoEdificio
=
Posto
|
Refinaria
|
Oficina
deriving (TipoEdificio -> TipoEdificio -> Bool
(TipoEdificio -> TipoEdificio -> Bool)
-> (TipoEdificio -> TipoEdificio -> Bool) -> Eq TipoEdificio
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: TipoEdificio -> TipoEdificio -> Bool
== :: TipoEdificio -> TipoEdificio -> Bool
$c/= :: TipoEdificio -> TipoEdificio -> Bool
/= :: TipoEdificio -> TipoEdificio -> Bool
Eq, Eq TipoEdificio
Eq TipoEdificio =>
(TipoEdificio -> TipoEdificio -> Ordering)
-> (TipoEdificio -> TipoEdificio -> Bool)
-> (TipoEdificio -> TipoEdificio -> Bool)
-> (TipoEdificio -> TipoEdificio -> Bool)
-> (TipoEdificio -> TipoEdificio -> Bool)
-> (TipoEdificio -> TipoEdificio -> TipoEdificio)
-> (TipoEdificio -> TipoEdificio -> TipoEdificio)
-> Ord TipoEdificio
TipoEdificio -> TipoEdificio -> Bool
TipoEdificio -> TipoEdificio -> Ordering
TipoEdificio -> TipoEdificio -> TipoEdificio
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: TipoEdificio -> TipoEdificio -> Ordering
compare :: TipoEdificio -> TipoEdificio -> Ordering
$c< :: TipoEdificio -> TipoEdificio -> Bool
< :: TipoEdificio -> TipoEdificio -> Bool
$c<= :: TipoEdificio -> TipoEdificio -> Bool
<= :: TipoEdificio -> TipoEdificio -> Bool
$c> :: TipoEdificio -> TipoEdificio -> Bool
> :: TipoEdificio -> TipoEdificio -> Bool
$c>= :: TipoEdificio -> TipoEdificio -> Bool
>= :: TipoEdificio -> TipoEdificio -> Bool
$cmax :: TipoEdificio -> TipoEdificio -> TipoEdificio
max :: TipoEdificio -> TipoEdificio -> TipoEdificio
$cmin :: TipoEdificio -> TipoEdificio -> TipoEdificio
min :: TipoEdificio -> TipoEdificio -> TipoEdificio
Ord, Int -> TipoEdificio -> ShowS
[TipoEdificio] -> ShowS
TipoEdificio -> String
(Int -> TipoEdificio -> ShowS)
-> (TipoEdificio -> String)
-> ([TipoEdificio] -> ShowS)
-> Show TipoEdificio
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> TipoEdificio -> ShowS
showsPrec :: Int -> TipoEdificio -> ShowS
$cshow :: TipoEdificio -> String
show :: TipoEdificio -> String
$cshowList :: [TipoEdificio] -> ShowS
showList :: [TipoEdificio] -> ShowS
Show, ReadPrec [TipoEdificio]
ReadPrec TipoEdificio
Int -> ReadS TipoEdificio
ReadS [TipoEdificio]
(Int -> ReadS TipoEdificio)
-> ReadS [TipoEdificio]
-> ReadPrec TipoEdificio
-> ReadPrec [TipoEdificio]
-> Read TipoEdificio
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
$creadsPrec :: Int -> ReadS TipoEdificio
readsPrec :: Int -> ReadS TipoEdificio
$creadList :: ReadS [TipoEdificio]
readList :: ReadS [TipoEdificio]
$creadPrec :: ReadPrec TipoEdificio
readPrec :: ReadPrec TipoEdificio
$creadListPrec :: ReadPrec [TipoEdificio]
readListPrec :: ReadPrec [TipoEdificio]
Read, Int -> TipoEdificio
TipoEdificio -> Int
TipoEdificio -> [TipoEdificio]
TipoEdificio -> TipoEdificio
TipoEdificio -> TipoEdificio -> [TipoEdificio]
TipoEdificio -> TipoEdificio -> TipoEdificio -> [TipoEdificio]
(TipoEdificio -> TipoEdificio)
-> (TipoEdificio -> TipoEdificio)
-> (Int -> TipoEdificio)
-> (TipoEdificio -> Int)
-> (TipoEdificio -> [TipoEdificio])
-> (TipoEdificio -> TipoEdificio -> [TipoEdificio])
-> (TipoEdificio -> TipoEdificio -> [TipoEdificio])
-> (TipoEdificio -> TipoEdificio -> TipoEdificio -> [TipoEdificio])
-> Enum TipoEdificio
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
$csucc :: TipoEdificio -> TipoEdificio
succ :: TipoEdificio -> TipoEdificio
$cpred :: TipoEdificio -> TipoEdificio
pred :: TipoEdificio -> TipoEdificio
$ctoEnum :: Int -> TipoEdificio
toEnum :: Int -> TipoEdificio
$cfromEnum :: TipoEdificio -> Int
fromEnum :: TipoEdificio -> Int
$cenumFrom :: TipoEdificio -> [TipoEdificio]
enumFrom :: TipoEdificio -> [TipoEdificio]
$cenumFromThen :: TipoEdificio -> TipoEdificio -> [TipoEdificio]
enumFromThen :: TipoEdificio -> TipoEdificio -> [TipoEdificio]
$cenumFromTo :: TipoEdificio -> TipoEdificio -> [TipoEdificio]
enumFromTo :: TipoEdificio -> TipoEdificio -> [TipoEdificio]
$cenumFromThenTo :: TipoEdificio -> TipoEdificio -> TipoEdificio -> [TipoEdificio]
enumFromThenTo :: TipoEdificio -> TipoEdificio -> TipoEdificio -> [TipoEdificio]
Enum, TipoEdificio
TipoEdificio -> TipoEdificio -> Bounded TipoEdificio
forall a. a -> a -> Bounded a
$cminBound :: TipoEdificio
minBound :: TipoEdificio
$cmaxBound :: TipoEdificio
maxBound :: TipoEdificio
Bounded)
data Edificio = Edificio
{
Edificio -> TipoEdificio
tipoEdificio :: TipoEdificio
,
Edificio -> Posicao
posicaoEdificio :: Posicao
}
deriving (Edificio -> Edificio -> Bool
(Edificio -> Edificio -> Bool)
-> (Edificio -> Edificio -> Bool) -> Eq Edificio
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Edificio -> Edificio -> Bool
== :: Edificio -> Edificio -> Bool
$c/= :: Edificio -> Edificio -> Bool
/= :: Edificio -> Edificio -> Bool
Eq, Eq Edificio
Eq Edificio =>
(Edificio -> Edificio -> Ordering)
-> (Edificio -> Edificio -> Bool)
-> (Edificio -> Edificio -> Bool)
-> (Edificio -> Edificio -> Bool)
-> (Edificio -> Edificio -> Bool)
-> (Edificio -> Edificio -> Edificio)
-> (Edificio -> Edificio -> Edificio)
-> Ord Edificio
Edificio -> Edificio -> Bool
Edificio -> Edificio -> Ordering
Edificio -> Edificio -> Edificio
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: Edificio -> Edificio -> Ordering
compare :: Edificio -> Edificio -> Ordering
$c< :: Edificio -> Edificio -> Bool
< :: Edificio -> Edificio -> Bool
$c<= :: Edificio -> Edificio -> Bool
<= :: Edificio -> Edificio -> Bool
$c> :: Edificio -> Edificio -> Bool
> :: Edificio -> Edificio -> Bool
$c>= :: Edificio -> Edificio -> Bool
>= :: Edificio -> Edificio -> Bool
$cmax :: Edificio -> Edificio -> Edificio
max :: Edificio -> Edificio -> Edificio
$cmin :: Edificio -> Edificio -> Edificio
min :: Edificio -> Edificio -> Edificio
Ord, Int -> Edificio -> ShowS
[Edificio] -> ShowS
Edificio -> String
(Int -> Edificio -> ShowS)
-> (Edificio -> String) -> ([Edificio] -> ShowS) -> Show Edificio
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Edificio -> ShowS
showsPrec :: Int -> Edificio -> ShowS
$cshow :: Edificio -> String
show :: Edificio -> String
$cshowList :: [Edificio] -> ShowS
showList :: [Edificio] -> ShowS
Show, ReadPrec [Edificio]
ReadPrec Edificio
Int -> ReadS Edificio
ReadS [Edificio]
(Int -> ReadS Edificio)
-> ReadS [Edificio]
-> ReadPrec Edificio
-> ReadPrec [Edificio]
-> Read Edificio
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
$creadsPrec :: Int -> ReadS Edificio
readsPrec :: Int -> ReadS Edificio
$creadList :: ReadS [Edificio]
readList :: ReadS [Edificio]
$creadPrec :: ReadPrec Edificio
readPrec :: ReadPrec Edificio
$creadListPrec :: ReadPrec [Edificio]
readListPrec :: ReadPrec [Edificio]
Read)
data Objeto = Dinamite
{
Objeto -> Posicao
posicaoDinamite :: Posicao
,
Objeto -> Int
tempoDinamite :: Ticks
}
deriving (Objeto -> Objeto -> Bool
(Objeto -> Objeto -> Bool)
-> (Objeto -> Objeto -> Bool) -> Eq Objeto
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Objeto -> Objeto -> Bool
== :: Objeto -> Objeto -> Bool
$c/= :: Objeto -> Objeto -> Bool
/= :: Objeto -> Objeto -> Bool
Eq, Eq Objeto
Eq Objeto =>
(Objeto -> Objeto -> Ordering)
-> (Objeto -> Objeto -> Bool)
-> (Objeto -> Objeto -> Bool)
-> (Objeto -> Objeto -> Bool)
-> (Objeto -> Objeto -> Bool)
-> (Objeto -> Objeto -> Objeto)
-> (Objeto -> Objeto -> Objeto)
-> Ord Objeto
Objeto -> Objeto -> Bool
Objeto -> Objeto -> Ordering
Objeto -> Objeto -> Objeto
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: Objeto -> Objeto -> Ordering
compare :: Objeto -> Objeto -> Ordering
$c< :: Objeto -> Objeto -> Bool
< :: Objeto -> Objeto -> Bool
$c<= :: Objeto -> Objeto -> Bool
<= :: Objeto -> Objeto -> Bool
$c> :: Objeto -> Objeto -> Bool
> :: Objeto -> Objeto -> Bool
$c>= :: Objeto -> Objeto -> Bool
>= :: Objeto -> Objeto -> Bool
$cmax :: Objeto -> Objeto -> Objeto
max :: Objeto -> Objeto -> Objeto
$cmin :: Objeto -> Objeto -> Objeto
min :: Objeto -> Objeto -> Objeto
Ord, Int -> Objeto -> ShowS
[Objeto] -> ShowS
Objeto -> String
(Int -> Objeto -> ShowS)
-> (Objeto -> String) -> ([Objeto] -> ShowS) -> Show Objeto
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Objeto -> ShowS
showsPrec :: Int -> Objeto -> ShowS
$cshow :: Objeto -> String
show :: Objeto -> String
$cshowList :: [Objeto] -> ShowS
showList :: [Objeto] -> ShowS
Show, ReadPrec [Objeto]
ReadPrec Objeto
Int -> ReadS Objeto
ReadS [Objeto]
(Int -> ReadS Objeto)
-> ReadS [Objeto]
-> ReadPrec Objeto
-> ReadPrec [Objeto]
-> Read Objeto
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
$creadsPrec :: Int -> ReadS Objeto
readsPrec :: Int -> ReadS Objeto
$creadList :: ReadS [Objeto]
readList :: ReadS [Objeto]
$creadPrec :: ReadPrec Objeto
readPrec :: ReadPrec Objeto
$creadListPrec :: ReadPrec [Objeto]
readListPrec :: ReadPrec [Objeto]
Read)
data Melhoria
=
Deposito Combustivel
|
Vida Int
|
Broca Nivel
|
Carga Peso
|
Dinamites Int
deriving (Melhoria -> Melhoria -> Bool
(Melhoria -> Melhoria -> Bool)
-> (Melhoria -> Melhoria -> Bool) -> Eq Melhoria
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Melhoria -> Melhoria -> Bool
== :: Melhoria -> Melhoria -> Bool
$c/= :: Melhoria -> Melhoria -> Bool
/= :: Melhoria -> Melhoria -> Bool
Eq, Eq Melhoria
Eq Melhoria =>
(Melhoria -> Melhoria -> Ordering)
-> (Melhoria -> Melhoria -> Bool)
-> (Melhoria -> Melhoria -> Bool)
-> (Melhoria -> Melhoria -> Bool)
-> (Melhoria -> Melhoria -> Bool)
-> (Melhoria -> Melhoria -> Melhoria)
-> (Melhoria -> Melhoria -> Melhoria)
-> Ord Melhoria
Melhoria -> Melhoria -> Bool
Melhoria -> Melhoria -> Ordering
Melhoria -> Melhoria -> Melhoria
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: Melhoria -> Melhoria -> Ordering
compare :: Melhoria -> Melhoria -> Ordering
$c< :: Melhoria -> Melhoria -> Bool
< :: Melhoria -> Melhoria -> Bool
$c<= :: Melhoria -> Melhoria -> Bool
<= :: Melhoria -> Melhoria -> Bool
$c> :: Melhoria -> Melhoria -> Bool
> :: Melhoria -> Melhoria -> Bool
$c>= :: Melhoria -> Melhoria -> Bool
>= :: Melhoria -> Melhoria -> Bool
$cmax :: Melhoria -> Melhoria -> Melhoria
max :: Melhoria -> Melhoria -> Melhoria
$cmin :: Melhoria -> Melhoria -> Melhoria
min :: Melhoria -> Melhoria -> Melhoria
Ord, Int -> Melhoria -> ShowS
[Melhoria] -> ShowS
Melhoria -> String
(Int -> Melhoria -> ShowS)
-> (Melhoria -> String) -> ([Melhoria] -> ShowS) -> Show Melhoria
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Melhoria -> ShowS
showsPrec :: Int -> Melhoria -> ShowS
$cshow :: Melhoria -> String
show :: Melhoria -> String
$cshowList :: [Melhoria] -> ShowS
showList :: [Melhoria] -> ShowS
Show, ReadPrec [Melhoria]
ReadPrec Melhoria
Int -> ReadS Melhoria
ReadS [Melhoria]
(Int -> ReadS Melhoria)
-> ReadS [Melhoria]
-> ReadPrec Melhoria
-> ReadPrec [Melhoria]
-> Read Melhoria
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
$creadsPrec :: Int -> ReadS Melhoria
readsPrec :: Int -> ReadS Melhoria
$creadList :: ReadS [Melhoria]
readList :: ReadS [Melhoria]
$creadPrec :: ReadPrec Melhoria
readPrec :: ReadPrec Melhoria
$creadListPrec :: ReadPrec [Melhoria]
readListPrec :: ReadPrec [Melhoria]
Read)
type Loja = [(Creditos, Melhoria)]
data Jogo = Jogo
{
Jogo -> Mapa
mapaJogo :: Mapa
,
Jogo -> Escavadora
escavadoraJogo :: Escavadora
,
Jogo -> [Edificio]
edificiosJogo :: [Edificio]
,
Jogo -> [Objeto]
objetosJogo :: [Objeto]
,
Jogo -> Int
creditosJogo :: Creditos
,
Jogo -> Loja
lojaJogo :: Loja
}
deriving (Jogo -> Jogo -> Bool
(Jogo -> Jogo -> Bool) -> (Jogo -> Jogo -> Bool) -> Eq Jogo
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Jogo -> Jogo -> Bool
== :: Jogo -> Jogo -> Bool
$c/= :: Jogo -> Jogo -> Bool
/= :: Jogo -> Jogo -> Bool
Eq, Eq Jogo
Eq Jogo =>
(Jogo -> Jogo -> Ordering)
-> (Jogo -> Jogo -> Bool)
-> (Jogo -> Jogo -> Bool)
-> (Jogo -> Jogo -> Bool)
-> (Jogo -> Jogo -> Bool)
-> (Jogo -> Jogo -> Jogo)
-> (Jogo -> Jogo -> Jogo)
-> Ord Jogo
Jogo -> Jogo -> Bool
Jogo -> Jogo -> Ordering
Jogo -> Jogo -> Jogo
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: Jogo -> Jogo -> Ordering
compare :: Jogo -> Jogo -> Ordering
$c< :: Jogo -> Jogo -> Bool
< :: Jogo -> Jogo -> Bool
$c<= :: Jogo -> Jogo -> Bool
<= :: Jogo -> Jogo -> Bool
$c> :: Jogo -> Jogo -> Bool
> :: Jogo -> Jogo -> Bool
$c>= :: Jogo -> Jogo -> Bool
>= :: Jogo -> Jogo -> Bool
$cmax :: Jogo -> Jogo -> Jogo
max :: Jogo -> Jogo -> Jogo
$cmin :: Jogo -> Jogo -> Jogo
min :: Jogo -> Jogo -> Jogo
Ord, Int -> Jogo -> ShowS
[Jogo] -> ShowS
Jogo -> String
(Int -> Jogo -> ShowS)
-> (Jogo -> String) -> ([Jogo] -> ShowS) -> Show Jogo
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Jogo -> ShowS
showsPrec :: Int -> Jogo -> ShowS
$cshow :: Jogo -> String
show :: Jogo -> String
$cshowList :: [Jogo] -> ShowS
showList :: [Jogo] -> ShowS
Show, ReadPrec [Jogo]
ReadPrec Jogo
Int -> ReadS Jogo
ReadS [Jogo]
(Int -> ReadS Jogo)
-> ReadS [Jogo] -> ReadPrec Jogo -> ReadPrec [Jogo] -> Read Jogo
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
$creadsPrec :: Int -> ReadS Jogo
readsPrec :: Int -> ReadS Jogo
$creadList :: ReadS [Jogo]
readList :: ReadS [Jogo]
$creadPrec :: ReadPrec Jogo
readPrec :: ReadPrec Jogo
$creadListPrec :: ReadPrec [Jogo]
readListPrec :: ReadPrec [Jogo]
Read)
data Jogada
=
Parado
|
Move Direcao
|
Vende
|
Abastece
|
Repara
|
Compra Int
|
LargaDinamite
deriving (Jogada -> Jogada -> Bool
(Jogada -> Jogada -> Bool)
-> (Jogada -> Jogada -> Bool) -> Eq Jogada
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Jogada -> Jogada -> Bool
== :: Jogada -> Jogada -> Bool
$c/= :: Jogada -> Jogada -> Bool
/= :: Jogada -> Jogada -> Bool
Eq, Eq Jogada
Eq Jogada =>
(Jogada -> Jogada -> Ordering)
-> (Jogada -> Jogada -> Bool)
-> (Jogada -> Jogada -> Bool)
-> (Jogada -> Jogada -> Bool)
-> (Jogada -> Jogada -> Bool)
-> (Jogada -> Jogada -> Jogada)
-> (Jogada -> Jogada -> Jogada)
-> Ord Jogada
Jogada -> Jogada -> Bool
Jogada -> Jogada -> Ordering
Jogada -> Jogada -> Jogada
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: Jogada -> Jogada -> Ordering
compare :: Jogada -> Jogada -> Ordering
$c< :: Jogada -> Jogada -> Bool
< :: Jogada -> Jogada -> Bool
$c<= :: Jogada -> Jogada -> Bool
<= :: Jogada -> Jogada -> Bool
$c> :: Jogada -> Jogada -> Bool
> :: Jogada -> Jogada -> Bool
$c>= :: Jogada -> Jogada -> Bool
>= :: Jogada -> Jogada -> Bool
$cmax :: Jogada -> Jogada -> Jogada
max :: Jogada -> Jogada -> Jogada
$cmin :: Jogada -> Jogada -> Jogada
min :: Jogada -> Jogada -> Jogada
Ord, Int -> Jogada -> ShowS
[Jogada] -> ShowS
Jogada -> String
(Int -> Jogada -> ShowS)
-> (Jogada -> String) -> ([Jogada] -> ShowS) -> Show Jogada
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Jogada -> ShowS
showsPrec :: Int -> Jogada -> ShowS
$cshow :: Jogada -> String
show :: Jogada -> String
$cshowList :: [Jogada] -> ShowS
showList :: [Jogada] -> ShowS
Show, ReadPrec [Jogada]
ReadPrec Jogada
Int -> ReadS Jogada
ReadS [Jogada]
(Int -> ReadS Jogada)
-> ReadS [Jogada]
-> ReadPrec Jogada
-> ReadPrec [Jogada]
-> Read Jogada
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
$creadsPrec :: Int -> ReadS Jogada
readsPrec :: Int -> ReadS Jogada
$creadList :: ReadS [Jogada]
readList :: ReadS [Jogada]
$creadPrec :: ReadPrec Jogada
readPrec :: ReadPrec Jogada
$creadListPrec :: ReadPrec [Jogada]
readListPrec :: ReadPrec [Jogada]
Read)
valorMinerio :: TipoMinerio -> Creditos
valorMinerio :: TipoMinerio -> Int
valorMinerio TipoMinerio
Ferro = Int
25
valorMinerio TipoMinerio
Bronze = Int
60
valorMinerio TipoMinerio
Prata = Int
150
valorMinerio TipoMinerio
Ouro = Int
400
valorMinerio TipoMinerio
Platina = Int
1000
valorMinerio TipoMinerio
Diamante = Int
2500
pesoMinerio :: TipoMinerio -> Peso
pesoMinerio :: TipoMinerio -> Int
pesoMinerio TipoMinerio
Ferro = Int
2
pesoMinerio TipoMinerio
Bronze = Int
2
pesoMinerio TipoMinerio
Prata = Int
3
pesoMinerio TipoMinerio
Ouro = Int
4
pesoMinerio TipoMinerio
Platina = Int
5
pesoMinerio TipoMinerio
Diamante = Int
1
durezaBloco :: Bloco -> Maybe Nivel
durezaBloco :: Bloco -> Maybe Int
durezaBloco Bloco
Ar = Maybe Int
forall a. Maybe a
Nothing
durezaBloco Bloco
Rocha = Maybe Int
forall a. Maybe a
Nothing
durezaBloco Bloco
Terra = Int -> Maybe Int
forall a. a -> Maybe a
Just Int
1
durezaBloco Bloco
Lava = Int -> Maybe Int
forall a. a -> Maybe a
Just Int
1
durezaBloco (Minerio TipoMinerio
Ferro) = Int -> Maybe Int
forall a. a -> Maybe a
Just Int
1
durezaBloco (Minerio TipoMinerio
Bronze) = Int -> Maybe Int
forall a. a -> Maybe a
Just Int
1
durezaBloco (Minerio TipoMinerio
Prata) = Int -> Maybe Int
forall a. a -> Maybe a
Just Int
2
durezaBloco (Minerio TipoMinerio
Ouro) = Int -> Maybe Int
forall a. a -> Maybe a
Just Int
2
durezaBloco (Minerio TipoMinerio
Platina) = Int -> Maybe Int
forall a. a -> Maybe a
Just Int
3
durezaBloco (Minerio TipoMinerio
Diamante) = Int -> Maybe Int
forall a. a -> Maybe a
Just Int
3
custoEscavacao :: Bloco -> Combustivel
custoEscavacao :: Bloco -> Int
custoEscavacao Bloco
b = Int -> Maybe Int -> Int
forall a. a -> Maybe a -> a
fromMaybe Int
0 (Bloco -> Maybe Int
durezaBloco Bloco
b)
custoMovimento :: Combustivel
custoMovimento :: Int
custoMovimento = Int
1
custoVoo :: Combustivel
custoVoo :: Int
custoVoo = Int
2
danoLava :: Int
danoLava :: Int
danoLava = Int
30
alturaQuedaSegura :: Int
alturaQuedaSegura :: Int
alturaQuedaSegura = Int
2
danoQueda :: Int
danoQueda :: Int
danoQueda = Int
10
precoCombustivel :: Creditos
precoCombustivel :: Int
precoCombustivel = Int
1
precoReparacao :: Creditos
precoReparacao :: Int
precoReparacao = Int
2
duracaoDinamite :: Ticks
duracaoDinamite :: Int
duracaoDinamite = Int
3
raioDinamite :: Int
raioDinamite :: Int
raioDinamite = Int
1
danoDinamite :: Int
danoDinamite :: Int
danoDinamite = Int
40
geraAleatorios :: Semente -> Int -> [Int]
geraAleatorios :: Int -> Int -> [Int]
geraAleatorios Int
s Int
c = Int -> [Int] -> [Int]
forall a. Int -> [a] -> [a]
take Int
c ([Int] -> [Int]) -> [Int] -> [Int]
forall a b. (a -> b) -> a -> b
$ StdGen -> [Int]
forall g. RandomGen g => g -> [Int]
forall a g. (Random a, RandomGen g) => g -> [a]
randoms (Int -> StdGen
mkStdGen Int
s)