tangled
alpha
login
or
join now
gearsco.de
/
starfish
2
fork
atom
A chess library for Gleam
2
fork
atom
overview
issues
pulls
pipelines
Only allow double pawn moves from starting positions
gearsco.de
6 months ago
53bd85da
018d6c66
+12
-9
1 changed file
expand all
collapse all
unified
split
src
starfish
internal
move.gleam
+12
-9
src/starfish/internal/move.gleam
···
1
1
+
import gleam/bool
1
2
import iv
2
3
import starfish/internal/board
3
4
import starfish/internal/direction.{type Direction}
···
59
60
let forward_one = direction.in_direction(position, forward)
60
61
let moves = case iv.get(game.board, forward_one) {
61
62
Ok(board.Empty) -> {
63
63
+
let moves = [Move(from: position, to: forward_one), ..moves]
64
64
+
65
65
+
let can_double_move = case game.to_move, board.rank(position) {
66
66
+
board.Black, 6 | board.White, 1 -> True
67
67
+
_, _ -> False
68
68
+
}
69
69
+
70
70
+
use <- bool.guard(!can_double_move, moves)
71
71
+
62
72
let forward_two = direction.in_direction(forward_one, forward)
63
73
case iv.get(game.board, forward_two) {
64
64
-
Ok(board.Empty) -> [
65
65
-
Move(from: position, to: forward_one),
66
66
-
Move(from: position, to: forward_two),
67
67
-
..moves
68
68
-
]
69
69
-
Ok(board.Occupied(_)) | Error(_) -> [
70
70
-
Move(from: position, to: forward_one),
71
71
-
..moves
72
72
-
]
74
74
+
Ok(board.Empty) -> [Move(from: position, to: forward_two), ..moves]
75
75
+
Ok(board.Occupied(_)) | Error(_) -> moves
73
76
}
74
77
}
75
78
Ok(board.Occupied(_)) | Error(_) -> moves