Page 1 sur 1

passer une valeur , d'un texte à une variable

Publié : mer. 08/juin/2011 13:10
par blendman
Désolé pour le titre un peu bizarre :).

En fait, voici ce que j'essaie de faire.
J'ai créé des boutons (des "+") :
- lorsque je clique sur le bouton, ça ajoute un point à une variable.
- j'ai donc conçu une structure pour mes boutons "+", avec un paramètre "nom". Chaque nom de bouton étant lié à une variable.

Par exemple, j'ai 3 boutons (un tableau dim bouton(2)

Code : Tout sélectionner

bouton(0)\nom = vie
bouton(1)\nom = mana
bouton(2)\nom = dexterite
J'essaie donc de récupérer le nom du bouton et de changer la variable qui a le même nom :).

J'essaie donc de faire ceci, si je clique sur le bouton de vie par exemple:

Code : Tout sélectionner

for i = 0 to 3
with bouton(i)
string$ = \nom
val(string$) +1
EndWith
next i
Je clique sur le bouton vie, donc son nom="vie", j'aimerai donc ajouter à ma variable "vie" +1

Mais bien sûr, comme ça ça ne peut pas marcher. Une idée de ce que je dois faire pour que ça fonctionne ?

En gros, ça reviendrait à faire un select du genre :

Code : Tout sélectionner

for i = 0 to 3
with bouton(i)
select \nom
case vie
vie +1
case mana
mana+1
case dexterite
dexterite +1
endselect
EndWith
next i
ca va quand on n'a que 3 variable, mais je prévois d'utiliser un système de ce genre pour des inventaire complets pour le commerce. Donc, je risque d'avoir 200 cases, ainsi je voudrais un truc plus simple en quelques lignes :).

Si vous avez une idée, je suis preneur ;).

Dans le même genre savez-vous si on peut récupérer le nom d'une variable et non sa valeur ?

Merci.

Re: passer une valeur , d'un texte à une variable

Publié : mer. 08/juin/2011 13:25
par Cool Dji
Salut Blendman,

Tu peux pas essayer un truc avec l'indexage (pointeur) ?

if bouton(i) appuyé
variable(i) incrémenté
endif

bon, t'as pas de lien avec le nom de la variable mais c'est plus simple et si tu veux ajouter ou enlever des variables en cours de route, il faut alors ajouter une procédure de tri.

Sinon, affecter une chaine de caractère à une variable, je ne pense pas que ce soit possible (les noms de variables sont définies avant compilation), d'autant que tu dois garder une souplesse sur les noms d'objets que tu devras pouvoir traduire en différentes langues et ça indépendamment de la compilation...
Mais il y a peut être des possibilités qui me soient inconnues, c'est largement possible :D

Re: passer une valeur , d'un texte à une variable

Publié : mer. 08/juin/2011 13:44
par comtois
Ne connaissant pas tout le contexte, voici une solution possible :

Code : Tout sélectionner

Structure s_Nom
  Nom.s  
EndStructure

Dim Bouton.s_Nom(3)
bouton(0)\nom = "Vie"
bouton(1)\nom = "Mana"
bouton(2)\nom = "Dexterite"

NewMap Variable()

;Initialise les variables
Variable("Vie") = 0
Variable("Mana") = 0
Variable("Dexterite") = 0

For i=0 To 2
  Variable(Bouton(i)\Nom) + 1
Next i

ForEach Variable()
  Debug Variable()
Next 

Re: passer une valeur , d'un texte à une variable

Publié : mer. 08/juin/2011 14:44
par G-Rom

Code : Tout sélectionner

#BUTTON_RELEASED = 0
#BUTTON_CLICKED  = 1
 
Structure MonBouton
  mState.w
  mValue.i
EndStructure


; initialise le bouton
BoutonDeVie.MonBouton
BoutonDeVie\mState = #BUTTON_RELEASED


; if bouton souris and souris dedans, then :
  BoutonDeVie\mState = #BUTTON_CLICKED
; endif


; 
If  BoutonDeVie\mState = #BUTTON_CLICKED
    BoutonDeVie\mState = #BUTTON_RELEASED
    BoutonDeVie\mValue + 1
EndIf 

Re: passer une valeur , d'un texte à une variable

Publié : jeu. 09/juin/2011 16:21
par graph100
souhaites tu vraiment garder l'utilisation des noms de boutons ?
Car tu peux utiliser les pointeurs je pense.

Code : Tout sélectionner

Structure bouton
  *adresse_variable.long
EndStructure

; tu as un nouveau bouton, et tu l'associe avec une variable en particulier :

oui.l = 85

MonBouton.bouton\adresse_variable = @oui

Debug "Init :"
Debug "oui = " + Str(oui)
Debug "MonBouton\adresse_variable\l = " + Str(MonBouton\adresse_variable\l)

; utilisation :
MonBouton\adresse_variable\l + 1

Debug "Après incrementation :"
Debug "MonBouton\adresse_variable\l = " + Str(MonBouton\adresse_variable\l)
Debug "oui = " + Str(oui)
Maintenant si tu veux absolument garder les noms dans les structures, la méthode de comtois est la plus adaptée je pense. Bien que plus lente.
si tu te débrouille bien, tu ne devrais pas à avoir garder le nom des variables (A mon humble avis :mrgreen: )

Bonne chance

[edit] pour reprendre ton exemple :
blendman a écrit :Par exemple, j'ai 3 boutons (un tableau dim bouton(2)

Code : Tout sélectionner

bouton(0)\nom = vie
bouton(1)\nom = mana
bouton(2)\nom = dexterite


for i = 0 to 3
with bouton(i)
string$ = \nom
val(string$) +1
EndWith
next i

Code : Tout sélectionner

Structure bouton
  *adresse_variable.long
EndStructure

vie.l = 50
mana.l = 350
dexterite.l = 18

Debug "Init :"
Debug "vie = " + Str(vie)
Debug "mana = " + Str(mana)
Debug "dexterite = " + Str(dexterite)

Dim bouton.bouton(2)

bouton(0)\adresse_variable = @vie
bouton(1)\adresse_variable = @mana
bouton(2)\adresse_variable = @dexterite


For i = 0 To 2 ; (attention içi ça ne fonctionnais pas dans ton exemple ;)
	With bouton(i)
		
		\adresse_variable\l + 1
		
	EndWith
Next i

Debug "Après la mise à jour :"
Debug "vie = " + Str(vie)
Debug "mana = " + Str(mana)
Debug "dexterite = " + Str(dexterite)

Re: passer une valeur , d'un texte à une variable

Publié : jeu. 09/juin/2011 20:54
par blendman
Merci beaucoup pour vos exemples.

Graph100 : effectivement, ta méthode a l'air pas mal. je vais tester ça à l'occasion, ça va surement me servir ;)
Celle de comtois aussi m'avait bien plu.

Re: passer une valeur , d'un texte à une variable

Publié : jeu. 09/juin/2011 22:28
par graph100
Entre les deux, je pense que la différence est la vitesse d'exécution.
En programmation, l'adresse d'une variable est l'équivalent de son nom. Donc comme tu y as accès facilement avec '@' ...