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:
parent
6c944243fb
commit
92b0b08298
@ -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"]
|
||||||
|
|||||||
@ -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"} ->
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user