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); }
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); }