예제 #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="p"></param>
        /// <param name="m"></param>
        /// <returns></returns>
        private List <IndexBundle> PossibleMovementHelper(Piece p, Movement m)
        {
            List <IndexBundle> bundle = new List <IndexBundle>();
            int initRow             = p.Row;
            int initCol             = p.Column;
            int numer               = m.Numerator;
            int denom               = m.Denominator;
            List <IConstraint> cons = m.Cons;

            for (int i = 1; i <= m.NumTimes; i++)
            {
                int  tNum = numer * i;
                int  tDen = denom * i;
                bool flag = true;
                foreach (IConstraint c in cons)
                {
                    try
                    {
                        if (!c.ConstraintSatisfied
                                (p, initRow + tNum, initCol + tDen, Board))
                        {
                            flag = false;
                            break;
                        }
                    }
                    catch (Exception)
                    {
                        flag = false;
                    }
                }
                if (flag)
                {
                    bundle.Add(new IndexBundle(initRow + tNum, initCol + tDen));
                }
            }
            p.AddIndices(bundle);
            return(bundle);
        }