
Code : Tout sélectionner
; Programme réaliser par monsieur dieppedalle david le 16 juillet 2012
; Ce programme sert a piocher un nombre aléatoire dans une liste de nombre aléatoire crée précédemment
; Minimum.q = le nombre aléatoire minimum
; Maximum.q = le nombre aléatoire maximum
; Pas.q = sert pour incrémenté les nombre aléatoire générer grâce à ce pas entre le minimum et le maximum
; Explications:
; Ce programme sert a créé une liste de nombre aléatoire entre un minimum et un maximum suivent un pas.
; Imaginer un jeu de carte ou la carte la plus basse serais 2 et la carte la plus haute serais 10
; Je veux que les cartes soit d'un pas de 2 par 2, par exemple (2, 4, 6, 8, 10), je mets donc un minimum de 2 et un maximum de 10 avec un pas de 2
; Ensuite le jeu de carte est mélanger et on tire les carte jusqu'à ce qu'il en est plus !
; Les cartes seront donc tirées dans un ordre aléatoire (dû au mélange des cartes) donc ici 5 carte au totale !
; Pour commencer, il faut crée le jeu de carte, donc on met la commande CreeListeNombreAleatoire() avec un minimum qui dois se situer au-dessus de -1 (minimum 0)
; Ensuite on met le maximum, la limite est de 9223372036854775807, soit un quad, et un pas (step) pour crée la liste de nombre aléatoire à partir de X, tous les X, jusqu'à X.
; Pour finir on appelle la commande DistribuerNombreAleatoire(), pour donner successivement (si c'est mis par exemple dans une boucle) autant de fois qu'il y a de carte
; pour tirer les cartes aléatoire.
Procedure.q CreeListeNombreAleatoire(Minimum.q, Maximum.q, Pas.q)
Global NewList NombreAleatoire.q()
If Minimum.q => Maximum.q
Minimum.q = Maximum.q - Pas.q
EndIf
If Minimum.q < 0
Minimum.q = 0
EndIf
If Maximum.q < 0
Maximum.q = 1
EndIf
If Maximum.q = 0 And Minimum.q = 0
Minimum.q = 0
Maximum.q = 1
EndIf
If Pas.q > Maximum.q - Minimum.q
Pas.q = Maximum.q
EndIf
If Pas.q <= 0
Pas.q = 1
EndIf
CreeListe.q = Minimum.q
Repeat
AddElement(NombreAleatoire.q())
NombreAleatoire.q() = CreeListe.q
CreeListe.q + Pas.q
Until CreeListe.q > Maximum.q
EndProcedure
Procedure.q DistribuerNombreAleatoire()
NombreElement.q = ListSize(NombreAleatoire.q())
If NombreElement.q > 0
Repeat
ElementAleatoire.q = Random(NombreElement.q) - 1
Until ElementAleatoire.q > -1 And ElementAleatoire.q <= NombreElement.q
SelectElement(NombreAleatoire.q(), ElementAleatoire.q)
NombreAleatoire.q = NombreAleatoire.q()
DeleteElement(NombreAleatoire.q(), 1)
ProcedureReturn NombreAleatoire.q
Else
ProcedureReturn -1
EndIf
EndProcedure
CreeListeNombreAleatoire(0, 10, 1)
Repeat
NombreAleatoire.q = DistribuerNombreAleatoire()
Debug NombreAleatoire.q
Until NombreAleatoire.q = -1