1

Bonjour tous (et bonne année avec du retard ...)

Je cherche à faire en GFA Basic une routine de remplissage de tableaux qui ferait la même chose que l'instruction FILL.
je positionne une valeur (correspondant à une couleur) au point x/y du tableau et elle remplirait le tableau comme l'instruction FILL en fonction des valeurs (couleurs) déjà disponibles...
Le tableau serait variable de 64x64 à 128x128

Voilà, je ne sais pas si c'est clair tongue
Si quelqu'un a ça ou une idée ...

merci

artemus (fantomas)

2

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.
avatar
De nouveaux jeux pour vos vieilles consoles ? En 2024 ?
https://yastuna-games.com

3

Je pensais pareil que l'idée de Fadest, j'avais déjà fait des recherches la dessus, pour écrire des routines de remplissage qui pouvait 'mappé' des formes ou faire des dégradés.

J'avais fait des essais en Gfa, le pb c'est qu'avec des zones trop grandes, le Gfa accusait un pb de pile !!

J'ai d'autre techniques a la maison, du moins les algos si tu les veux, fais mois signe.



GT Turbo (C.V.S.D.) octopus
avatar
Accrochez vous ca va être Cerebral !!

4

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).

5

Et oui 'stack overflow !', mais bon c'est sur que la zone était plus grande aussi que le tableau a Artemus !!




GT En train de remplir !! dingue
avatar
Accrochez vous ca va être Cerebral !!

6

Fadest :
Il faut que ce soit optimisé ou pas ?


Non, pô optimisé.
Je vais voir avec ta technique, mais il me semble qu'elle remplacera toutes les 'couleurs a remplir' du tableau par 'nouvelle couleur', non?
si j'ai dans mon tableau 2 zones remplies de la valeur 'couleur a remplir', je ne veux que soit remplie que la zone dans laquelle j'appliquerai au début la 'nouvelle couleurs'

comme l'instruction FILL il me semble, non?

7

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...
avatar
De nouveaux jeux pour vos vieilles consoles ? En 2024 ?
https://yastuna-games.com

8

Fadest :
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...

9

Fadest :
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.


Ok merci je teste smile

artemus (fantomas)

10

ce qu'il te faudrait c'est une commande ARRAYFILL plus plus grin
Freddo aka Zorro2.

11

GT Turbo :
J'avais fait des essais en Gfa, le pb c'est qu'avec des zones trop grandes, le Gfa accusait un pb de pile !!
J'ai d'autre techniques a la maison, du moins les algos si tu les veux, fais mois signe.
GT Turbo (C.V.S.D.) octopus


La routine de Fadest fonctionne impeccable ... sauf que ... 'stack Overflow' si j'essaie de remplir une zone importante (64x64 par ex.) mourn

Je vais tester avec la technique de Rajah Lone (variables LOCAL, libération de mémoire...) par contre gemdos(72) fô pas y compter, c'est pour le GFA Basic pour Windows roll

Je teste et je vous dis quoi !

artemus (fantomas)

12

c'est pour le GFA Basic pour Windows roll

Je teste et je vous dis quoi !

artemus (fantomas)


Bon, en GFA Win j'ai une instruction STACKSIZE n% qui permet de redimensionner la taille de la pile, mais n% est limité à 65535 octets.
C'est bon pour un tableau 64x64 mais ça coince en 128x128...
J'ai réussi à me débrouiller avec ca devrai aller, merci à tous pour vos conseils !

artemus (fantomas)