|
|
|
defmodule Tetris.Points do
|
|
|
|
|
|
|
|
def move_to_location(points, {x,y}) do
|
|
|
|
Enum.map(points,fn {dx, dy} -> {dx + x, dy + y} end )
|
|
|
|
end
|
|
|
|
|
|
|
|
def transpose(points) do
|
|
|
|
points
|
|
|
|
|> Enum.map( fn {x,y} -> {y,x} end )
|
|
|
|
end
|
|
|
|
def mirror(points) do
|
|
|
|
points
|
|
|
|
|> Enum.map( fn{x,y} -> {5-x,y} end )
|
|
|
|
end
|
|
|
|
def mirror(points, false), do: points
|
|
|
|
def mirror(points, true), do: mirror points
|
|
|
|
|
|
|
|
def flip(points) do
|
|
|
|
points
|
|
|
|
|> Enum.map( fn{x,y} -> {x,5-y} end )
|
|
|
|
end
|
|
|
|
|
|
|
|
def rotate_90(points) do
|
|
|
|
#by 90 degrees clockwise
|
|
|
|
points
|
|
|
|
|> transpose
|
|
|
|
|> mirror
|
|
|
|
end
|
|
|
|
|
|
|
|
def rotate(points, 0), do: points
|
|
|
|
def rotate(points, degrees) do
|
|
|
|
rotate(
|
|
|
|
rotate_90(points),
|
|
|
|
degrees - 90
|
|
|
|
)
|
|
|
|
end
|
|
|
|
|
|
|
|
def with_colour(points, colour) do
|
|
|
|
Enum.map(points,fn point -> add_colour(point, colour) end)
|
|
|
|
end
|
|
|
|
|
|
|
|
defp add_colour({_x, _y, _c} = point, _colour), do: point
|
|
|
|
defp add_colour({x,y}, colour), do: {x,y,colour}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#🔴
|
|
|
|
#⬜
|
|
|
|
#🟥
|
|
|
|
def to_string(points) do
|
|
|
|
map =
|
|
|
|
points
|
|
|
|
|> Enum.map(fn key -> {key, "🟥"} end)
|
|
|
|
|> Map.new()
|
|
|
|
|
|
|
|
for y <- (1 .. 4), x <- (1 .. 4) do
|
|
|
|
Map.get(map,{x,y},"⬜")
|
|
|
|
end
|
|
|
|
|> Enum.chunk_every(4)
|
|
|
|
|> Enum.map(&Enum.join/1)
|
|
|
|
|> Enum.join("\n")
|
|
|
|
end
|
|
|
|
|
|
|
|
def print(points) do
|
|
|
|
IO.puts __MODULE__.to_string(points)
|
|
|
|
points
|
|
|
|
end
|
|
|
|
end
|