private static HashSet <int> GetIndicesForDirectionalFileStepping( Square square, BoardData board, DataMoveRuleDirectional rule) { HashSet <int> indices = new HashSet <int>(); // North and south indices.UnionWith(GetNeighborSquareChain(square, board, rule.MaxDistance, 1)); indices.UnionWith(GetNeighborSquareChain(square, board, rule.MaxDistance, 5)); return(indices); }
private static HashSet <int> GetIndicesForDirectionalRankStepping( Square square, BoardData board, DataMoveRuleDirectional rule) { HashSet <int> indices = new HashSet <int>(); // East and West indices.UnionWith(GetNeighborSquareChain(square, board, rule.MaxDistance, 3)); indices.UnionWith(GetNeighborSquareChain(square, board, rule.MaxDistance, 7)); return(indices); }
private static HashSet <int> GetIndicesForDirectionalDiagonalStepping( Square square, BoardData board, DataMoveRuleDirectional rule) { HashSet <int> indices = new HashSet <int>(); // Diagonals indices.UnionWith(GetNeighborSquareChain(square, board, rule.MaxDistance, 0)); indices.UnionWith(GetNeighborSquareChain(square, board, rule.MaxDistance, 2)); indices.UnionWith(GetNeighborSquareChain(square, board, rule.MaxDistance, 4)); indices.UnionWith(GetNeighborSquareChain(square, board, rule.MaxDistance, 6)); return(indices); }
private static HashSet <int> GetIndicesForDirectionalStepping( Square square, BoardData board, DataMoveRuleDirectional rule) { HashSet <int> indices = new HashSet <int>(); switch (rule.Direction) { case MoveDirectionType.File: indices = GetIndicesForDirectionalFileStepping(square, board, rule); break; case MoveDirectionType.Rank: indices = GetIndicesForDirectionalRankStepping(square, board, rule); break; case MoveDirectionType.Diagonal: indices = GetIndicesForDirectionalDiagonalStepping(square, board, rule); break; } return(indices); }