C# probleme deboggage
pierre56
-
pierre56 -
pierre56 -
Bonjour,
je débute la programmation et je veux réaliser un jeu de poker texas hold'em en C# pour mon bureau( j'utilise visual c# 2008 express).
Mais quand je distribue les carte, mon programme disribue toujours la même carte. Je ne comprends pas pourquoi, d'autant plus que quand j'execute chaque instruction pas à pas (en plaçant des break points à chaque ligne ou en appuyant frénétiquement sur F11) ça marche parfaitement.
Merci pour votre aide.
dans le frmMain :
private void btnouvellePartie_Click(object sender, EventArgs e)
{
clsJeu cettePartie = new clsJeu();
clsCarte C1J1 = cettePartie.deck.getOneCard();
clsCarte C2J1 = cettePartie.deck.getOneCard();
clsCarte C1J2 = cettePartie.deck.getOneCard();
clsCarte C2J2 = cettePartie.deck.getOneCard();
clsCarte flop1 = cettePartie.deck.getOneCard();
clsCarte flop2 = cettePartie.deck.getOneCard();
clsCarte flop3 = cettePartie.deck.getOneCard();
clsCarte turn = cettePartie.deck.getOneCard();
clsCarte river = cettePartie.deck.getOneCard();
lblCarte1Joueur1.Text = C1J1.Name;
lblCarte2Joueur1.Text = C2J1.Name;
lblCarte1Joueur2.Text = C1J2.Name;
lblCarte2Joueur2.Text = C2J2.Name;
txtFlop1.Text = flop1.Name;
txtFlop2.Text = flop2.Name;
txtFlop3.Text = flop3.Name;
txtTurn.Text = turn.Name;
txtRiver.Text = river.Name;
}
maintenant clsDeck :
using System;
class clsDeck
{
// =============== symbolic constants ==================
private const int DECKSIZE = 51; // nombre de cartes - 1
// =============== static members ======================
// =============== instance members =====================
public static clsCarte[] cards;
// =============== constructor(s) ======================
public clsDeck()
{
cards = new clsCarte[DECKSIZE + 1];
for (int i = 0; i <= DECKSIZE; i++)
{
int k = i % 13;
if(i <= 52)
cards[i] = new clsCarte();
int j = i % 4;
switch (j)
{
case 0:
cards[i].Couleur = "S";
cards[i].Valeur = k + 1;// pour avoir une valeur de 1 à 13
switch (k + 1)
{
case 11:
cards[i].Name = "J" + "S";
break;
case 12:
cards[i].Name = "Q" + "S";
break;
case 13:
cards[i].Name = "K" + "S";
break;
case 1:
cards[i].Name = "A" + "S";
break;
default:
cards[i].Name = cards[i].Valeur.ToString() + "S";
break;
}
break;
case 1:
cards[i].Couleur = "C";
cards[i].Valeur = k + 1;
switch (k + 1)
{
case 11:
cards[i].Name = "J" + "C";
break;
case 12:
cards[i].Name = "Q" + "C";
break;
case 13:
cards[i].Name = "K" + "C";
break;
case 1:
cards[i].Name = "A" + "C";
break;
default:
cards[i].Name = cards[i].Valeur.ToString() + "C";
break;
}
break;
case 2:
cards[i].Couleur = "D";
cards[i].Valeur = k + 1;
switch (k + 1)
{
case 11:
cards[i].Name = "J" + "D";
break;
case 12:
cards[i].Name = "Q" + "D";
break;
case 13:
cards[i].Name = "K" + "D";
break;
case 1:
cards[i].Name = "A" + "D";
break;
default:
cards[i].Name = cards[i].Valeur.ToString() + "D";
break;
}
break;
case 3:
cards[i].Couleur = "H";
cards[i].Valeur = k + 1;
switch (k + 1)
{
case 11:
cards[i].Name = "J" + "H";
break;
case 12:
cards[i].Name = "Q" + "H";
break;
case 13:
cards[i].Name = "K" + "H";
break;
case 1:
cards[i].Name = "A" + "H";
break;
default:
cards[i].Name = cards[i].Valeur.ToString() + "H";
break;
}
break;
}
}
}
// =============== property methods =====================
public int DeckSize
{
get
{
return DECKSIZE; // How many cards in the deck
}
}
// =============== helper methods =======================
// =============== general methods ======================
/**
* Purpose: tirer une carte
*/
public clsCarte getOneCard()
{
clsCarte carte = new clsCarte();
int val;
Random rnd = new Random();
val = rnd.Next(DECKSIZE); // pour avoir une valeur de 0 à 51
if (cards[val].Couleur == null) //pour verifier si la carte a déjà été tirée
{
return getOneCard();
}
carte = cards[val] ; //on assigne à i la valeur val pour pouvoir se debarasser de val ensuite
cards[val].Couleur = null;
return carte;
}
}
je débute la programmation et je veux réaliser un jeu de poker texas hold'em en C# pour mon bureau( j'utilise visual c# 2008 express).
Mais quand je distribue les carte, mon programme disribue toujours la même carte. Je ne comprends pas pourquoi, d'autant plus que quand j'execute chaque instruction pas à pas (en plaçant des break points à chaque ligne ou en appuyant frénétiquement sur F11) ça marche parfaitement.
Merci pour votre aide.
dans le frmMain :
private void btnouvellePartie_Click(object sender, EventArgs e)
{
clsJeu cettePartie = new clsJeu();
clsCarte C1J1 = cettePartie.deck.getOneCard();
clsCarte C2J1 = cettePartie.deck.getOneCard();
clsCarte C1J2 = cettePartie.deck.getOneCard();
clsCarte C2J2 = cettePartie.deck.getOneCard();
clsCarte flop1 = cettePartie.deck.getOneCard();
clsCarte flop2 = cettePartie.deck.getOneCard();
clsCarte flop3 = cettePartie.deck.getOneCard();
clsCarte turn = cettePartie.deck.getOneCard();
clsCarte river = cettePartie.deck.getOneCard();
lblCarte1Joueur1.Text = C1J1.Name;
lblCarte2Joueur1.Text = C2J1.Name;
lblCarte1Joueur2.Text = C1J2.Name;
lblCarte2Joueur2.Text = C2J2.Name;
txtFlop1.Text = flop1.Name;
txtFlop2.Text = flop2.Name;
txtFlop3.Text = flop3.Name;
txtTurn.Text = turn.Name;
txtRiver.Text = river.Name;
}
maintenant clsDeck :
using System;
class clsDeck
{
// =============== symbolic constants ==================
private const int DECKSIZE = 51; // nombre de cartes - 1
// =============== static members ======================
// =============== instance members =====================
public static clsCarte[] cards;
// =============== constructor(s) ======================
public clsDeck()
{
cards = new clsCarte[DECKSIZE + 1];
for (int i = 0; i <= DECKSIZE; i++)
{
int k = i % 13;
if(i <= 52)
cards[i] = new clsCarte();
int j = i % 4;
switch (j)
{
case 0:
cards[i].Couleur = "S";
cards[i].Valeur = k + 1;// pour avoir une valeur de 1 à 13
switch (k + 1)
{
case 11:
cards[i].Name = "J" + "S";
break;
case 12:
cards[i].Name = "Q" + "S";
break;
case 13:
cards[i].Name = "K" + "S";
break;
case 1:
cards[i].Name = "A" + "S";
break;
default:
cards[i].Name = cards[i].Valeur.ToString() + "S";
break;
}
break;
case 1:
cards[i].Couleur = "C";
cards[i].Valeur = k + 1;
switch (k + 1)
{
case 11:
cards[i].Name = "J" + "C";
break;
case 12:
cards[i].Name = "Q" + "C";
break;
case 13:
cards[i].Name = "K" + "C";
break;
case 1:
cards[i].Name = "A" + "C";
break;
default:
cards[i].Name = cards[i].Valeur.ToString() + "C";
break;
}
break;
case 2:
cards[i].Couleur = "D";
cards[i].Valeur = k + 1;
switch (k + 1)
{
case 11:
cards[i].Name = "J" + "D";
break;
case 12:
cards[i].Name = "Q" + "D";
break;
case 13:
cards[i].Name = "K" + "D";
break;
case 1:
cards[i].Name = "A" + "D";
break;
default:
cards[i].Name = cards[i].Valeur.ToString() + "D";
break;
}
break;
case 3:
cards[i].Couleur = "H";
cards[i].Valeur = k + 1;
switch (k + 1)
{
case 11:
cards[i].Name = "J" + "H";
break;
case 12:
cards[i].Name = "Q" + "H";
break;
case 13:
cards[i].Name = "K" + "H";
break;
case 1:
cards[i].Name = "A" + "H";
break;
default:
cards[i].Name = cards[i].Valeur.ToString() + "H";
break;
}
break;
}
}
}
// =============== property methods =====================
public int DeckSize
{
get
{
return DECKSIZE; // How many cards in the deck
}
}
// =============== helper methods =======================
// =============== general methods ======================
/**
* Purpose: tirer une carte
*/
public clsCarte getOneCard()
{
clsCarte carte = new clsCarte();
int val;
Random rnd = new Random();
val = rnd.Next(DECKSIZE); // pour avoir une valeur de 0 à 51
if (cards[val].Couleur == null) //pour verifier si la carte a déjà été tirée
{
return getOneCard();
}
carte = cards[val] ; //on assigne à i la valeur val pour pouvoir se debarasser de val ensuite
cards[val].Couleur = null;
return carte;
}
}