passer une valeur , d'un texte à une variable

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

passer une valeur , d'un texte à une variable

Message 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.
Avatar de l’utilisateur
Cool Dji
Messages : 1126
Inscription : ven. 05/sept./2008 11:42
Localisation : Besançon
Contact :

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

Message 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
Only PureBasic makes it possible
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

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

Message 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 
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

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

Message 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 
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

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

Message 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)
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

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

Message 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.
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

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

Message 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 '@' ...
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
Répondre