public int calcImpact(Position p, int range, HashSet <Position> visited) { int numBom = 0; foreach (var d in new String[] { "top", "bot", "right", "left" }) { var nextP = p.go(d, 1); for (int i = 0; i < (range - 1); i++) { if (visited.Contains(nextP)) { continue; } visited.Add(nextP); if (Grid.isABox(nextP)) { destroyed.AddLast(nextP); numBom++; break; } foreach (var b in Grid.boms) { if (nextP.Equals(b.p) && b.duration > 3) { Console.Error.WriteLine("\n\n inception for " + this.p + "\ninception at " + b.p + " \n"); numBom += calcImpact(b.p, b.range, visited); } } if (!Grid.passExplosion(nextP)) { break; } nextP = nextP.go(d, 1); } } return(numBom); }