1
0
mirror of https://github.com/danbee/chess synced 2025-03-04 08:39:06 +00:00
chess/lib/chess/moves/pawn.ex
2018-03-13 22:20:48 -04:00

36 lines
844 B
Elixir

defmodule Chess.Moves.Pawn do
@moduledoc false
def moves(board, {file, rank}) do
board["#{file},#{rank}"]
|> _moves(board, {file, rank})
end
defp _moves(%{"colour" => "white"}, board, {file, rank}) do
cond do
obstruction?(board, {file, rank + 1}) -> []
rank == 1 -> [
{file, rank + 1} |
_moves(%{"colour" => "white"}, board, {file, rank + 1})
]
true -> [{file, rank + 1}]
end
end
defp _moves(%{"colour" => "black"}, board, {file, rank}) do
cond do
obstruction?(board, {file, rank - 1}) -> []
rank == 6 -> [
{file, rank - 1} |
_moves(%{"colour" => "black"}, board, {file, rank - 1})
]
true -> [{file, rank - 1}]
end
end
defp obstruction?(board, {file, rank}) do
board
|> Map.has_key?("#{file},#{rank}")
end
end