Page 1 sur 1

Passer de t(x,y)\choix1 à t(x,y)\choix2 avec une variable?

Publié : lun. 05/févr./2007 4:50
par Huitbit
J’avais déjà (mal)posé cette question(voir plus loin), Comtois m’avait répondu :

Code : Tout sélectionner

Structure muche 
  mer.b 
  terre.b 
  montagne.b 
EndStructure 

Dim Tablo.muche(5,5) 
Macro Test(x, y, Choix) 
  Tablo(x, y)\Choix 
EndMacro 

Test(2, 2, mer) = 1  
Test(2, 3, montagne) = 1  

Debug Tablo(2, 2)\mer 
Debug Tablo(2, 3)\montagne  

If Test(2, 2, mer) And Test(2, 3, montagne) 
  Debug "c'est bon" 
EndIf
J’étais tellement content de découvrir les macros que je n’ai pas vu que ça ne répondait pas à ma question.

En fait voilà ce que je voulais:
Avec les mêmes noms que plus haut :

Code : Tout sélectionner

If choix =" mer"
     Tablo(2,2)\choix = 5  ;l’ordinateur doit comprendre Tablo(2,2)\mer=5
Endif 
Si je fais ça, PB me répond qu’il ne connaît pas la structure choix.
Je suis tout à fait d’accord avec lui, mais j’aimerais bien écrire une sous-programme où la structure ne serait pas définie (elle s’appellerait « choix ») comme ça, la même procédure pourrait servir pour la mer, la montagne,etc.

Exemple :

Code : Tout sélectionner

Procedure.b detection(x.b,y.b,choix.s)

If  choix="mer"
     Tablo(x,y)\choix = Tablo(x,y)\choix+1
Endif

If  choix="terre"
     Tablo(x,y)\choix = Tablo(x,y)\choix*4
Endif  

Endprocedure
;...
;...
;...
;appels  de la procedure
detection(1,1 , " mer ")
detection(2,3,  " terre ")
…
J'espère que ma question est plus claire :D
Si quelqu'un a déjà fait ça, je suis preneur, car ça évite pas mal de lignes de code :roll:

Ciao!

PS: le passage 2D>3D de la p'tite tortue est impressionnant :P

Publié : lun. 05/févr./2007 7:44
par Backup
Merci ! :D
et comme ça , ça te vas ?

Code : Tout sélectionner

Structure choix
    mer.b
    terre.b
    montagne.b 
    choix.l
EndStructure

Dim choix.choix(5,5)


If choix(2,2)\choix = 5 ; on met le choix (5) dans le tableau en place 2,2
    choix(2,2)\mer.b=5 ;on met la meme valeur dans le tableau mer en place 2,2 !
EndIf

;  maintenant on  a la valeur 5 dans  choix(2,2)\choix et dans  choix(2,2)\ mer.b


Si j'ai bien compris

Publié : lun. 05/févr./2007 8:50
par linkerstorm
Salut Huitbit.

J'ai essayé de comprendre ton problème. Voyons si j'ai réussi.
Je te propose un bout de code simple et dis-moi si cela peut répondre à ton besoin.
Si cela n'est pas le cas, essaies de préciser ce que tu veux obtenir exactement ;)

Voici le code :

Code : Tout sélectionner

Enumeration
	#Paysage_mer
	#Paysage_terre
	#Paysage_montagne
EndEnumeration

Global Dim Tablo(5, 5)

Procedure.l Detection(x.l, y.l, choix.s)
	Select choix
		Case "mer"      : Tablo(x, y) = #Paysage_mer
		Case "terre"    : Tablo(x, y) = #Paysage_terre
		Case "montagne" : Tablo(x, y) = #Paysage_montagne
	EndSelect
EndProcedure

Detection(1, 1, "mer")
Detection(1, 2, "terre")
Detection(1, 3, "montagne")

If Tablo(1, 1) = #Paysage_mer And Tablo(1, 2) = #Paysage_terre
	Debug "C'est bon"
EndIf

J'ai trouvé une autre solution!

Publié : lun. 05/févr./2007 21:05
par Huitbit
Enfin, j'espère...
J'arrive pas trop à être clair avec cette question :?
Merci quand même d'avoir cherché! :wink:

En fait je voulais changer la structure "à distance" grace aux paramètres de la procedure!

J'allais poster un exemple et... :idea:
En fait dans une procedure affichage(choix), je voulais utiliser le tableau
tablo(x,y)\choix, un grand nombre de fois sachant que j'appelerais la procedure dans le prog principal de la manière suivante:
affichage("mer")
affichage("terre")
...
et bien sûr dans la procedure ça deviendrait(pour affichage("mer")):
tablo(x,y)\mer ; (car choix="mer")

:idea: Ben au lieu de remplacer chaque tableau par une macro, je vais remplacer 90% de la procedure(le texte qui ne change jamais, à part la structure des tableaux manipulés) par une macro paramétrable que je commanderai par un if.

if choix="mer"
macro(x,y,mer)
elsif choix="terre"
macro(x,y,terre)
.....

C'était bien avec les macros qu'il fallait travailler
Je donnerai un exemple quand ça sera prêt !

Hasta la vista!