As3 - principe et application de fonction récursive

Description

Principe de base :
Une grille représente un terrain.
L'utilisateur active/désactive les cases en cliquant dessus.
L'interaction d'une case ne doit être rendu possible que si elle se trouve à côté d'une autre cases et que toutes les cases sont connectées entre elles.

Solution :
Pour ce qui est de l'activation d'une case, c'est très simple : vérifier qu'au moins une case limitrophe est activée.
La désactivation est plus difficile, car il ne faut pas rompre une chaîne et éviter de créer plusieurs groupes de cases.
Là intervient l'utilisation de fonction récursive.

La fonction récursive :
C'est une fonction qui s'appelle elle-même.
Elle se déclenche à chaque case activée et se propage aux autres cases qui l'entoure.
- Le principe est de créer un tableau logique vide de taille équivalente à l'aire de jeu
- Trouver la première case active
- Tester les 4 cases autours de cette case, puis de lancer une fonction sur chaque case active trouvée.
Ce principe va se propager comme une trainée de poudre en activant logiquement les cases testées.
Il ne restera qu'à comparer le tableau obtenu à celui existant et de voir si toutes les cases correspondent.

un exemple :
partons donc du principe que nous avons le schéma de base suivant.
[img]http://www.enystemple.net/pegase/temp/flashkod/recursif01.png/img
Tout d'abord, on part d'une grille de taille équivalente, mais vide ("test" dans le code)
1. La première case trouvée est la case 5. On l'active (noir), teste les cases autours. Seule la case 10 est active dans le tableau de référence (vert)
2. Une fonction est alors lancée sur la case 10 (qui est activée). Elle cherche aussi les cases alentours. la case 5 ayant déjà été testée, on ne la re-teste pas. La case 11 est donc lancée.
3. Tout comme dans l'étape précédente, mais sur la case 11. il en ressort la case 12.
4. La case 12 est testée, et deux cases sont alors actives. Soit deux chemins A et B
5. A (case 7) et B (case 17) sont donc testés chacune par une fonction, les cases 8 et 18 sont lancées en test.
6. Le test de la case 8 ne donne aucune case à tester et c'est donc la fin du chemin A. Le chemin B fait tester la case 23.
7. Le chemin B ne lance plus aucune fonction et se termine donc.
8. Le schéma résultant est donc comparé à celui de base. Ils correspondent et est donc valide !

Un autre exemple nous montre qu'amputé de la case 18, le schéma ne correspond plus :
[img]http://www.enystemple.net/pegase/temp/flashkod/recursif02.png/img

La fonction récursive permet donc de tester le groupement des cases et détermine si toutes les cases sont interconnectées ou pas.

Conclusion :


Ce principe, simple au départ est utilisé pour déterminer si un labyrinthe est résoluble ou pas. Le point de départ étant l'entrée et la case d'arrivée devant être active après le test.

Il s'agit aussi de la base des pathfinders, permettant de trouver le chemin le plus court entre deux points. Mais il est loin d'être fonctionnel pour cette utilisation dans l'état actuel.

Amusez-vous avec et faites surtout attention aux dépassement de piles éventuels ;)

Peg'

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.