Forum

Catégorie : Programmes
Forum : Aide à la programmation
Vues : 1410
Réponses : 29
Type : discussion
Etat : réponses autorisées

Unde question de variables

thedarkprogrammeur le 15/06/2012 à 16:04
Bonjour à tous alors voila, j'aimerai savoir comment faire pour limiter une variable par exemple :
For (A,0,10)
8->A
A-9->A
Disp A
mais j'aimerai qu'il ne me sorte pas -1 mais plutot 0
de meme si j'ajoute 3 à A je voudrais qu'il me sorte 10 et qu'il n'aille pas plus loin, alors comment faire? car je dois le faire pour beaucoup de variables; merci =)
F-BVXT le 15/06/2012 à 16:09
Pour que A soit égal à 0 au lieu de -1, tu peux faire ça :
Code
For (A,0,10)
8->A
A-9->A
A+(A=-1->A
Disp A
End
Persalteas le 15/06/2012 à 16:09
La façon la plus simple: If

Code

If A<0:0->A
If A>10:10->A
snap le 15/06/2012 à 18:35
Ou alors :

Code
max(0,A-9 -> A
min(10, A+10 -> A


Si je ne me trompe pas sa marche aussi.

Mais ton code est bizarre, tu met for(A,0,10), mais tu change
la variable A après, donc t'aura toujours la même réponse.
thedarkprogrammeur le 16/06/2012 à 00:49
merci pour vos reponses, mais snapj'ai l'impression qu'il y a un malediction qui pese sur moi car je ne comprends pas ton message:)
thedarkprogrammeur le 16/06/2012 à 01:37
Sinon en faite moi ce qui m'arrangerai le plus ce serai un petit reglage a faire au debut de la variable et de ne plus y toucher mais elle ne pourra pas descendre plus bas que 0 et augmenter plus haut que 10
donc le truc des
If A>10 : 0->A c'est pas vraiment rentable car il faudra le faire plusieurs fois pour beaucoup de variables (je peus vous dire au cas ou sa vous aiderez que en fait c'est pour les points de vie des ennemis et des miens il faudrait qu'ils ne descendent pas plus bas que 0 et ne montent pas plus haut qu'une valeur initiale)
j'espere que vous avez compris ce que j'ai di (jai un peu de mal a m'exprimer)
snap le 16/06/2012 à 02:03
Le truc, c'est que ton 1er code est bizarre, car A sera, à la fin, toujours égal au même nombre car tu lui donne une valeur constante en plein milieu de ta boucle.

Sinon, utilise ma méthode. Je ne la comprend pas moi-même, je sais juste que quand on met

Code
max(nombre, Variable

La variable ne peux pas descendre en dessous de ce nombre, et que quand on met

Code
min(nombre, Variable

La variable ne peux pas monter au dessus de ce nombre.

Tu peux bien sur faire des calculs du genre

Code
min(5, A+5 -> A

Si A < 0, A sera à la fin de cette ligne égal a 5, sinon, il sera égal a A+5.

Et pour continuer sur min( et max( :

Code
min( NOMBRE,max(nombre, Variable


Signifie que ta variable ne pourra pas monter au dessus de "NOMBRE" et ne pourra pas descendre en dessous de "nombre".
F-BVXT le 16/06/2012 à 10:33
Code
max(nombre, Variable

En fait ceci va renvoyer un seul nombre, le plus grand des deux.
Donc ici :
Code
max(0,A-9 -> A

A prendra la valeur de A-9 sauf si 0>A-9, dans ce cas A prendra pour valeur 0.

C'est la même chose mais "à l'envers" pour min :
Code
min(nombre, Variable

Ca va renvoyer le plus petit des deux nombres.
Donc ici :
Code
min(10, A+10 -> A

A prendra la valeur de A+10 sauf si 10<A+10, dans ce cas A prendra pour valeur 10.

Donc en résumé, max( renvoie la plus grande, le maximum entre les deux valeurs et min( la plus petite, le minimum entre les deux valeurs.
thedarkprogrammeur le 16/06/2012 à 19:21
merci a vous deux c'est beaucoup plus claire maintenant =)
thedarkprogrammeur le 16/06/2012 à 23:02
ben en fait... j'ai suivis vos conseils, mais sa marche pas cry.gif
thedarkprogrammeur le 16/06/2012 à 23:08
voila ce que j'ai ecrit
Code
:48->A          // le monstre a 48 pv
      :max(0,A-47->A
      :min(48,A+48->A
      :A-59->A
      :Disp A

et la sa m'ecrit A = -11 cry.gif
snap le 16/06/2012 à 23:14
Normal :

première ligne, A=48
deuxieme ligne A=1 puisque A-47=1
troisième ligne A=48 puisque A+48=1+48=49 qui est plus grand que 48
quatrième ligne A-59 = 48-59 = -11
F-BVXT le 16/06/2012 à 23:26
Oui, il faut que tu mette A-59 avant les lignes min( et max(.
thedarkprogrammeur le 17/06/2012 à 12:38
et donc comment corriger ca?
The K le 17/06/2012 à 12:41
F-BVXT à tout dit ce qu'il faut corriger.
linkakro le 17/06/2012 à 13:18
Code
48->A
max(0,A-47->A
min(48,A+48->A
max(0,A-59->A
Disp A
F-BVXT le 17/06/2012 à 13:22
Ca serai pas mieux de faire comme ça plutôt Linkakro ?
Code
48->A
A-59->A
min(48,A+48->A
max(0,A-47->A
Disp A
linkakro le 17/06/2012 à 13:30
Non. Tu as changé le résultat et l'ordre des opérations.
thedarkprogrammeur le 17/06/2012 à 16:21
bien ca ne marche toujours pas cry.gif
bon c'est pas grave je n'ai qu'a laisser les valeurs qui sont inferieures a 0
F-BVXT le 17/06/2012 à 16:24
En fait, je comprend pas vraiment ce que tu veux faire.
Tu dis que le monstre a 48 PV alors pourquoi est-ce que tu lui en retire 59 ?
Et pourquoi A-47 et A+48 ?
Qu'est-ce que tu aurais voulu comme résultat à la place de -11, 0 ?
linkakro le 17/06/2012 à 17:14
C'est quoi le problème ?
Copie simplement MON code qui est juste.
Rappel :
Code
48->A
max(0,A-47->A
min(48,A+48->A
max(0,A-59->A
 // remarque : le Disp est innutile car A est la dernière commande du prog
thedarkprogrammeur le 17/06/2012 à 20:27
en fait selon les ataques je ne lui enleve pas 48 pv pile (comme dans les vrais RPG) donc la j'ai mis comme exemple 59 mais sa peut etre 49, 62, 54 etc...
dans mon prgomramme jai mis:
Code

:120->Z                 // mes pv
:48->A                 // pv de l'ennemi
:max(0,A-47->A             
:min(48,A+48->A           
:max(0,A-59->A           
:entAléat(45,69)->E    // degats qu'inflige l'attaque
:A-E->A               
:Disp "ennemi perd:",E
:Disp "pv"
:Disp "mes pv:",Z
:Disp "pv ennemi:",A    // a ce moment la ca me sort -1, -10, -7,etc...
ca me sort -1, -7 etc... mais pas 0 !
thedarkprogrammeur le 17/06/2012 à 20:31
petite erreure de ma part a la 5eme ligne du code que j'ai mis dans le message just en haut c'est
Code

:120->Z                 // mes pv
:48->A                 // pv de l'ennemi
:entAléat(45,69)->E    // degats qu'inflige l'attaque
:A-E->A 
:max(0,A-47->A             
:min(48,A+48->A           
:max(0,A-59->A                           
:Disp "ennemi perd:",E
:Disp "pv"
:Disp "mes pv:",Z
:Disp "pv ennemi:",A    // a ce moment la ca me sort -1, -10, -7,etc...

thedarkprogrammeur le 17/06/2012 à 20:31
2eme erreure de ma part c'est pas
:max(0,A-59->A
mais:
:max(0,A-E->A
thedarkprogrammeur le 17/06/2012 à 20:35
ps linkakro: ton code est bon mais la dans mon programme il marche pas
F-BVXT le 17/06/2012 à 22:15
Je crois que j'ai compris.
Tu veux que ce soit A qui soit compris entre 0 et 48. Or, dans ton code tu met A-47, A+48 et A-59. Ce n'est donc pas A, mais une valeur de A ayant subit divers calcul autre que le "simple" retrait de PV qui s'affiche.
Je te propose donc ça qui, normalement, devrait fonctionner :
Code
:120->Z
:48->A
:entAléat(45,69)->E
:A-E->A 
:max(0,A->A             
:min(48,A->A      //cette ligne est inutile si l'ennemi ne peut pas gagner de PV                                   
:Disp "ennemi perd:",E
:Disp "pv"
:Disp "mes pv:",Z
:Disp "pv ennemi:",A
snap le 17/06/2012 à 23:17
Code
:max(0,A->A             
:min(48,A->A


Devient

Code
max(0,min(48,A -> A
thedarkprogrammeur le 18/06/2012 à 01:30
F-BVXT... tu es un geni, sa marcheeeeeeeeee!
en faite le probleme venait du fait que je faisais la soustraction ( pv-degat)
APRES avoir mis min( et max( crazy.gif
En tout cas merci également à snap et à linkakro pour leur aide précieuse kiss.gif
snap le 18/06/2012 à 10:54
Tout le plaisir était pour nous winkle.gif
Au fait

Code
:A-E->A 
:max(0,A->A             
:min(48,A->A      //cette ligne est inutile si l'ennemi ne peut pas gagner de PV                                   
:Disp "ennemi perd:",E
:Disp "pv"
:Disp "mes pv:",Z
:Disp "pv ennemi:",A


Tu peux le remplacer par

Code
 
:max(0,min(48,A-E->A                                             
:Disp "ennemi perd:",E,"pv","mes pv:",Z,"pv ennemi:",A
thedarkprogrammeur le 18/06/2012 à 18:00
wow merci snap, je savais pas qu'on pouvais faire ca, ca occupera moins d'espace , merci =)