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
|
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
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user