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
|
||||
|
||||
def piece(board, {file, rank}) do
|
||||
board["#{file},#{rank}"]
|
||||
end
|
||||
|
||||
def move_piece(board, move_params) do
|
||||
[from_file, from_rank] = move_params["from"]
|
||||
[to_file, to_rank] = move_params["to"]
|
||||
|
||||
@ -1,6 +1,8 @@
|
||||
defmodule Chess.Moves do
|
||||
@moduledoc false
|
||||
|
||||
alias Chess.Board
|
||||
|
||||
alias Chess.Moves.Pieces.Pawn
|
||||
alias Chess.Moves.Pieces.Bishop
|
||||
alias Chess.Moves.Pieces.Knight
|
||||
@ -9,7 +11,9 @@ defmodule Chess.Moves do
|
||||
alias Chess.Moves.Pieces.King
|
||||
|
||||
def available(board, {file, rank}) do
|
||||
piece = board["#{file},#{rank}"]
|
||||
piece =
|
||||
board
|
||||
|> Board.piece({file, rank})
|
||||
|
||||
case piece do
|
||||
%{"type" => "pawn"} ->
|
||||
|
||||
@ -6,10 +6,13 @@ defmodule Chess.Moves.Generator do
|
||||
like this.
|
||||
"""
|
||||
|
||||
alias Chess.Board
|
||||
|
||||
# `movement` is either a vector (bishop, rook, queen)
|
||||
# or a pattern (king, knight)
|
||||
def moves(board, {file, rank}, movement) do
|
||||
board["#{file},#{rank}"]
|
||||
board
|
||||
|> Board.piece({file, rank})
|
||||
|> Map.get("colour")
|
||||
|> _moves(board, {file, rank}, movement)
|
||||
end
|
||||
@ -52,12 +55,17 @@ defmodule Chess.Moves.Generator do
|
||||
end
|
||||
|
||||
defp can_capture_piece?(colour, board, {file, rank}) do
|
||||
piece = board["#{file},#{rank}"]
|
||||
piece =
|
||||
board
|
||||
|> Board.piece({file, rank})
|
||||
|
||||
piece && piece["colour"] != colour
|
||||
end
|
||||
|
||||
defp obstruction?(colour, board, {file, rank}) do
|
||||
piece = board["#{file},#{rank}"]
|
||||
piece =
|
||||
board
|
||||
|> Board.piece({file, rank})
|
||||
piece && piece["colour"] == colour
|
||||
end
|
||||
end
|
||||
|
||||
@ -1,9 +1,13 @@
|
||||
defmodule Chess.Moves.Piece do
|
||||
@moduledoc false
|
||||
|
||||
alias Chess.Board
|
||||
alias Chess.Moves.Generator
|
||||
alias Chess.Moves.Pieces.Knight
|
||||
|
||||
def find(board, piece) do
|
||||
end
|
||||
|
||||
def attacked?(board, {file, rank}) do
|
||||
attacked_by_rook_or_queen?(board, {file, rank}) ||
|
||||
attacked_by_bishop_or_queen?(board, {file, rank}) ||
|
||||
@ -48,7 +52,9 @@ defmodule Chess.Moves.Piece do
|
||||
end
|
||||
|
||||
defp match_piece(board, {file, rank}, piece_type) do
|
||||
piece = board["#{file},#{rank}"]
|
||||
piece =
|
||||
board
|
||||
|> Board.piece({file, rank})
|
||||
|
||||
piece["type"] == piece_type
|
||||
end
|
||||
|
||||
@ -1,20 +1,24 @@
|
||||
defmodule Chess.Moves.Pieces.Pawn do
|
||||
@moduledoc false
|
||||
|
||||
alias Chess.Board
|
||||
|
||||
def moves(board, {file, rank}) do
|
||||
normal_moves(board, {file, rank}) ++
|
||||
capture_moves(board, {file, rank})
|
||||
end
|
||||
|
||||
defp normal_moves(board, {file, rank}) do
|
||||
board["#{file},#{rank}"]
|
||||
board
|
||||
|> Board.piece({file, rank})
|
||||
|> Map.get("colour")
|
||||
|> _moves(board, {file, rank})
|
||||
end
|
||||
|
||||
defp capture_moves(board, {file, rank}) do
|
||||
colour =
|
||||
board["#{file},#{rank}"]
|
||||
board
|
||||
|> Board.piece({file, rank})
|
||||
|> Map.get("colour")
|
||||
|
||||
colour
|
||||
@ -62,7 +66,10 @@ defmodule Chess.Moves.Pieces.Pawn do
|
||||
end
|
||||
|
||||
defp can_capture_piece?(colour, board, {file, rank}) do
|
||||
piece = board["#{file},#{rank}"]
|
||||
piece =
|
||||
board
|
||||
|> Board.piece({file, rank})
|
||||
|
||||
piece && piece["colour"] != colour
|
||||
end
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user