1
0
mirror of https://github.com/danbee/chess synced 2025-03-04 08:39:06 +00:00

Add tests and logic for basic rook movement

This commit is contained in:
Daniel Barber 2017-01-19 12:21:46 +00:00
parent 092053bed8
commit 8efe8ea391
Signed by: danbarber
GPG Key ID: 931D8112E0103DD8
2 changed files with 48 additions and 1 deletions

View File

@ -33,6 +33,28 @@ defmodule Chess.MovesTest do
assert moves == expected_moves assert moves == expected_moves
end end
test "rooks can move horizontally or vertically" do
board = %{ "4,5" => %{type: :rook, colour: :white} }
moves = Moves.available(board, {4, 5})
expected_moves = Enum.sort([
{4, 0}, {4, 1}, {4, 2}, {4, 3}, {4, 4}, {4, 6}, {4, 7},
{0, 5}, {1, 5}, {2, 5}, {3, 5}, {5, 5}, {6, 5}, {7, 5},
])
assert moves == expected_moves
end
test "rook cannot move further than the edge" do
board = %{ "0,0" => %{type: :rook, colour: :white} }
moves = Moves.available(board, {0, 0})
expected_moves = Enum.sort([
{0, 1}, {0, 2}, {0, 3}, {0, 4}, {0, 5}, {0, 6}, {0, 7},
{1, 0}, {2, 0}, {3, 0}, {4, 0}, {5, 0}, {6, 0}, {7, 0},
])
assert moves == expected_moves
end
def board do def board do
Chess.Board.default Chess.Board.default
end end

View File

@ -15,7 +15,32 @@ defmodule Chess.Moves do
_ -> [{file, rank - 1}] _ -> [{file, rank - 1}]
end end
%{type: :rook} -> %{type: :rook} ->
[] rook_moves(board, square)
end end
end end
defp rook_moves(board, square) do
{file, rank} = square
moves = []
moves = cond do
file > 0 -> moves ++ Enum.map((file - 1)..0, fn (f) -> {f, rank} end)
true -> moves
end
moves = cond do
file < 7 -> moves ++ Enum.map((file + 1)..7, fn (f) -> {f, rank} end)
true -> moves
end
moves = cond do
rank > 0 -> moves ++ Enum.map((rank - 1)..0, fn (r) -> {file, r} end)
true -> moves
end
moves = cond do
rank < 7 -> moves ++ Enum.map((rank + 1)..7, fn (r) -> {file, r} end)
true -> moves
end
Enum.sort(moves)
end
end end