/// <summary> /// Génère l'événement Gained si on gestionnaire a été déclaré /// </summary> /// <param name="e"></param> protected void OnGained(PliGainedEventArgs e) { if (PliGainedEvent != null) { PliGainedEvent(this, e); } }
/// <summary> /// Gestionnaire d'événement pour l'événement Gained défini dans Bataille /// Evenement généré à la fin de chaque pli pour indiquer l'état du jeu à la suite de ce dernier /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void PliGagnee(object sender, PliGainedEventArgs e) { this.Invoke((MethodInvoker) delegate() { this.rtbDisplay.AppendText("\n"); this.rtbDisplay.AppendText("Gagnant du pli : " + e.Gagnant.Nom + " avait " + e.Gagnant.Main.Count + " cartes. \n"); this.rtbDisplay.AppendText("Il gagne sur le dernier pli :\n"); foreach (Carte carte in e.Pli) { this.rtbDisplay.AppendText("\t- " + carte + "\n"); } if (e.Bataille.Count != 0) { this.rtbDisplay.AppendText("Il gagne grâce aux batailles :\n"); foreach (Carte carte in e.Bataille) { this.rtbDisplay.AppendText("\t- " + carte + "\n"); } } this.rtbDisplay.AppendText("Le perdant du pli : " + e.Perdant.Nom + " avait encore " + e.Perdant.Main.Count + "\n"); this.rtbDisplay.ScrollToCaret(); this.lblJ1NbCard.Text = "Nb Cartes : " + e.Joueurs[0].Main.Count; this.lblJ2NbCard.Text = "Nb Cartes : " + e.Joueurs[1].Main.Count; }); }
/// <summary> /// Joue tous les plis d'une partie afin de déterminer le vainqueur /// </summary> /// <param name="joueurs">La liste des joueurs participants. Pour notre GUI il vaut mieux se limiter à 2 joueurs</param> /// <returns>Le Joueur gagnant de la partie</returns> private Joueur JouerPartie(List <Joueur> joueurs) { int i = 1; bool jouer = true; Joueur gagnant = null; while (jouer) { // On limite le nombre de pli à 1000 ce qui donne des parties de 1 minute environ if (i >= 1000) { jouer = false; gagnant = null; } i++; // On laisse au système un peu de temps pour gérer les taches courantes System.Threading.Thread.Sleep(5); // On vérifie si l'un des joueur n'a plus de carte ce qui signifie alors que l'on a un gagnant if ((joueurs[0].Main.Count() == 0)) { jouer = false; gagnant = joueurs[1]; } else if (joueurs[1].Main.Count() == 0) { jouer = false; gagnant = joueurs[0]; } // Si on a pas de gagnant il faut continuer à jouer if (jouer) { Stack <Carte> pliActuelle = new Stack <Carte>(); Stack <Carte> batailleActuelle = new Stack <Carte>(); PliGainedEventArgs args = new PliGainedEventArgs(); int perdantPli; // On joue un pli int gagnantPli = JouerPli(joueurs, ref pliActuelle, ref batailleActuelle); // On prépare les données qui seront envoyer dans l'événement PliGained args.Gagnant = joueurs[gagnantPli]; // On calcule qui est le perdant if (gagnantPli == 0) { perdantPli = 1; } else { perdantPli = 0; } args.Perdant = joueurs[perdantPli]; // On crée des copie des Stack pour pouvoir utiliser Pop() sans vider les Stack utilisés dans la Bataille args.Pli = new Stack <Carte>(pliActuelle); args.Bataille = new Stack <Carte>(batailleActuelle); args.Joueurs = joueurs; // On génère l'événement PliGained OnGained(args); // On donne les cartes en jeux au vainqueur foreach (Carte carte in pliActuelle) { joueurs[gagnantPli].Main.Enqueue(carte); } foreach (Carte carte in batailleActuelle) { joueurs[gagnantPli].Main.Enqueue(carte); } } } return(gagnant); }