diff --git a/lib/chess/moves.ex b/lib/chess/moves.ex index c442a71..c61f03b 100644 --- a/lib/chess/moves.ex +++ b/lib/chess/moves.ex @@ -4,6 +4,7 @@ defmodule Chess.Moves do alias Chess.Moves.Pawn alias Chess.Moves.Rook alias Chess.Moves.Bishop + alias Chess.Moves.Queen def available(board, {file, rank}) do piece = board["#{file},#{rank}"] @@ -20,7 +21,7 @@ defmodule Chess.Moves do %{"type" => "king"} -> [] %{"type" => "queen"} -> - [] + Queen.moves(board, {file, rank}) end end end diff --git a/lib/chess/moves/queen.ex b/lib/chess/moves/queen.ex new file mode 100644 index 0000000..6061046 --- /dev/null +++ b/lib/chess/moves/queen.ex @@ -0,0 +1,11 @@ +defmodule Chess.Moves.Queen do + @moduledoc false + + alias Chess.Moves.Rook + alias Chess.Moves.Bishop + + def moves(board, {file, rank}) do + Rook.moves(board, {file, rank}) ++ + Bishop.moves(board, {file, rank}) + end +end diff --git a/test/chess/moves/queen_test.exs b/test/chess/moves/queen_test.exs new file mode 100644 index 0000000..ad5420c --- /dev/null +++ b/test/chess/moves/queen_test.exs @@ -0,0 +1,24 @@ +defmodule Chess.Moves.QueenTest do + use Chess.DataCase + + alias Chess.Moves.Queen + + test "queens can move in any direction" do + board = %{"4,5" => %{"type" => "rook", "colour" => "white"}} + moves = Queen.moves(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}, + {5, 6}, {6, 7}, + {5, 4}, {6, 3}, {7, 2}, + {3, 4}, {2, 3}, {1, 2}, {0, 1}, + {3, 6}, {2, 7}, + ]) + assert Enum.sort(moves) == expected_moves + end + + def board do + Chess.Board.default + end +end