module Desenhos where
import Graphics.Gloss
import Database
desenhaBloco :: Color -> Coord -> Picture
desenhaBloco :: Color -> Coord -> Picture
desenhaBloco c :: Color
c (x :: Float
x, y :: Float
y) = Float -> Float -> Picture -> Picture
translate Float
x Float
y (Picture -> Picture) -> Picture -> Picture
forall a b. (a -> b) -> a -> b
$ [Picture] -> Picture
pictures [ Color -> Picture -> Picture
color Color
c (Picture -> Picture) -> Picture -> Picture
forall a b. (a -> b) -> a -> b
$ Float -> Float -> Picture
rectangleSolid Float
tam Float
tam
, Color -> Picture -> Picture
color (Float -> Color
greyN 0.3) (Picture -> Picture) -> Picture -> Picture
forall a b. (a -> b) -> a -> b
$ Float -> Float -> Picture
rectangleWire Float
tam Float
tam]
desenhaPeca :: Peca -> Picture
desenhaPeca :: Peca -> Picture
desenhaPeca (Peca _ c :: Color
c _ bs :: [Coord]
bs) = [Picture] -> Picture
pictures ([Picture] -> Picture) -> [Picture] -> Picture
forall a b. (a -> b) -> a -> b
$ (Coord -> Picture) -> [Coord] -> [Picture]
forall a b. (a -> b) -> [a] -> [b]
map (Color -> Coord -> Picture
desenhaBloco Color
c) [Coord]
bs
seta :: Picture
seta :: Picture
seta = [Picture] -> Picture
pictures ([Picture] -> Picture) -> [Picture] -> Picture
forall a b. (a -> b) -> a -> b
$ [Color -> Picture -> Picture
color (Float -> Color
greyN 0.2) (Picture -> Picture) -> Picture -> Picture
forall a b. (a -> b) -> a -> b
$ Float -> Float -> Picture
rectangleSolid 30 30]
[Picture] -> [Picture] -> [Picture]
forall a. [a] -> [a] -> [a]
++ [Color -> Picture -> Picture
color Color
black (Picture -> Picture) -> Picture -> Picture
forall a b. (a -> b) -> a -> b
$ [Coord] -> Picture
line [(0,-10), (0,10)]]
[Picture] -> [Picture] -> [Picture]
forall a. [a] -> [a] -> [a]
++ [Color -> Picture -> Picture
color Color
black (Picture -> Picture) -> Picture -> Picture
forall a b. (a -> b) -> a -> b
$ [Coord] -> Picture
polygon [(5,0), (0, 10), (-5, 0)]]
instrucoes :: Picture
instrucoes :: Picture
instrucoes = [Picture] -> Picture
pictures ([Picture] -> Picture) -> [Picture] -> Picture
forall a b. (a -> b) -> a -> b
$ [Float -> Float -> Picture -> Picture
translate (-280) (-25) Picture
seta]
[Picture] -> [Picture] -> [Picture]
forall a. [a] -> [a] -> [a]
++ [Float -> Float -> Picture -> Picture
translate (-315) (-60) (Picture -> Picture) -> Picture -> Picture
forall a b. (a -> b) -> a -> b
$ Float -> Picture -> Picture
rotate (-90) Picture
seta]
[Picture] -> [Picture] -> [Picture]
forall a. [a] -> [a] -> [a]
++ [Float -> Float -> Picture -> Picture
translate (-280) (-60) (Picture -> Picture) -> Picture -> Picture
forall a b. (a -> b) -> a -> b
$ Float -> Picture -> Picture
rotate 180 Picture
seta]
[Picture] -> [Picture] -> [Picture]
forall a. [a] -> [a] -> [a]
++ [Float -> Float -> Picture -> Picture
translate (-245) (-60) (Picture -> Picture) -> Picture -> Picture
forall a b. (a -> b) -> a -> b
$ Float -> Picture -> Picture
rotate 90 Picture
seta]
[Picture] -> [Picture] -> [Picture]
forall a. [a] -> [a] -> [a]
++ [Float -> Float -> Picture -> Picture
translate (-280) (-180) (Picture -> Picture) -> Picture -> Picture
forall a b. (a -> b) -> a -> b
$ Color -> Picture -> Picture
color (Float -> Color
greyN 0.2) (Picture -> Picture) -> Picture -> Picture
forall a b. (a -> b) -> a -> b
$ Float -> Float -> Picture
rectangleSolid 180 30]
[Picture] -> [Picture] -> [Picture]
forall a. [a] -> [a] -> [a]
++ [Float -> Float -> Picture -> Picture
translate (-355) (-190) (Float -> Float -> Picture -> Picture
scale 0.14 0.14 (Picture -> Picture) -> Picture -> Picture
forall a b. (a -> b) -> a -> b
$ Color -> Picture -> Picture
color Color
black (Picture -> Picture) -> Picture -> Picture
forall a b. (a -> b) -> a -> b
$ String -> Picture
Text "Barra de espaco")]
[Picture] -> [Picture] -> [Picture]
forall a. [a] -> [a] -> [a]
++ [Float -> Float -> Picture -> Picture
translate (-405) (-55) (Float -> Float -> Picture -> Picture
scale 0.1 0.1 (Picture -> Picture) -> Picture -> Picture
forall a b. (a -> b) -> a -> b
$ Color -> Picture -> Picture
color (Float -> Color
greyN 0.5) (Picture -> Picture) -> Picture -> Picture
forall a b. (a -> b) -> a -> b
$ String -> Picture
Text "Move para")]
[Picture] -> [Picture] -> [Picture]
forall a. [a] -> [a] -> [a]
++ [Float -> Float -> Picture -> Picture
translate (-400) (-70) (Float -> Float -> Picture -> Picture
scale 0.1 0.1 (Picture -> Picture) -> Picture -> Picture
forall a b. (a -> b) -> a -> b
$ Color -> Picture -> Picture
color (Float -> Color
greyN 0.5) (Picture -> Picture) -> Picture -> Picture
forall a b. (a -> b) -> a -> b
$ String -> Picture
Text "esquerda")]
[Picture] -> [Picture] -> [Picture]
forall a. [a] -> [a] -> [a]
++ [Float -> Float -> Picture -> Picture
translate (-222) (-55) (Float -> Float -> Picture -> Picture
scale 0.1 0.1 (Picture -> Picture) -> Picture -> Picture
forall a b. (a -> b) -> a -> b
$ Color -> Picture -> Picture
color (Float -> Color
greyN 0.5) (Picture -> Picture) -> Picture -> Picture
forall a b. (a -> b) -> a -> b
$ String -> Picture
Text "Move para")]
[Picture] -> [Picture] -> [Picture]
forall a. [a] -> [a] -> [a]
++ [Float -> Float -> Picture -> Picture
translate (-210) (-70) (Float -> Float -> Picture -> Picture
scale 0.1 0.1 (Picture -> Picture) -> Picture -> Picture
forall a b. (a -> b) -> a -> b
$ Color -> Picture -> Picture
color (Float -> Color
greyN 0.5) (Picture -> Picture) -> Picture -> Picture
forall a b. (a -> b) -> a -> b
$ String -> Picture
Text "direita")]
[Picture] -> [Picture] -> [Picture]
forall a. [a] -> [a] -> [a]
++ [Float -> Float -> Picture -> Picture
translate (-310) 10 (Float -> Float -> Picture -> Picture
scale 0.1 0.1 (Picture -> Picture) -> Picture -> Picture
forall a b. (a -> b) -> a -> b
$ Color -> Picture -> Picture
color (Float -> Color
greyN 0.5) (Picture -> Picture) -> Picture -> Picture
forall a b. (a -> b) -> a -> b
$ String -> Picture
Text "Rotaciona")]
[Picture] -> [Picture] -> [Picture]
forall a. [a] -> [a] -> [a]
++ [Float -> Float -> Picture -> Picture
translate (-295) (-5) (Float -> Float -> Picture -> Picture
scale 0.1 0.1 (Picture -> Picture) -> Picture -> Picture
forall a b. (a -> b) -> a -> b
$ Color -> Picture -> Picture
color (Float -> Color
greyN 0.5) (Picture -> Picture) -> Picture -> Picture
forall a b. (a -> b) -> a -> b
$ String -> Picture
Text "peca")]
[Picture] -> [Picture] -> [Picture]
forall a. [a] -> [a] -> [a]
++ [Float -> Float -> Picture -> Picture
translate (-315) (-90) (Float -> Float -> Picture -> Picture
scale 0.1 0.1 (Picture -> Picture) -> Picture -> Picture
forall a b. (a -> b) -> a -> b
$ Color -> Picture -> Picture
color (Float -> Color
greyN 0.5) (Picture -> Picture) -> Picture -> Picture
forall a b. (a -> b) -> a -> b
$ String -> Picture
Text "Move para")]
[Picture] -> [Picture] -> [Picture]
forall a. [a] -> [a] -> [a]
++ [Float -> Float -> Picture -> Picture
translate (-295) (-105) (Float -> Float -> Picture -> Picture
scale 0.1 0.1 (Picture -> Picture) -> Picture -> Picture
forall a b. (a -> b) -> a -> b
$ Color -> Picture -> Picture
color (Float -> Color
greyN 0.5) (Picture -> Picture) -> Picture -> Picture
forall a b. (a -> b) -> a -> b
$ String -> Picture
Text "baixo")]
[Picture] -> [Picture] -> [Picture]
forall a. [a] -> [a] -> [a]
++ [Float -> Float -> Picture -> Picture
translate (-345) (-210) (Float -> Float -> Picture -> Picture
scale 0.1 0.1 (Picture -> Picture) -> Picture -> Picture
forall a b. (a -> b) -> a -> b
$ Color -> Picture -> Picture
color (Float -> Color
greyN 0.5) (Picture -> Picture) -> Picture -> Picture
forall a b. (a -> b) -> a -> b
$ String -> Picture
Text "Move para o fundo")]
gameOverTela :: Mundo -> Picture
gameOverTela :: Mundo -> Picture
gameOverTela m :: Mundo
m
| Mundo -> Bool
gameOver Mundo
m = [Picture] -> Picture
pictures ([Picture] -> Picture) -> [Picture] -> Picture
forall a b. (a -> b) -> a -> b
$ [Color -> Picture -> Picture
color (Float -> Color
greyN 0.2) (Picture -> Picture) -> Picture -> Picture
forall a b. (a -> b) -> a -> b
$ Float -> Float -> Picture
rectangleSolid 580 300]
[Picture] -> [Picture] -> [Picture]
forall a. [a] -> [a] -> [a]
++ [Color -> Picture -> Picture
color (Float -> Color
greyN 0.4) (Picture -> Picture) -> Picture -> Picture
forall a b. (a -> b) -> a -> b
$ Float -> Float -> Picture
rectangleWire 580 300]
[Picture] -> [Picture] -> [Picture]
forall a. [a] -> [a] -> [a]
++ [Float -> Float -> Picture -> Picture
translate (-220) 40 (Float -> Float -> Picture -> Picture
scale 0.55 0.55 (Picture -> Picture) -> Picture -> Picture
forall a b. (a -> b) -> a -> b
$ Color -> Picture -> Picture
color Color
red (Picture -> Picture) -> Picture -> Picture
forall a b. (a -> b) -> a -> b
$ String -> Picture
Text "Voce perdeu!")]
[Picture] -> [Picture] -> [Picture]
forall a. [a] -> [a] -> [a]
++ [Float -> Float -> Picture -> Picture
translate (-200) (-60) (Float -> Float -> Picture -> Picture
scale 0.3 0.3 (Picture -> Picture) -> Picture -> Picture
forall a b. (a -> b) -> a -> b
$ Color -> Picture -> Picture
color Color
white
(Picture -> Picture) -> Picture -> Picture
forall a b. (a -> b) -> a -> b
$ String -> Picture
Text ("Pontuacao final: " String -> String -> String
forall a. [a] -> [a] -> [a]
++ Int -> String
forall a. Show a => a -> String
show (Mundo -> Int
pontuacao Mundo
m)))]
| Bool
otherwise = Picture
blank
desenhaMundo :: Mundo -> Picture
desenhaMundo :: Mundo -> Picture
desenhaMundo m :: Mundo
m = [Picture] -> Picture
pictures ([Picture] -> Picture) -> [Picture] -> Picture
forall a b. (a -> b) -> a -> b
$ ((Coord, Color) -> Picture) -> [(Coord, Color)] -> [Picture]
forall a b. (a -> b) -> [a] -> [b]
map (\(x :: Coord
x, y :: Color
y) -> Color -> Coord -> Picture
desenhaBloco Color
y Coord
x) (Mundo -> [(Coord, Color)]
blocosPintados Mundo
m)
[Picture] -> [Picture] -> [Picture]
forall a. [a] -> [a] -> [a]
++ [Color -> Picture -> Picture
color (Float -> Color
greyN 0.5) (Picture -> Picture) -> Picture -> Picture
forall a b. (a -> b) -> a -> b
$ Float -> Float -> Picture
rectangleWire 300 580]
[Picture] -> [Picture] -> [Picture]
forall a. [a] -> [a] -> [a]
++ [Peca -> Picture
desenhaPeca Peca
proxP]
[Picture] -> [Picture] -> [Picture]
forall a. [a] -> [a] -> [a]
++ [Float -> Float -> Picture -> Picture
translate (-400) 200 ( Float -> Float -> Picture -> Picture
scale 0.2 0.2
(Picture -> Picture) -> Picture -> Picture
forall a b. (a -> b) -> a -> b
$ Color -> Picture -> Picture
color (Float -> Color
greyN 0.5)
(Picture -> Picture) -> Picture -> Picture
forall a b. (a -> b) -> a -> b
$ String -> Picture
Text String
pont)]
[Picture] -> [Picture] -> [Picture]
forall a. [a] -> [a] -> [a]
++ [Float -> Float -> Picture -> Picture
translate 160 200 ( Float -> Float -> Picture -> Picture
scale 0.2 0.2
(Picture -> Picture) -> Picture -> Picture
forall a b. (a -> b) -> a -> b
$ Color -> Picture -> Picture
color (Float -> Color
greyN 0.5)
(Picture -> Picture) -> Picture -> Picture
forall a b. (a -> b) -> a -> b
$ String -> Picture
Text "Proxima peca:")]
[Picture] -> [Picture] -> [Picture]
forall a. [a] -> [a] -> [a]
++ [Picture
instrucoes]
[Picture] -> [Picture] -> [Picture]
forall a. [a] -> [a] -> [a]
++ [Mundo -> Picture
gameOverTela Mundo
m]
where proxP :: Peca
proxP = Tetramino -> Color -> Coord -> [Coord] -> Peca
Peca (Peca -> Tetramino
tipo Peca
proxP') (Peca -> Color
cor Peca
proxP') (0,0) ((Coord -> Coord) -> [Coord] -> [Coord]
forall a b. (a -> b) -> [a] -> [b]
map (\(x :: Float
x,y :: Float
y) -> (Float
xFloat -> Float -> Float
forall a. Num a => a -> a -> a
+260, Float
yFloat -> Float -> Float
forall a. Num a => a -> a -> a
-190)) (Peca -> [Coord]
blocosPeca Peca
proxP'))
proxP' :: Peca
proxP' = Tetramino -> Peca
criaPeca (Tetramino -> Peca) -> Tetramino -> Peca
forall a b. (a -> b) -> a -> b
$ [Tetramino] -> Tetramino
forall a. [a] -> a
head ([Tetramino] -> Tetramino) -> [Tetramino] -> Tetramino
forall a b. (a -> b) -> a -> b
$ Mundo -> [Tetramino]
proxPecas Mundo
m
pont :: String
pont = "Pontuacao: " String -> String -> String
forall a. [a] -> [a] -> [a]
++ Int -> String
forall a. Show a => a -> String
show (Mundo -> Int
pontuacao Mundo
m)