module Database where
import Graphics.Gloss
tam :: Float
tam :: Float
tam = 20
limiteX, limiteY :: Float
limiteX :: Float
limiteX = 140
limiteY :: Float
limiteY = 280
type Coord = (Float, Float)
data Tetramino = I | L | J | T | O | Z | S
deriving (Tetramino -> Tetramino -> Bool
(Tetramino -> Tetramino -> Bool)
-> (Tetramino -> Tetramino -> Bool) -> Eq Tetramino
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Tetramino -> Tetramino -> Bool
$c/= :: Tetramino -> Tetramino -> Bool
== :: Tetramino -> Tetramino -> Bool
$c== :: Tetramino -> Tetramino -> Bool
Eq, Int -> Tetramino
Tetramino -> Int
Tetramino -> [Tetramino]
Tetramino -> Tetramino
Tetramino -> Tetramino -> [Tetramino]
Tetramino -> Tetramino -> Tetramino -> [Tetramino]
(Tetramino -> Tetramino)
-> (Tetramino -> Tetramino)
-> (Int -> Tetramino)
-> (Tetramino -> Int)
-> (Tetramino -> [Tetramino])
-> (Tetramino -> Tetramino -> [Tetramino])
-> (Tetramino -> Tetramino -> [Tetramino])
-> (Tetramino -> Tetramino -> Tetramino -> [Tetramino])
-> Enum Tetramino
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
enumFromThenTo :: Tetramino -> Tetramino -> Tetramino -> [Tetramino]
$cenumFromThenTo :: Tetramino -> Tetramino -> Tetramino -> [Tetramino]
enumFromTo :: Tetramino -> Tetramino -> [Tetramino]
$cenumFromTo :: Tetramino -> Tetramino -> [Tetramino]
enumFromThen :: Tetramino -> Tetramino -> [Tetramino]
$cenumFromThen :: Tetramino -> Tetramino -> [Tetramino]
enumFrom :: Tetramino -> [Tetramino]
$cenumFrom :: Tetramino -> [Tetramino]
fromEnum :: Tetramino -> Int
$cfromEnum :: Tetramino -> Int
toEnum :: Int -> Tetramino
$ctoEnum :: Int -> Tetramino
pred :: Tetramino -> Tetramino
$cpred :: Tetramino -> Tetramino
succ :: Tetramino -> Tetramino
$csucc :: Tetramino -> Tetramino
Enum)
data Peca = Peca { Peca -> Tetramino
tipo :: Tetramino
, Peca -> Color
cor :: Color
, Peca -> Coord
foco :: Coord
, Peca -> [Coord]
blocosPeca :: [Coord] }
deriving Peca -> Peca -> Bool
(Peca -> Peca -> Bool) -> (Peca -> Peca -> Bool) -> Eq Peca
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Peca -> Peca -> Bool
$c/= :: Peca -> Peca -> Bool
== :: Peca -> Peca -> Bool
$c== :: Peca -> Peca -> Bool
Eq
data Mundo = Mundo { Mundo -> [(Coord, Color)]
blocosPintados :: [(Coord, Color)]
, Mundo -> Peca
pecaAtual :: Peca
, Mundo -> [Tetramino]
proxPecas :: [Tetramino]
, Mundo -> Int
pontuacao :: Int
, Mundo -> Int
timer :: Int
, Mundo -> Int
fileirasCompletas :: Int
, Mundo -> Bool
gameOver :: Bool }
deriving Mundo -> Mundo -> Bool
(Mundo -> Mundo -> Bool) -> (Mundo -> Mundo -> Bool) -> Eq Mundo
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Mundo -> Mundo -> Bool
$c/= :: Mundo -> Mundo -> Bool
== :: Mundo -> Mundo -> Bool
$c== :: Mundo -> Mundo -> Bool
Eq
data Direcao = Dir | Esq | Baixo | Rotaciona
criaPeca :: Tetramino -> Peca
criaPeca :: Tetramino -> Peca
criaPeca t :: Tetramino
t =
case Tetramino
t of
I -> Tetramino -> Color -> Coord -> [Coord] -> Peca
Peca Tetramino
I Color
cyan Coord
f [(Float
x, Float
yFloat -> Float -> Float
forall a. Num a => a -> a -> a
-Float
tam), Coord
f, (Float
x, Float
yFloat -> Float -> Float
forall a. Num a => a -> a -> a
+Float
tam), (Float
x, Float
yFloat -> Float -> Float
forall a. Num a => a -> a -> a
+2Float -> Float -> Float
forall a. Num a => a -> a -> a
*Float
tam)]
L -> Tetramino -> Color -> Coord -> [Coord] -> Peca
Peca Tetramino
L Color
orange Coord
f [(Float
x, Float
yFloat -> Float -> Float
forall a. Num a => a -> a -> a
+Float
tam), Coord
f, (Float
x, Float
yFloat -> Float -> Float
forall a. Num a => a -> a -> a
-Float
tam), (Float
xFloat -> Float -> Float
forall a. Num a => a -> a -> a
+Float
tam, Float
yFloat -> Float -> Float
forall a. Num a => a -> a -> a
-Float
tam)]
J -> Tetramino -> Color -> Coord -> [Coord] -> Peca
Peca Tetramino
J Color
blue Coord
f [(Float
x, Float
yFloat -> Float -> Float
forall a. Num a => a -> a -> a
+Float
tam), Coord
f, (Float
x, Float
yFloat -> Float -> Float
forall a. Num a => a -> a -> a
-Float
tam), (Float
xFloat -> Float -> Float
forall a. Num a => a -> a -> a
-Float
tam, Float
yFloat -> Float -> Float
forall a. Num a => a -> a -> a
-Float
tam)]
T -> Tetramino -> Color -> Coord -> [Coord] -> Peca
Peca Tetramino
T Color
violet Coord
f [(Float
xFloat -> Float -> Float
forall a. Num a => a -> a -> a
-Float
tam, Float
y), Coord
f, (Float
x, Float
yFloat -> Float -> Float
forall a. Num a => a -> a -> a
+Float
tam), (Float
xFloat -> Float -> Float
forall a. Num a => a -> a -> a
+Float
tam, Float
y )]
O -> Tetramino -> Color -> Coord -> [Coord] -> Peca
Peca Tetramino
O Color
yellow Coord
f [(Float
xFloat -> Float -> Float
forall a. Num a => a -> a -> a
-Float
tam, Float
y), Coord
f, (Float
x, Float
yFloat -> Float -> Float
forall a. Num a => a -> a -> a
-Float
tam), (Float
xFloat -> Float -> Float
forall a. Num a => a -> a -> a
-Float
tam, Float
yFloat -> Float -> Float
forall a. Num a => a -> a -> a
-Float
tam)]
Z -> Tetramino -> Color -> Coord -> [Coord] -> Peca
Peca Tetramino
Z Color
red Coord
f [(Float
xFloat -> Float -> Float
forall a. Num a => a -> a -> a
-Float
tam, Float
y), Coord
f, (Float
x, Float
yFloat -> Float -> Float
forall a. Num a => a -> a -> a
-Float
tam), (Float
xFloat -> Float -> Float
forall a. Num a => a -> a -> a
+Float
tam, Float
yFloat -> Float -> Float
forall a. Num a => a -> a -> a
-Float
tam)]
S -> Tetramino -> Color -> Coord -> [Coord] -> Peca
Peca Tetramino
S Color
green Coord
f [(Float
xFloat -> Float -> Float
forall a. Num a => a -> a -> a
+Float
tam, Float
y), Coord
f, (Float
x, Float
yFloat -> Float -> Float
forall a. Num a => a -> a -> a
-Float
tam), (Float
xFloat -> Float -> Float
forall a. Num a => a -> a -> a
-Float
tam, Float
yFloat -> Float -> Float
forall a. Num a => a -> a -> a
-Float
tam)]
where f :: Coord
f@(x :: Float
x, y :: Float
y) = (0, Float
y')
y' :: Float
y' = if Tetramino
t Tetramino -> Tetramino -> Bool
forall a. Eq a => a -> a -> Bool
== Tetramino
T
then 300
else 320