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:
parent
570f6cf8c6
commit
77475cf458
39
test/models/moves_test.exs
Normal file
39
test/models/moves_test.exs
Normal 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
21
web/models/moves.ex
Normal 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
|
||||
Loading…
Reference in New Issue
Block a user