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

Add basic pawn move generation

This commit is contained in:
Daniel Barber 2018-03-09 16:09:26 -05:00
parent e23980537b
commit c64d40f99a
Signed by: danbarber
GPG Key ID: 931D8112E0103DD8
3 changed files with 73 additions and 0 deletions

14
lib/chess/moves.ex Normal file
View File

@ -0,0 +1,14 @@
defmodule Chess.Moves do
@moduledoc false
alias Chess.Moves.Pawn
def available(board, {file, rank}) do
piece = board["#{file},#{rank}"]
case piece do
%{type: :pawn} ->
Pawn.moves(board, {file, rank})
end
end
end

20
lib/chess/moves/pawn.ex Normal file
View File

@ -0,0 +1,20 @@
defmodule Chess.Moves.Pawn do
@moduledoc false
def moves(board, {file, rank}) do
piece = board["#{file},#{rank}"]
case piece do
%{colour: :white} ->
case rank do
1 -> [{file, rank + 1}, {file, rank + 2}]
_ -> [{file, rank + 1}]
end
%{colour: :black} ->
case rank do
6 -> [{file, rank - 1}, {file, rank - 2}]
_ -> [{file, rank - 1}]
end
end
end
end

View File

@ -0,0 +1,39 @@
defmodule Chess.Moves.PawnTest do
use Chess.DataCase
alias Chess.Moves.Pawn
test "white pawn can move forward one or two spaces" do
moves = Pawn.moves(board(), {4, 1})
expected_moves = [{4, 2}, {4, 3}]
assert moves == expected_moves
end
test "black pawn can move forward one or two spaces" do
moves = Pawn.moves(board(), {4, 6})
expected_moves = [{4, 5}, {4, 4}]
assert moves == expected_moves
end
test "white pawn not on starting square can move forward one space" do
board = %{"4,2" => %{type: :pawn, colour: :white}}
moves = Pawn.moves(board, {4, 2})
expected_moves = [{4, 3}]
assert moves == expected_moves
end
test "black pawn not on starting square can move forward one space" do
board = %{"4,5" => %{type: :pawn, colour: :black}}
moves = Pawn.moves(board, {4, 5})
expected_moves = [{4, 4}]
assert moves == expected_moves
end
def board do
Chess.Board.default
end
end