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

Move piece getter to board module

This commit is contained in:
Daniel Barber 2018-03-18 16:54:38 -04:00
parent 6c944243fb
commit 92b0b08298
Signed by: danbarber
GPG Key ID: 931D8112E0103DD8
5 changed files with 37 additions and 8 deletions

View File

@ -9,6 +9,10 @@ defmodule Chess.Board do
end) end)
end end
def piece(board, {file, rank}) do
board["#{file},#{rank}"]
end
def move_piece(board, move_params) do def move_piece(board, move_params) do
[from_file, from_rank] = move_params["from"] [from_file, from_rank] = move_params["from"]
[to_file, to_rank] = move_params["to"] [to_file, to_rank] = move_params["to"]

View File

@ -1,6 +1,8 @@
defmodule Chess.Moves do defmodule Chess.Moves do
@moduledoc false @moduledoc false
alias Chess.Board
alias Chess.Moves.Pieces.Pawn alias Chess.Moves.Pieces.Pawn
alias Chess.Moves.Pieces.Bishop alias Chess.Moves.Pieces.Bishop
alias Chess.Moves.Pieces.Knight alias Chess.Moves.Pieces.Knight
@ -9,7 +11,9 @@ defmodule Chess.Moves do
alias Chess.Moves.Pieces.King alias Chess.Moves.Pieces.King
def available(board, {file, rank}) do def available(board, {file, rank}) do
piece = board["#{file},#{rank}"] piece =
board
|> Board.piece({file, rank})
case piece do case piece do
%{"type" => "pawn"} -> %{"type" => "pawn"} ->

View File

@ -6,10 +6,13 @@ defmodule Chess.Moves.Generator do
like this. like this.
""" """
alias Chess.Board
# `movement` is either a vector (bishop, rook, queen) # `movement` is either a vector (bishop, rook, queen)
# or a pattern (king, knight) # or a pattern (king, knight)
def moves(board, {file, rank}, movement) do def moves(board, {file, rank}, movement) do
board["#{file},#{rank}"] board
|> Board.piece({file, rank})
|> Map.get("colour") |> Map.get("colour")
|> _moves(board, {file, rank}, movement) |> _moves(board, {file, rank}, movement)
end end
@ -52,12 +55,17 @@ defmodule Chess.Moves.Generator do
end end
defp can_capture_piece?(colour, board, {file, rank}) do defp can_capture_piece?(colour, board, {file, rank}) do
piece = board["#{file},#{rank}"] piece =
board
|> Board.piece({file, rank})
piece && piece["colour"] != colour piece && piece["colour"] != colour
end end
defp obstruction?(colour, board, {file, rank}) do defp obstruction?(colour, board, {file, rank}) do
piece = board["#{file},#{rank}"] piece =
board
|> Board.piece({file, rank})
piece && piece["colour"] == colour piece && piece["colour"] == colour
end end
end end

View File

@ -1,9 +1,13 @@
defmodule Chess.Moves.Piece do defmodule Chess.Moves.Piece do
@moduledoc false @moduledoc false
alias Chess.Board
alias Chess.Moves.Generator alias Chess.Moves.Generator
alias Chess.Moves.Pieces.Knight alias Chess.Moves.Pieces.Knight
def find(board, piece) do
end
def attacked?(board, {file, rank}) do def attacked?(board, {file, rank}) do
attacked_by_rook_or_queen?(board, {file, rank}) || attacked_by_rook_or_queen?(board, {file, rank}) ||
attacked_by_bishop_or_queen?(board, {file, rank}) || attacked_by_bishop_or_queen?(board, {file, rank}) ||
@ -48,7 +52,9 @@ defmodule Chess.Moves.Piece do
end end
defp match_piece(board, {file, rank}, piece_type) do defp match_piece(board, {file, rank}, piece_type) do
piece = board["#{file},#{rank}"] piece =
board
|> Board.piece({file, rank})
piece["type"] == piece_type piece["type"] == piece_type
end end

View File

@ -1,20 +1,24 @@
defmodule Chess.Moves.Pieces.Pawn do defmodule Chess.Moves.Pieces.Pawn do
@moduledoc false @moduledoc false
alias Chess.Board
def moves(board, {file, rank}) do def moves(board, {file, rank}) do
normal_moves(board, {file, rank}) ++ normal_moves(board, {file, rank}) ++
capture_moves(board, {file, rank}) capture_moves(board, {file, rank})
end end
defp normal_moves(board, {file, rank}) do defp normal_moves(board, {file, rank}) do
board["#{file},#{rank}"] board
|> Board.piece({file, rank})
|> Map.get("colour") |> Map.get("colour")
|> _moves(board, {file, rank}) |> _moves(board, {file, rank})
end end
defp capture_moves(board, {file, rank}) do defp capture_moves(board, {file, rank}) do
colour = colour =
board["#{file},#{rank}"] board
|> Board.piece({file, rank})
|> Map.get("colour") |> Map.get("colour")
colour colour
@ -62,7 +66,10 @@ defmodule Chess.Moves.Pieces.Pawn do
end end
defp can_capture_piece?(colour, board, {file, rank}) do defp can_capture_piece?(colour, board, {file, rank}) do
piece = board["#{file},#{rank}"] piece =
board
|> Board.piece({file, rank})
piece && piece["colour"] != colour piece && piece["colour"] != colour
end end