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/te mp/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/flas hkod/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.