Boucle while et condition if [Résolu]

Signaler
Messages postés
19
Date d'inscription
jeudi 14 décembre 2006
Statut
Membre
Dernière intervention
17 août 2007
-
Messages postés
19
Date d'inscription
jeudi 14 décembre 2006
Statut
Membre
Dernière intervention
17 août 2007
-
Bonjour à tous,  je réalise un programme de poker pour la fin de l'année mais je cale sur un point ou je dois verifier si les joueurs on une paire.

voici le code :

int z = 1;
while

(z == 5) {
if ((C1J1 % 13 1) & (CzJ3 % 13 1)){
this.mainj1.Text "Vous avez une paire d'as";winJ1 13;

}

j'aimerais avoir C1J3 puis C2J3 jusque C5J3

il me met une erreur, je ne vois pas comment faire. Pourriez vous m'aider svp.

Merci d'avance

8 réponses

Messages postés
1024
Date d'inscription
mardi 4 février 2003
Statut
Membre
Dernière intervention
7 juin 2010
60
Hello,

Quelques détails :
Comme je te l'ai dis dans mon premier message, while (z == 5)  signifie tant que z est égal à 5.
Il est donc normal que tu ne trouve rien, puisqu'il sort de la boucle directement.

Ensuite, les tablaux commencent à l'index 0, et non 1, donc en principe, tu as
CJ1[0] CJ1[1]
CJ2[0] CJ2[1]
CJ3[0] CJ3[1] CJ3[2] CJ3[3] CJ3[4]

Donc si tu tiens vraiment à faire une boucle while, tu met comme condition while (z<5).
Mais une solution plus élégante consiste à utiliser une boucle for :
for (int i =0;i<CJ3.length;i++)
{
//intérieur de ta boucle.
}

Ensuite, vérifier chaque hauteur, ce n'est vraiment pas une manière de programmer.

Fais trois méthodes :

private string GetName(int card)
{
switch (card%13)
{
case 1:
return "d'as";
case 2:
return "de deux";
case 3:
return "de trois";
case 4:
return "de quatre";
case 5:
return "de cinq";
case 6:
return "de six";
case 7:
return "de sept";
case 8:
return "de huit";
case 9:
return "de neuf";
case 10:
return "de dix";
case 11:
return "de valet";
case 12:
return "de dame";
case 0:
return "de roi";
}
return "";
}

et

private int GetScore(int card){
switch (card % 13)
{
case 1:
return 13;
case 0:
return 12;
default:
return (card % 13) - 1;
}
}

Et enfin

public void CheckPairs(int card)
{
for (int i =0;i<CJ3.length;i++)
{
if (card%13 == CJ3%13)
{
this.mainj1.Text = "Vous avez une paire "+GetName(card);
winJ1 = GetScore(card);
}
}
}

De cette manière, tu peux appeler cette méthode avec la carte CJ1[0], mais aussi avec les cartes CJ1[1], CJ2[0], et CJ2[1].

Ne te vexes pas, mais j'ai l'impression que tu n'as pas beaucoup d'expérience en programmation.
N'hésite pas à aller un peu sur internet non seulement pour poser  des question, mais aussi pour trouver des tutoriels, qui pourront beaucoup t'apprendre.

Amicalement, SharpMao
Messages postés
1024
Date d'inscription
mardi 4 février 2003
Statut
Membre
Dernière intervention
7 juin 2010
60
Hello,

alors plusieurs choses

tu notes while (z==5)
ce qui veut dire tant que z est égal à 5, comme z est initialisé à 1 juste avant, il ne fait rien.
Ensuite, tu ne peux pas boucler sur des variables, amsi sur des tableaux, ou des listes

int[] CJ1 = new int[5]//Cartes du joueur 1
(Pour la suite, j'admet que ce tableau est rempli avec les cartes du joueru 1)

à ce moment, tu doit faire deux boucles, pour controler les cartes

for(int i = 0;i<CJ1.length-1;i++)
{
   for(int j = i+1;j<CJ1.length;j++)
   {
      if(CJ1[i]%13 == CJ1[j]%13)
         this.mainj1.Text = "Vous avez une paire"

   }
}

Avec ces deux boucles, tu controles la 1ère carte avec les 4 autres, la deuxième avec les trois suivantes,...

Une dernière chose, comme tu as pu le constater, j'ai enlevé la référence à la paire d'as.
Tu peux comparer de manière générale, et en resortir la valeur.

Attention tout de même, avec ce système, si tu as un brelan, il te marquera trois paires !

Si tu as d'autres questions, n'hésite pas.

Amicalement, SharpMao
Messages postés
19
Date d'inscription
jeudi 14 décembre 2006
Statut
Membre
Dernière intervention
17 août 2007

Merci bcp pour la réponse mais ce qu'il y a c'est que avant je donnais des points quand s'était une paire d'as ou une paire de deux comme ca, je sais qui à la plus haute main :s

J'aurais pas du choisir ce jeux lol

je m'embrouille avec mes conditions pour savoir qui a quoi comme carte :(

Merci de ton aide.
Messages postés
1024
Date d'inscription
mardi 4 février 2003
Statut
Membre
Dernière intervention
7 juin 2010
60
Hello,

Encore une autre méthode :

int[]
CardsOfPlayer1 =
new
int[13];

for (
int
i = 0;
i <
CJ1.
Length - 1;
i++)
{

   CardsOfPlayer1[
CJ1[
i] % 13]++;
}

//vérifie les paires, brelan, carrés,...
for (
int
i=0;
i<13;
i++)
{

   switch (
CardsOfPlayer1[
i])
   {

      case 2:

         //Ici, tu connais La hauteur decimal la carte, par la variable i. 
         //Il faut juste faire attention, si i=0, Ca signifie roi (si le roi = 13, 13 % 13 = 0)
          this.mainj1.Text =
Vous avez une paire";

         break;

      case 3:
          this.mainj1.Text =
Vous avez un brelan";

         break;

      case 4:
          this.mainj1.Text =
Vous avez un carré";

         break;
   }
}

Amicalement, SharpMao
Messages postés
1024
Date d'inscription
mardi 4 février 2003
Statut
Membre
Dernière intervention
7 juin 2010
60
Oups,
il y a eu un petit problème avec le commentaire, il faut lire :

case 2:

         //Ici, tu connais la hauteur de la carte, par la variable i. 

Amicalement, SharpMao
Messages postés
19
Date d'inscription
jeudi 14 décembre 2006
Statut
Membre
Dernière intervention
17 août 2007

Merci, j'essayerai ca tantot en rentrant.

Amicalement, Nico
Messages postés
19
Date d'inscription
jeudi 14 décembre 2006
Statut
Membre
Dernière intervention
17 août 2007

J'ai modifier mon code pour mieu comprendre ton systeme.

Maintenant j'ai
CJ1[1] CJ1[2]
CJ2[1] CJ2[2]
CJ3[1] CJ3[2] CJ3[3] CJ3[4] CJ3[5] 

donc dans mon jeux j'ai deux joueurs qui ont 2 cartes chacun au début CJ1 CJ2.

puis les 5 cartes sur la table que les joueurs peuvent utiliser CJ3

ici j'aimerais verifier les paires en faisant un test sur la CJ1[1] et les cartes CJ3[1,2,3,4,5]

voici mon code :

// boucle pour verifier si les joueurs ont une paire avec leur jeux et le jeux du j3

while (z == 5) {

if ((CJ1[1] % 13 == 1) & (CJ3[z] % 13 == 1)){
this.mainj1.Text "Vous avez une paire d'as"; // simple indication au joueurswinJ1 13; // ici j'atribue des points aux diff mains la paire d'as bat la paire de deux etc

}

else{

if ((CJ1[1] % 13 == 2) & (CJ3[z] % 13 == 2)){
this.mainj1.Text "Vous avez une paire de deux";winJ1 1;

}

else{

if ((CJ1[1] % 13 == 3) & (CJ3[z] % 13 == 3)){
this.mainj1.Text "Vous avez une paire de trois";winJ1 2;

}

else{

if ((CJ1[1] % 13 == 4) & (CJ3[z] % 13 == 4)){
this.mainj1.Text "Vous avez une paire de quatre";winJ1 3;

}

else{

if ((CJ1[1] % 13 == 5) & (CJ3[z] % 13 == 5)){
this.mainj1.Text "Vous avez une paire de cinq";winJ1 4;

}

else{

if ((CJ1[1] % 13 == 6) & (CJ3[z] % 13 == 6)){
this.mainj1.Text "Vous avez une paire de six";winJ1 5;

}

else{

if ((CJ1[1] % 13 == 7) & (CJ3[z] % 13 == 7)){
this.mainj1.Text "Vous avez une paire de sept";winJ1 6;

}

else{

if ((CJ1[1] % 13 == 8) & (CJ3[z] % 13 == 8)){
this.mainj1.Text "Vous avez une paire de huit";winJ1 7;

}

else{

if ((CJ1[1] % 13 == 9) & (CJ3[z] % 13 == 9)){
this.mainj1.Text "Vous avez une paire de neuf";winJ1 8;

}

else{

if ((CJ1[1] % 13 == 10) & (CJ3[z] % 13 == 10)){
this.mainj1.Text "Vous avez une paire de dix";winJ1 9;

}

else{

if ((CJ1[1] % 13 == 11) & (CJ3[z] % 13 == 11)){
this.mainj1.Text "Vous avez une paire de vallet";winJ1 10;

}

else{

if ((CJ1[1] % 13 == 12) & (CJ3[z] % 13 == 12)){
this.mainj1.Text "Vous avez une paire de Dame";winJ1 11;

}

else{

if ((CJ1[1] % 13 == 0) & (CJ3[z] % 13 == 0)){
this.mainj1.Text "Vous avez une paire de roi";winJ1 12;

}

else{

}

}

}

}

}

}

}

}

}

}

}

}

}

z = z + 1;

}

Merci d'avance Amicalement, Nico
Messages postés
19
Date d'inscription
jeudi 14 décembre 2006
Statut
Membre
Dernière intervention
17 août 2007

Merci de ton aide, oui je débute en programmation ;)

je crois que je ne prendrai pas cette option la l'année prochaine ;)

je commence à comprendre, ca fct avec une boucle for :)

je vais essayer ton code et voir quoi, merci beaucoup.

Amicalement, Nico