Il faut que ce soit optimisé ou pas ?
Sinon, le plus simple, c'est de faire récursif avec une procedure fill_tableau qui prend en paramêtre la couleur à remplir et la nouvelle couleur et les coordonnées x et y. Cette procédure fait :
Si tableau (x,y) = couleur à remplir
Alors
tableau(x,y) = nouvelle couleur
fill_tableau(couleur à remplir, nouvelle couleur, x-1,y)
fill_tableau(couleur à remplir, nouvelle couleur, x+1,y)
fill_tableau(couleur à remplir, nouvelle couleur, x,y-1)
fill_tableau(couleur à remplir, nouvelle couleur, x,y+1)
Fin
Evidemment, il faut s'assurer que tu ne sortes pas des limites de ton tableau.
Ce n'est certainement pas le plus rapide, ce n'est pas optimisé (car ton point de départ x,y sera rappelé par les points adjacents), mais ça peut te donenr une première idée.
Rajah Le 02/02/2005 à 12:55 de pile, vraiment ? Il me semble que certains exemples récursifs comme les fractales marchent bien.
S'aider de variables pseudo-locales LOCAL machin&, et de celles stockées dans des GEMDOS(72). Et surtout surtout surtout, faire un ~FRE(0) régulièrement qui provoque un garbage collection (le GFA ayant tendance à pas ne nettoyer de lui-même, ce petit cochon).
Ca fera bien ce que tu veux, tu ne continues la diffusion que si le point sur lequel tu es est de la couleur à remplir.
Donc les bordures qui encadrent ta zone stopperont la diffusion.
Tu appeles la procédure une première fois avec tes coordonnées de départ et ça se diffusera sur ta première zone uniquement.
D'ailleurs, ce doit être le même genre d'algo pour le FILL, quand la forme est un peu biscornue, on le voit bien à l'écran remplir un peu à droite vers le haut, puis à gauche, puis il reprend en bas...