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

Add moves model and tests for pawns

This commit is contained in:
Daniel Barber 2017-01-18 18:20:10 +00:00
parent 570f6cf8c6
commit 77475cf458
Signed by: danbarber
GPG Key ID: 931D8112E0103DD8
2 changed files with 60 additions and 0 deletions

View File

@ -0,0 +1,39 @@
defmodule Chess.MovesTest do
use Chess.ModelCase
alias Chess.Moves
test "white pawn can move forward one or two spaces" do
moves = Moves.available(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 = Moves.available(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 = Moves.available(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 = Moves.available(board, {4, 5})
expected_moves = [{4, 4}]
assert moves == expected_moves
end
def board do
Chess.Board.default
end
end

21
web/models/moves.ex Normal file
View File

@ -0,0 +1,21 @@
defmodule Chess.Moves do
def available(board, square) do
{file, rank} = square
piece = board["#{file},#{rank}"]
case piece do
%{type: :pawn, colour: :white} ->
case rank do
1 -> [{file, rank + 1}, {file, rank + 2}]
_ -> [{file, rank + 1}]
end
%{type: :pawn, colour: :black} ->
case rank do
6 -> [{file, rank - 1}, {file, rank - 2}]
_ -> [{file, rank - 1}]
end
%{type: :rook} ->
[]
end
end
end