// addtion 为 true 时, 返回结果包括 马腿 象眼 炮架.
        public HashSet <PiecePoint> GetActionPoints(ChessBoard board, ChessPiece piece, bool addition = false)
        {
            if (ActionWayData != null)
            {
                return(GetActionPoints(
                           board,
                           piece,
                           ActionWayData.WayDirections,
                           ActionWayData.EyeDirections,
                           ActionWayData.IsStepPiece,
                           ActionWayData.IsCannon,
                           ActionWayData.IsKing,
                           addition));
            }

            var actionPoints = new HashSet <PiecePoint>();
            var baseTypes    = piece.BaseTypes ?? new PieceType[0];

            foreach (var type in baseTypes)
            {
                var actionWay = ActionWayRule.GetActionWay(type);
                actionPoints.UnionWith(actionWay.GetActionPoints(board, piece, addition));
            }
            return(actionPoints);
        }
        public HashSet <PiecePoint> GetActionPoints(ChessBoard board, bool addition = false)
        {
            var actionWay = ActionWayRule.GetActionWay(PieceType);

            return(actionWay.GetActionPoints(board, this, addition));
        }