2 votes

Mise en œuvre d'une variante de l'algorithme de remplissage par inondation.

J'essaie d'utiliser le remblai de crue algorithme permettant de trouver tous les objets adjacents similaires dans une liste, afin de les marquer pour les supprimer. J'ai essayé d'adapter le pseudo-code sur Wikipedia, mais je suis resté bloqué.

Chaque objet de la liste a une valeur X (int), une valeur Y (int), un nom et un bool (bool) à marquer pour la suppression. Je veux faire une correspondance sur le nom.

Le programme se bloque sans le try-catch, et se termine simplement avec. Il ne renvoie pas de message d'erreur. Voici ce que j'ai jusqu'à présent, en essayant de trouver des objets directement au-dessus.

    //Find neighbouring bubbles
    gameGrid.DetectNeighbours2(gameGrid.planets.Last(), gameGrid.planets.Last().name);

    //Flood fill algorithm to detect all connected planets
        internal void DetectNeighbours(Planet p, Planet.Name planetName)
        {
            try
            {
                if (p.planet != planetName)
                    return;

                p.deletable = true;

                DetectNeighbours(GetTopNode(p), planetName);
            }

            catch (Exception err)
            {
                Debug.WriteLine(err.Message);
            }
        }

        internal Planet GetTopNode(Planet b)
        {
            foreach (Planet gridPlanet in planets)
            {
                if (gridPlanet .Y == b.Y - 50)
                    return gridPlanet ;       
            }

            return b; //Don't think this is right, but couldn't think of alternative
        }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X