/// <summary> /// Génère l'événement Played si on gestionnaire a été déclaré /// </summary> /// <param name="e"></param> protected void OnPlayed(PlayedEventArgs e) { if (PlayedEvent != null) { PlayedEvent(this, e); } }
/// <summary> /// Gestionnaire de l'événement Played défini dans Bataille /// Il est généré à chaque fois qu'un pli est joué /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void PliJouee(object sender, PlayedEventArgs e) { // Récupération de la carte du premier joueur CarteGraphique card = (CarteGraphique)e.CarteJoueurs.Pop(); // On appelle this.Invoke afin de pouvoir faire les modifications d'IHM dans le thread IHM. // En effet l'événement est levé par le BackgroundWorker qui n'a pas accès aux éléments de l'IHM. this.Invoke((MethodInvoker) delegate() { this.rtbDisplay.AppendText(e.Joueurs[0].Nom + " joue : " + card); this.pbJ1.Image = card.Image; this.rtbDisplay.AppendText("\t"); }); // Récupération de la carte du deuxième joueur card = (CarteGraphique)e.CarteJoueurs.Pop(); this.Invoke((MethodInvoker) delegate() { this.rtbDisplay.AppendText(e.Joueurs[1].Nom + " joue : " + card + "\n"); this.pbJ2.Image = card.Image; this.lblJ1NbCard.Text = "Nb Cartes : " + e.Joueurs[0].Main.Count; this.lblJ2NbCard.Text = "Nb Cartes : " + e.Joueurs[1].Main.Count; this.rtbDisplay.ScrollToCaret(); // Force la barre de défilement verticale à aller en bas de la zone de texte this.Update(); }); }
/// <summary> /// Joue un pli de la partie de Bataille /// </summary> /// <param name="joueurs">La liste des joueurs</param> /// <param name="pliActuelle">Les cartes actuellement visibles</param> /// <param name="batailleActuelle">Les cartes à remporter en cas de bataille</param> /// <returns>L'index du Joueur gagnant dans la liste des joueurs</returns> private int JouerPli(List <Joueur> joueurs, ref Stack <Carte> pliActuelle, ref Stack <Carte> batailleActuelle) { int indexGagnant = 0; bool jouer = true; // On vérifie si on a un gagnant if ((joueurs[0].Main.Count() == 0)) { jouer = false; indexGagnant = 1; } else if (joueurs[1].Main.Count() == 0) { jouer = false; indexGagnant = 0; } // Si on a pas de gagnant il faut jouer le pli if (jouer) { // Chaque joueur sort une carte foreach (Joueur joueur in joueurs) { pliActuelle.Push(joueur.Main.Dequeue()); } // On prépare la génération de l'événement Played PlayedEventArgs args = new PlayedEventArgs(); args.CarteJoueurs = new Stack <Carte>(pliActuelle.Reverse()); args.Joueurs = joueurs; // On génère l'événement Played OnPlayed(args); Carte meilleureCarte = null; int index = 0; // On vérifie si une carte est meilleure que l'autre // La méthode pourrait être améliorée car elle ne fonctionne actuellement que pour 2 joueurs foreach (Carte carte in pliActuelle) { if (meilleureCarte != null) { if (meilleureCarte.CompareTo(carte) > 0) { } else if (meilleureCarte.CompareTo(carte) == 0) { // On génère l'événement Bataille OnBataille(EventArgs.Empty); // On transfère les cartes dans le paquet des cartes à gagner en fin de bataille foreach (Carte carte2 in pliActuelle) { batailleActuelle.Push(carte2); } pliActuelle.Clear(); foreach (Joueur joueur in joueurs) { batailleActuelle.Push(joueur.Main.Dequeue()); } // On joue un nouveau pli avec les cartes à gagner en fin de bataille indexGagnant = JouerPli(joueurs, ref pliActuelle, ref batailleActuelle);// Bataille // On sort de la boucle foreach break; } else { meilleureCarte = carte; indexGagnant = index; } } else { meilleureCarte = carte; } index++; } } return(indexGagnant); }