private void AppendRayMoves( BoardSquare originSquare, Position.Position position, MoveDelta rayDelta, List <Move> moves) { var board = position.Board; var moveBuilder = new MoveBuilder(piece, originSquare); var currentSquare = originSquare; while (rayDelta.IsCanApplyTo(currentSquare)) { currentSquare = rayDelta.GetDestSquare(currentSquare); if (board.IsEmpty(currentSquare)) { moves.Add(moveBuilder.SetDestSquare(currentSquare).Build()); } else { var obstacle = board.GetPieceAt(currentSquare); if (obstacle.player != position.PlayerToMove) { moves.Add(moveBuilder .SetDestSquare(currentSquare) .SetCapture(obstacle.piece) .Build()); } break; } } }
private static bool IsKingDelta(MoveDelta moveDelta) { return(moveDelta.DeltaRow >= -1 && moveDelta.DeltaRow <= 1 && moveDelta.DeltaColumn >= -1 && moveDelta.DeltaColumn <= 1); }
private static bool IsKnightDelta(MoveDelta moveDelta) { int absDeltaRow = Abs(moveDelta.DeltaRow); if (absDeltaRow == 0 || absDeltaRow > 2) { return(false); } return(absDeltaRow + Abs(moveDelta.DeltaColumn) == 3); }
private static bool IsBishopDelta(MoveDelta moveDelta) { return((moveDelta.DeltaRow == moveDelta.DeltaColumn) || (moveDelta.DeltaRow == -moveDelta.DeltaColumn)); }