A chess library for Gleam

Only allow double pawn moves from starting positions

+12 -9
+12 -9
src/starfish/internal/move.gleam
··· 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 + let moves = [Move(from: position, to: forward_one), ..moves] 64 + 65 + let can_double_move = case game.to_move, board.rank(position) { 66 + board.Black, 6 | board.White, 1 -> True 67 + _, _ -> False 68 + } 69 + 70 + use <- bool.guard(!can_double_move, moves) 71 + 62 72 let forward_two = direction.in_direction(forward_one, forward) 63 73 case iv.get(game.board, forward_two) { 64 - Ok(board.Empty) -> [ 65 - Move(from: position, to: forward_one), 66 - Move(from: position, to: forward_two), 67 - ..moves 68 - ] 69 - Ok(board.Occupied(_)) | Error(_) -> [ 70 - Move(from: position, to: forward_one), 71 - ..moves 72 - ] 74 + Ok(board.Empty) -> [Move(from: position, to: forward_two), ..moves] 75 + Ok(board.Occupied(_)) | Error(_) -> moves 73 76 } 74 77 } 75 78 Ok(board.Occupied(_)) | Error(_) -> moves