Générer 9 nombres différents entre 1 et 52

Résolu
Cybersnap Messages postés 19 Date d'inscription jeudi 14 décembre 2006 Statut Membre Dernière intervention 17 août 2007 - 17 mai 2007 à 16:06
Cybersnap Messages postés 19 Date d'inscription jeudi 14 décembre 2006 Statut Membre Dernière intervention 17 août 2007 - 25 mai 2007 à 16:26
Bonjour, je réalise un jeux de poker. Je dois générer 9 cartes 2 pour le 1er joueur, 2 pour le 2eme. Et les 5 cartes du millieu.

J'ai un probleme car le jeu de poker ce joue qu'avec un seul jeux de carte :(

et ici, il me génére des fois les mm cartes donc j'aimerais trouver un algorithme qui me permet de générer 9 cartes différentes.
voici mon code :

CJ1[1] = Hasard.

Hasard.RandomMinMax(1, 52);
// utilise la fct hasard et genere un nbr entre 1 et 52CJ1[2] = Hasard.

Hasard.RandomMinMax(1, 52);
// pour afficher une des 52 cartes 1-13 coeur 14-26 pique ...CJ2[1] = Hasard.

Hasard.RandomMinMax(1, 52);CJ2[2] = Hasard.

Hasard.RandomMinMax(1, 52);CJ3[1] = Hasard.

Hasard.RandomMinMax(1, 52);CJ3[2] = Hasard.

Hasard.RandomMinMax(1, 52);CJ3[3] = Hasard.

Hasard.RandomMinMax(1, 52);CJ3[4] = Hasard.

Hasard.RandomMinMax(1, 52);CJ3[5] = Hasard.

Hasard.RandomMinMax(1, 52);

CarteJ11.Image =

new
Bitmap(
"Resources\\Bitmap_" + CJ1[1] +
".bmp");
// affichage des cartes en bitmapCarteJ12.Image =

new
Bitmap(
"Resources\\Bitmap_" + CJ1[2] +
".bmp");CarteJ21.Image =

new
Bitmap(
"Resources\\Bitmap_" + CJ2[1] +
".bmp");CarteJ22.Image =

new
Bitmap(
"Resources\\Bitmap_" + CJ2[2] +
".bmp");CarteJ31.Image =

new
Bitmap(
"Resources\\Bitmap_" + CJ3[1] +
".bmp");CarteJ32.Image =

new
Bitmap(
"Resources\\Bitmap_" + CJ3[2] +
".bmp");CarteJ33.Image =

new
Bitmap(
"Resources\\Bitmap_" + CJ3[3] +
".bmp");CarteJ34.Image =

new
Bitmap(
"Resources\\Bitmap_" + CJ3[4] +
".bmp");CarteJ35.Image =

new
Bitmap(
"Resources\\Bitmap_" + CJ3[5] +
".bmp");

Merci d'avance.

Nico

15 réponses

SharpMao Messages postés 1024 Date d'inscription mardi 4 février 2003 Statut Membre Dernière intervention 7 juin 2010 69
25 mai 2007 à 16:21
Je viens de m'apercevoir que j'ai fait une erreur de frappe dans ma dernière méthode :

result.Add(DrawRandomCard(deck,r));

il manquait la dernière parenthèse.

Bon week-end, SharpMao

"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)
3
gbourgeois0019 Messages postés 152 Date d'inscription lundi 3 avril 2006 Statut Membre Dernière intervention 2 juin 2008 1
17 mai 2007 à 19:00
Garde les cartes que tu as déjà dans un tableau et puis lorsque tu prend une autre carte au hasard vérifie qu'elle n'est pas dans le tableau ;-)

________________________________________________________________________
Hardware is what we play with until it breaks, Software is what we play with until it works !
0
cs_0xYg3n3 Messages postés 115 Date d'inscription mardi 1 février 2005 Statut Membre Dernière intervention 8 octobre 2007
18 mai 2007 à 11:13
Et pourquoi pas une collection, hashtable ou liste.
Lorsque tu fais ton random (valeur X), tu le bornes de 0 a Collection.Count ensuite tu supprime l'élement à la position X.

Bien sûr en début de chaque partie tu réinitialise ta collection, hashtable ou liste.
0
Cybersnap Messages postés 19 Date d'inscription jeudi 14 décembre 2006 Statut Membre Dernière intervention 17 août 2007
18 mai 2007 à 17:17
Je débute en programmation :$

je ne comprend pas bien vos méthode. :s

Nico
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Cybersnap Messages postés 19 Date d'inscription jeudi 14 décembre 2006 Statut Membre Dernière intervention 17 août 2007
25 mai 2007 à 11:57
Merci de m'avoir mit sur la voie.


verif:



for
(b 1; b 52; b++)



{



for
(n 0; n 8; n++)



{


c++;



if
(generer[n].Equals(b) == generer[c].Equals(b))



{


generer.Clear();


CJ1[1] = Hasard.Hasard.RandomMinMax(1, 52);
// utilise la fct hasard et genere un nbr entre 1 et 52



CJ1[2] = Hasard.




Hasard
.RandomMinMax(1, 52);

// pour afficher une des 52 cartes

CJ2[1] = Hasard.




Hasard
.RandomMinMax(1, 52);CJ2[2] = Hasard.


Hasard
.RandomMinMax(1, 52);CJ3[1] = Hasard.


Hasard
.RandomMinMax(1, 52);CJ3[2] = Hasard.


Hasard
.RandomMinMax(1, 52);CJ3[3] = Hasard.


Hasard
.RandomMinMax(1, 52);CJ3[4] = Hasard.


Hasard
.RandomMinMax(1, 52);CJ3[5] = Hasard.


Hasard
.RandomMinMax(1, 52);generer.Add(CJ1[1]);

generer.Add(CJ1[2]);

generer.Add(CJ2[1]);

generer.Add(CJ2[2]);

generer.Add(CJ3[1]);

generer.Add(CJ3[2]);

generer.Add(CJ3[3]);

generer.Add(CJ3[4]);

generer.Add(CJ3[5]);

generer.Sort();

c = 1;


goto
verif;}


else

{


}


}
0
SharpMao Messages postés 1024 Date d'inscription mardi 4 février 2003 Statut Membre Dernière intervention 7 juin 2010 69
25 mai 2007 à 13:55
Et ce que tu as mis fonctionne ???

Les boucles for ne fonctionnent pas comme tu l'as mis, mais comme ça :

for(int i=0;i<n;i++)  //signifie pour i commençant à 0 et tant que i<n, boucle et incrémente i de 1

Voici quelques méthodes qui doivent fonctionner :
        ///<summary><?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>

        /// Tire une carte au hasard dans un paquet et l'enlève du paquet.

        ///</summary>

        ///Le paquet de cartes.

        ///Générateur de nombres pseudo-aléatoirs.

        ///<returns>La carte tirée.</returns>

        privateintDrawRandomCard(List<int> deck,Randomr)

        {

            intindex = r.Next(deck.Count);

            intres = deck[index];

            deck.RemoveAt(index);

            returnres;

        }

 

        ///<summary>

        /// Construit un paquet de cartes ordrées

        ///</summary>

        ///La capacité du paquet.

        ///<returns>Le paquet de carte</returns>

        privateList<int> BuildOrderedDeck(intcapacity)

        {

            List<int> res = newList<int>(capacity);

            for (inti=0;i<capacity;i++)

                res.Add(i);

            returnres;

        }

 

        ///<summary>

        /// Construit et brasse un paquet de carte.

        ///</summary>

        ///La capacité du paquet.

        ///Le nombre d'échange de carte pour brasser le paquet.

        ///<returns>Le paquet de carte</returns>

        privateList<int> BuildShuffledDeck(intcapacity, intswapCount)

        {

            List<int> deck =BuildOrderedDeck(capacity);

            Randomr = newRandom();

            for (inti = 0; i < swapCount; i++)

            {

                intindex1 = r.Next(capacity);

                intindex2 = r.Next(capacity);

 

                inttemp = deck[index1];

                deck[index1] = deck[index2];

                deck[index2] = temp;

            }

            returndeck;

        }
Alors soit tu construits un paquet trié avec BuildOrderedDeck et tu tires les carte aléatoirement dans ce paquet à l'aide de la méthode DrawRandomCard, soit tu construits ton paquet brassé avecBuildShuffledDeck, et tu peux les tirer à la suite.

Amicalement, SharpMao

"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)
0
SharpMao Messages postés 1024 Date d'inscription mardi 4 février 2003 Statut Membre Dernière intervention 7 juin 2010 69
25 mai 2007 à 13:58
@#°#@#@§

(pour ne pas dire autre chose)

Désolé pour le formattage, cette fois j'espère que ça va passer.

               /// <summary>
        /// Tire une carte au hasard dans un paquet et l'enlève du paquet.
        /// </summary>
        /// Le paquet de cartes.

        /// Générateur de nombres pseudo-aléatoirs.

        /// <returns>La carte tirée.</returns>
        private int DrawRandomCard(List deck,Random r)
        {
            int index = r.Next(deck.Count);
            int res = deck[index];
            deck.RemoveAt(index);
            return res;
        }

        /// <summary>
        /// Construit un paquet de cartes ordrées
        /// </summary>
        /// La capacité du paquet.

        /// <returns>Le paquet de carte</returns>
        private List BuildOrderedDeck(int capacity)
        {
            List res = new List(capacity);
            for (int i=0;i<capacity;i++)
                res.Add(i);
            return res;
        }

        /// <summary>
        /// Construit et brasse un paquet de carte.
        /// </summary>
        /// La capacité du paquet.

        /// Le nombre d'échange de carte pour brasser le paquet.

        /// <returns>Le paquet de carte</returns>
        private List BuildShuffledDeck(int capacity, int swapCount)
        {
            List deck =BuildOrderedDeck(capacity);
            Random r = new Random();
            for (int i = 0; i < swapCount; i++)
            {
                int index1 = r.Next(capacity);
                int index2 = r.Next(capacity);

                int temp = deck[index1];
                deck[index1] = deck[index2];
                deck[index2] = temp;
            }
            return deck;
        }

Amicalement, SharpMao

"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)
0
SharpMao Messages postés 1024 Date d'inscription mardi 4 février 2003 Statut Membre Dernière intervention 7 juin 2010 69
25 mai 2007 à 14:15
Ou alors, une autre méthode pour avoir un paquet brassé :

 /// <summary>
 /// Construit et brasse un paquet de carte.
 /// </summary>
 /// La capacité du paquet.

 /// <returns>Le paquet de carte</returns>
 private List BuildShuffledDeck(int capacity)
 {
  List deck = BuildOrderedDeck(capacity);
  List result = new List(capacity);
  Random r = new Random();
  for (int i = 0; i < capacity; i++)
  {
   result.Add(DrawRandomCard(deck,r);
  }
  return result;
 }

Amicalement, SharpMao

"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)
0
Cybersnap Messages postés 19 Date d'inscription jeudi 14 décembre 2006 Statut Membre Dernière intervention 17 août 2007
25 mai 2007 à 14:53
Oui ca fct comme ca. Pour ma boucle for, je déclare tt mes variables au dessus de mon programme. Et ce qui est du i ==52 ca fct aussi puisque je part de 1 jusque la 52eme carte donc qd je suis à la 52eme je quitte la boucle.
0
SharpMao Messages postés 1024 Date d'inscription mardi 4 février 2003 Statut Membre Dernière intervention 7 juin 2010 69
25 mai 2007 à 15:01
Désolé, mais c'est impossible
for(b 1; b 52; b++)
 
signifie pour B=1 et tant que b est égal à 52 comme il vérifie la comdition à l'entrée, et qu'elle n'est pas valide, il ne passe pas dasn la boucle.

si tu veux faire une boucle qui va de 1 à 52, tu fais
for (b=1 ;b<=52;b++)

Amicalement, SharpMao

"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)
0
Cybersnap Messages postés 19 Date d'inscription jeudi 14 décembre 2006 Statut Membre Dernière intervention 17 août 2007
25 mai 2007 à 15:20
ca fct comme j'ai mit et pas comme tu me dis.
je n'ai plus de doublon et qd je met b<=52 il me met erreur :(
0
SharpMao Messages postés 1024 Date d'inscription mardi 4 février 2003 Statut Membre Dernière intervention 7 juin 2010 69
25 mai 2007 à 15:46
Ecoute, si ton code fonctionne, je veux bien manger mon diplôme.

Essaie ça :

for (
int
i = 1;
i == 52;
i++)
{

   MessageBox.
Show(
"J'y suis.");
}

MessageBox.
Show(
"J'ai terminé.");
D'après ce que tu me dis, cette boucle devrait s'effectuer 52 fois et t'afficer 52 fois "J'y suis."  
Tu verras bien qu'en fait il affiche directement "J'ai terminé.".

Amicalement, SharpMao

"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)
0
Cybersnap Messages postés 19 Date d'inscription jeudi 14 décembre 2006 Statut Membre Dernière intervention 17 août 2007
25 mai 2007 à 16:18
Argh il vient de m'afficher deux fois les mm cartes :'(
Mais si je met i <= 52 ca ne vas pas, il plante :s
0
SharpMao Messages postés 1024 Date d'inscription mardi 4 février 2003 Statut Membre Dernière intervention 7 juin 2010 69
25 mai 2007 à 16:20
C'est bien ce que je disais, ça ne marche pas.

Utilise les méthodes que j'ai écrites, ça doit fonctionner sans problèmes.

Amicalement, SharpMao

"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)
0
Cybersnap Messages postés 19 Date d'inscription jeudi 14 décembre 2006 Statut Membre Dernière intervention 17 août 2007
25 mai 2007 à 16:26
Merci
0
Rejoignez-nous