Пример #1
0
        private bool isDistanceFitType(Point i_destination, Point i_origin)
        {
            bool isSkippable = (Math.Abs(i_destination.X - i_origin.X) == 1) && (Math.Abs(i_destination.Y - i_origin.Y) == 1);

            bool isKing = DamkaPieces.isKing(this.GetPieceByIndex(i_origin));

            return(isKing || isSkippable);
        }
Пример #2
0
        private bool isIndexAbstractedByEnemy(Point i_destination, Point i_origin)
        {
            int adder  = (i_origin.X - i_destination.X > 0) ? -1 : 1;
            int deltaY = i_destination.Y - i_origin.Y;
            int deltaX = i_destination.X - i_origin.X;
            int m      = deltaY / deltaX;

            int xLow   = (i_destination.X < i_origin.X) ? i_destination.X : i_origin.X;
            int xHigh  = (xLow == i_origin.X) ? i_destination.X : i_origin.X;
            int yOfLow = (xLow == i_destination.X) ? i_destination.Y : i_origin.Y;

            int distance = 0;

            // count how many enemies between the points.
            int numberOfEnemiesInRange = 0;

            for (int x = i_origin.X + adder; x >= xLow && x <= xHigh; x = x + adder)
            {
                distance++;
                int y = m * (x - xLow) + yOfLow;

                DamkaPieces.Type tmp = this.GetPieceByIndex(new Point(x, y));
                if (DamkaPieces.IsEnemyType(tmp, this.GetPieceByIndex(i_origin)))
                {
                    numberOfEnemiesInRange++;
                }
            }

            bool isKing = DamkaPieces.isKing(this.GetPieceByIndex(i_origin));
            bool result = false;

            if (isKing && numberOfEnemiesInRange == 1)
            {
                result = false;
            }
            else if (distance == 1 && numberOfEnemiesInRange == 1)
            {
                result = true;
            }

            return(result);
        }