pour 50 entitées

Programmation avancée de jeux en PureBasic
chikun
Messages : 185
Inscription : sam. 21/juin/2008 13:36

pour 50 entitées

Message par chikun »

:? je debute en basic, merci a qui pe me donner la routine pour attibuer un numero chaque fois different à 50 entitées... 8O en gros la routine du loto suffira

merci
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message par Ollivier »

Une entité c'est un terme précis pour la 3D. Maintenant, je ne crois pas que ce soit cela que tu cherches :
- «On veut 50 variables numériques ayant une valeur entière différente entre 0 et 49 inclus»

1) On créée un domaine (tableau de 50 éléments)

Code : Tout sélectionner

Global Dim Project.L(49)
2) On attribue les 50 nombres respectifs aux 50 variables «Project»

Code : Tout sélectionner

For i = 0 To 49
  Project(i) = i
Next
3) On fait une boucle qui va mélanger 1000 fois les variables

Code : Tout sélectionner

For i = 1 To 1000
  Swap Project(Random(49) ), Project(Random(49) )
Next
4) On affiche le tout dans la fenêtre de déboguage :

Code : Tout sélectionner

For i = 0 To 49
  Debug Project(i)
Next
D'autres questions?
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

voici la routine de base des chiffres du loto

Code : Tout sélectionner

Dim a ( 6)
RandomSeed(ElapsedMilliseconds()) ; initialise le generateur de nombre aleatoire
For i = 1 To 6 ; pour 6 fois (6 numero = une grille)
    a(i) = Random(48)+1  ; on tire un chiffre au hasard entre 1 et  49
    Debug  "numero :"+Str(i)+" = "+ Str( a(i)) ; afffiche le resultat :o)
Next 
End
Frenchy Pilou
Messages : 2194
Inscription : jeu. 27/janv./2005 19:07

Message par Frenchy Pilou »

Et a routine du gros lot? :wink:
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

Frenchy Pilou a écrit :Et a routine du gros lot? :wink:
si je savais la faire, je ferai partie du financement de Purebasic (entre autre) :D
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Message par Thyphoon »

Sauf que là avec les routines données vous pouvez tomber plusieurs fois sur le même numéro, alors que ça doit être impossible pour les numéro du loto...enfin je crois car j'y ai jamais joué !! lolllllllll :P

Edit: Je critique mais je proposais pas de code, alors voilà j'ai modifier le code de Dobro (c'est du vite fait) :P

Code : Tout sélectionner

Dim a ( 6)
RandomSeed(ElapsedMilliseconds()) ; initialise le generateur de nombre aleatoire
For i = 1 To 6 ; pour 6 fois (6 numero = une grille)
    Ok=0
    Repeat

    a(i) = Random(48)+1  ; on tire un chiffre au hasard entre 1 et  49
      Ok=1; Normalement c'est bon 
      For z=1 To i-1 ; Sauf si on a déjà cette valeur 
        If a(i)=a(z)
          Ok=0
        EndIf
      Next
    Until Ok=1;
    Debug  "numero :"+Str(i)+" = "+ Str( a(i)) ; afffiche le resultat :o)
Next
End
Dernière modification par Thyphoon le lun. 23/juin/2008 6:43, modifié 3 fois.
Avatar de l’utilisateur
Huitbit
Messages : 940
Inscription : jeu. 08/déc./2005 5:19
Localisation : Guadeloupe

Message par Huitbit »

J'ai codé comme Gargamel :oops: mais ça peut rapporter le gologolo :lol: :lol:

Code : Tout sélectionner

;pureloto
;auteur Huitbit
;pb 4.20
Dim  grille.b(7)  
Dim grille_joueur.b(6)  

;affichage
OpenConsole()
PrintN("tirage du loto")
Repeat
  compteur=0
  complementaire=0
  ;tirage initial
  For i=1 To 7
    grille(i)=1+Random(48)
  Next i
  ;correction
  For i=1 To 7
    For j=1 To i
      If i<>j
        While grille(i)=grille(j)
          grille(i)=1+Random(48)
        Wend
      EndIf
    Next j
  Next i
  
  ;choix des boules
  For i=1 To 6
    PrintN("Choix d'une case "+Str(i)+" ([entrer] pour valider ) ")
    choix$=Input()
    While Val(choix$)<1 Or  Val(choix$)>49
      PrintN("Choisissez une autre case "+Str(i)+" !")
      choix$=Input()
    Wend
    If i>1
      For j=1 To i-1
        While Val(choix$)= grille_joueur(j) 
          PrintN("Choisissez une autre case "+Str(i)+" !")
          choix$=Input()
        Wend
      Next j
      While Val(choix$)<1 Or  Val(choix$)>49
        PrintN("Choisissez une autre case "+Str(i)+" !")
        choix$=Input()
      Wend
    EndIf
    grille_joueur(i)=Val(choix$)
  Next i
  
  ;verification de la grille
  For i=1 To 7
    For j=1 To 6
      If grille(i)=grille_joueur(j)
        compteur=compteur+1
      EndIf
      If grille(7)=grille_joueur(j)
        complementaire=1
      EndIf
    Next j 
  Next i
  ;affichage des resultats
  PrintN("")
  PrintN("<<<<<<<<<<>>>>>>>>>>")
  PrintN("Numeros joues :")
  For i =1 To 6
    Print(Str(grille_joueur(i))+" / ")
  Next i
  PrintN("")
  PrintN("")
  PrintN("Numeros gagnants : ")
  For i =1 To 6
    Print(Str(grille(i))+" / ")
  Next i
  Print("compl : "+Str(grille(7)))
  PrintN("")
  PrintN("resultat :"+Str(compteur)+" bon(s) numero(s)")
  If complementaire=1
    PrintN("vous avez le complementaire!")
  EndIf
  PrintN("")
  PrintN("")
ForEver
CloseConsole()
End 
Hasta la vista !
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

Thyphoon a écrit :Sauf que là avec les routines données vous pouvez tomber plusieurs fois sur le même numéro, alors que ça doit être impossible pour les numéro du loto...
exacte, j'avais omis ce petit detail :lol:
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Message par Thyphoon »

Dobro a écrit :
Thyphoon a écrit :Sauf que là avec les routines données vous pouvez tomber plusieurs fois sur le même numéro, alors que ça doit être impossible pour les numéro du loto...
exacte, j'avais omis ce petit detail :lol:
C'est peut être pour ça que tu n'as pas encore gagné au loto... tu te retrouvais a coché plusieurs fois la même case :lol:
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

Thyphoon a écrit :
Dobro a écrit :
Thyphoon a écrit :Sauf que là avec les routines données vous pouvez tomber plusieurs fois sur le même numéro, alors que ça doit être impossible pour les numéro du loto...
exacte, j'avais omis ce petit detail :lol:
C'est peut être pour ça que tu n'as pas encore gagné au loto... tu te retrouvais a coché plusieurs fois la même case :lol:
:D
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Message par Ar-S »

Ah la française des boeufs :)
kerkael
Messages : 97
Inscription : mer. 03/sept./2008 21:08

Message par kerkael »

Ollivier a écrit :

Code : Tout sélectionner

Global Dim Project.L(49)
For i = 0 To 49
  Project(i) = i
Next
For i = 1 To 1000
  Swap Project(Random(49) ), Project(Random(49) )
Next
For i = 0 To 49
  Debug Project(i)
Next
Super !
En fait, en Swapant Random(49) avec Random(49) tu demandes de prendre un élément au hasard, et d'échanger sa place avec un autre élément au hasard. Je comprends pourquoi il faut 1000 passages ...
Pour faire plus simple, il suffit de faire une boucle sur les 49 éléments et de les swaper au hasard.

Code : Tout sélectionner

For i = 0 To 49
  Swap Project(i), Project(Random(49))
Next 
Ainsi on est certain que chaque élément a été mélangé au moins une fois. Si on trouve que le mélange n'est pas suffisant, on fait 2 fois ce mélange. C'est plus efficace que de faire 1000 passages.

Code : Tout sélectionner

For passages=1 to 2
  For i = 0 To 49
    Swap Project(i), Project(Random(49))
 Next
Next 
Dernière modification par kerkael le jeu. 25/sept./2008 16:31, modifié 1 fois.
jbernard13
Messages : 1501
Inscription : dim. 18/avr./2004 15:04
Localisation : sud de la france

Message par jbernard13 »

le loto va changé c'est 5 numero maintenant et plus 6
Répondre