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:
parent
092053bed8
commit
8efe8ea391
@ -33,6 +33,28 @@ defmodule Chess.MovesTest do
|
||||
assert moves == expected_moves
|
||||
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
|
||||
Chess.Board.default
|
||||
end
|
||||
|
||||
@ -15,7 +15,32 @@ defmodule Chess.Moves do
|
||||
_ -> [{file, rank - 1}]
|
||||
end
|
||||
%{type: :rook} ->
|
||||
[]
|
||||
rook_moves(board, square)
|
||||
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
|
||||
|
||||
Loading…
Reference in New Issue
Block a user