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