Posté le: 27/09/08 17:07 Sujet du message: la fonction retourne un déploiement ?
Salut
j'aimerai faire une fonction qui retourne un entier déploiement seulement je sais pas si c'est possible ou comment on fait car j'ai toujours une fatal error
quand je la copie
je la déclare comme ca :
Jass:
function TirageSansRemise takes integer a, integer b, integer n returns integer array
en fait je veux faire une fonction qui fait n tirages aléatoires parmi des entiers compris entre a et b
et qui me retourne un tableau d'entiers aléatoires tous différents
comme ca je choisis le n parmi mon nombre de hero / joueurs / ability etc une seule fois et je peux m'en servir dans les boucles _________________
Inscrit le: 23 Aoû 2007 Messages: 7146 Sujets: 147 Spécialité en worldedit: le troll, le flood, la vulgarité, mon coeur balance Médailles: 2 (En savoir plus...)
Posté le: 27/09/08 17:24 Sujet du message:
Dans ce cas je te conseille un returns nothing ou pourquoi pas boolean (paramètres invalides ou non).
Et tu set une variable globale array, et une variable globale entière indiquant l'index max de la variable array.
Aprés tu peux faire des loops avec la variable globale array.
PS: Procures toi le jass new gen pack, à moins que tu utilises un mac ?
Je ne m'en rappelle plus ... _________________
je viens d'essayer de mettre un returns nothink et de set une variable globale déploiment que j'ai déclaré, et en condition j'ai mis que le n soit inférieur à une globale udg_n qui est égale à 200
et j'ai toujours ma fatal error
je vous poste ma fonction :
Secret:
Jass:
function TirageSansRemise takes integer a, integer b, integer n returns nothing
local integer array x
local integer array stocke
local integer array y
local integer z
local integer i
local integer j
if n < udg_n then
set stocke[1] = GetRandomInt(a, b)
set i = 2
loop
exitwhen i > n
set x[i] = GetRandomInt(a, b)
set j = 1
loop
exitwhen j > i
if ( x[i] == stocke[i-j] ) then
set y[j] = 0
else
set y[j] = 1
endif
set j = j + 1
endloop
set j = 1
loop
exitwhen j > i
set z = 1 * y[j]
set j = j + 1
endloop
if ( z == 1 ) then
set stocke[i] = x[i]
else
set i = i – 1
endif
set i = i + 1
endloop
set i = 1
loop
exitwhen i > n
set udg_random[i] = stocke[i]
set i = i + 1
endloop
endif
endfunction
enfin j'ai surement pas tout compris _________________
Dernière édition par zazaa le 27/09/08 18:27; édité 1 fois
Inscrit le: 23 Aoû 2007 Messages: 7146 Sujets: 147 Spécialité en worldedit: le troll, le flood, la vulgarité, mon coeur balance Médailles: 2 (En savoir plus...)
Posté le: 27/09/08 18:31 Sujet du message:
Ca ne marche pas mais ca ne fait crash plus à la sauvegarde ?
Alors c'est simplement que tu as mal codé
Je ne suis pas fortiche en math mais je sais que c'est possible de faire ce que tu demandes de façon plus simple.
Je vais essayer de le faire. _________________
Sinon tu peux également utiliser le vJass et renvoyer un type personnalisé.
Jass:
type intarray extends integer array[100]
function A takes nothing returns intarray
local intarray IA = intarray.create()
//...
return IA
endfunction
Attention, ne pas oublier de détruire la valeur retournée après s'en être servie, avec un .destroy().
J'en profite pour redonner le lien suivant : FW Types
Dans ce cas, le type est en fait une structure, mais elle s'utilise exactement comme le type, mais possède en plus des méthodes utiles. _________________
Bêta Systems:70% Bêta Spells:13% Bêta Arts & graphics:70%
Inscrit le: 23 Aoû 2007 Messages: 7146 Sujets: 147 Spécialité en worldedit: le troll, le flood, la vulgarité, mon coeur balance Médailles: 2 (En savoir plus...)
Posté le: 27/09/08 21:21 Sujet du message:
L'erreur de compilation venait du fait que tu n'utilisais pas le signe moins "-", mais un autre caractère "–".
(Fallait la trouver petite espiègle )
Voici ma solution :
Jass:
// Si tu ne possédes pas windows xp et donc ne peut utiliser jasshelper (ou mieux le jass new gen pack),
// déclare ces globales dans l'éditeur de variables, tu devras bien sur rajouter "udg_" dans la fonction
globals
integer N
integer array Table
endglobals
function TirageSansRemise takes integer a, integer b, integer n returns nothing
local integer temp= -1
local integer index
local integer max= (b-a) + 1
set N= n // on stocke le nombre d'entiers
// initialisation de toutes les valeurs possibles
loop
exitwhen a> b // on part de l'hypothèse que b > a
set temp= temp+1
set Table[temp]= a
set a= a+1
endloop
// rangement des valeurs selon un ordre aléatoire
loop
exitwhen n== 0
set n= n-1
set max= max - 1
set index= GetRandomInt(0,max)
set temp= Table[index]
set Table[index]= Table[max]
set Table[max]= temp
endloop
endfunction
function Exemple takes nothing returns nothing
local integer i
call TirageSansRemise(3,7,4)
set i= N
loop
exitwhen i== 0
set i= i-1
call BJDebugMsg(I2S(Table[i]))
endloop
call BJDebugMsg(" ")
endfunction
PS : La fonction tel qu'elle est actuellement ne préserve pas l'utilisateur de lui même, il n'y a aucun déboguage.
Il faudrait vérifier que a>b, ou pourquoi pas déterminer le minimum et le max entre a et b, que n>0 et <=(b-a)+1 (à moins que l'on puisse choisir plusieurs fois le même nombre si la liste est plus petite que le nombre de chiffres voulus), etc ...
@Profet: hmm c'est bien beau mais je ne vois pas comment utiliser le return _________________
Merci de ta patience, mais tu va me tuer si je te dis que sa plante encore tu me croiras pas...
sinon si j'ai bien compris ta méthode :
tu stocke dans "table" tous les entier de l'intervalle et dans la 2eme boucle tu en range n en ordre aléatoire
j'ai bon ?
sinon comment on utilise le vjass? il faut un logiciel?
et BJDebugMsg sa donne quoi exactement?
est il possible que mon éditeur soit buggé?
j'ai tout désinstallé y' a 2 semaine et la je l'ai reinstallé,cependant j'ai constaté que mes configurations perso etaient toujours la, et quand je veux tester une map maintenant sa me met sur l'ecran d'acceuil de war3 roc au lieu de tester directement
sa a peut etre un rapport ?
pour les fonctions, si je cree une fonction de 3 lignes sa marche mais la y'a pas moyen _________________
Toutes les heures sont au format GMT + 1 Heure Aller à la page 1, 2, 3, 4Suivante
Page 1 sur 4 La question posée dans ce topic a été résolue !
Vous ne pouvez pas poster de nouveaux sujets dans ce forum Vous ne pouvez pas répondre aux sujets dans ce forum Vous ne pouvez pas éditer vos messages dans ce forum Vous ne pouvez pas supprimer vos messages dans ce forum Vous ne pouvez pas voter dans les sondages de ce forum