private void GoButton_Click(object sender, EventArgs e) { //On constitue la liste des joueurs selon le nombre Joueur tempJoueur = new Joueur(nomJoueur1.Text); ListeJoueurs.Add(tempJoueur); tempJoueur = new Joueur(nomJoueur2.Text); ListeJoueurs.Add(tempJoueur); if (checkBoxJoueur3.Checked) { tempJoueur = new Joueur(nomJoueur3.Text); ListeJoueurs.Add(tempJoueur); if (checkBoxJoueur4.Checked) { tempJoueur = new Joueur(nomJoueur4.Text); ListeJoueurs.Add(tempJoueur); } } //On constitue également le deck de base List <Carte> DeckGenerique = new List <Carte>(); //On crée une cartetemporaire Carte tempCarte = new Carte(); //Elle va d'abord pointer vers la carte cuivre tempCarte = ListeCartesDeBase.Find(x => x.Nom == "Cuivre"); //Et on l'ajoute 7 fois au deck for (int i = 0; i < 7; i++) { Carte carteAjoutee = (Carte)tempCarte.Clone(); DeckGenerique.Add(carteAjoutee); } //Ensuite on fait de même avec le Domaine, mais 3 fois tempCarte = ListeCartesDeBase.Find(x => x.Nom == "Domaine"); for (int i = 0; i < 3; i++) { Carte carteAjoutee = (Carte)tempCarte.Clone(); DeckGenerique.Add(carteAjoutee); } //Et on donne ce même deck à chaque joueur foreach (Joueur joueur in ListeJoueurs) { //On clone chaque carte et on l'ajoute au deck du joueur foreach (Carte carte in DeckGenerique) { Carte carteClone = (Carte)carte.Clone(); joueur.Deck.Add(carteClone); } } //Et on lance la Form de la partie PartieForm partie = new PartieForm(); partie.Show(); }
public void Recevoir(Carte cible, string zone = "Défausse") { //On crée une nouvelle instance de la carte qu'on va ajouter à la défausse Carte tempCarte = (Carte)cible.Clone(); //Si la cible est un campement nomade, elle est forcément reçue sur le deck if (cible.Nom == "Campement nomade") { zone = "Deck"; } //On ajoute la carte à la zone spécifiée et on met à jour les infos switch (zone) { case "En main": this.Main.Add(tempCarte); if (this == PartieForm.JoueurActuel) { this.MAJMain(); this.MAJInfos(); } break; case "Défausse": this.Defausse.Add(tempCarte); //Bien entendu on met à jour l'affichage de la défausse si le joueur ayant reçu la carte est le joueur actuel if (this == PartieForm.JoueurActuel) { PartieForm.defaussePB.ImageLocation = cible.Image; PartieForm.defausseTB.Text = $"Défausse : {this.Defausse.Count.ToString()}"; } break; case "Deck": this.Deck.Insert(0, cible); PartieForm.deckTB.Text = $"Deck : {this.Deck.Count.ToString()}"; break; } //Et on désincrémente le nombre de cartes dans la pile si la carte n'est pas une Malédiction (car elle n'est pas dans les piles) if (cible.Nom != "Malédiction") { //En cherchant la carte avant-tout... List <Pile> mapListe = PartieForm.mapListe; bool flag = false; int i = 0; while (!flag) { if (mapListe[i].carte.Nom == cible.Nom) { flag = true; } else { i++; } } mapListe[i].nombre--; //Et on lance la vérification pour savoir si on achève la partie //La partie s'achève quand : une des piles Colonie ou Province est vide, ou quand 3 piles au total sont vides if (mapListe[i].nombre == 0) { //Tout d'abord, si la pile de la carte venant d'être reçue tombe à 0, alors on efface l'image, on désactive le PictureBox et on incrémente le compteur de piles vides mapListe[i].carte.PictureBox.ImageLocation = @"C:\Users\ohne6\Desktop\Dominion\Images\dosDeCarte.jpg"; mapListe[i].carte.PictureBox.Enabled = false; PartieForm.nbPileVide++; //Et ensuite on teste si la partie s'arrête if ((mapListe[i].carte.Nom == "Province") || (mapListe[i].carte.Nom == "Colonie") || (PartieForm.nbPileVide == 3)) { FinDePartie finDePartie = new FinDePartie(); finDePartie.ShowDialog(); } } Console.WriteLine($"{this.Nom} reçoit {cible.Nom}"); } //Certaines cartes déclenchent des effets spécifiques quand elles sont reçues switch (tempCarte.Nom) { case "Province": { //Si quelqu'un reçoit une Province, un autre joueur peut activer Or des fous foreach (Joueur joueur in LancementForm.ListeJoueurs.FindAll(x => x != this)) { List <Carte> orsDesFous = new List <Carte>(); orsDesFous.AddRange(joueur.Main.FindAll(x => x.Nom == "Or des fous")); if (orsDesFous.Count > 0) { PartieForm.tempJoueur = LancementForm.ListeJoueurs.Find(x => x != this); foreach (Carte carte in orsDesFous) { carte.Reagir(); } } } } break; case "Ambassade": { //Quand un joueur reçoit une Ambassade, les autres reçoivent un argent foreach (Joueur joueur in LancementForm.ListeJoueurs.FindAll(x => x != this)) { joueur.Recevoir(PartieForm.mapListe.Find(x => x.carte.Nom == "Argent").carte); } } break; case "Mandarin": { //Le joueur va placer tous ses trésors en jeu sur son deck, dans l'ordre qu'il souhaite //On commence par créer la liste des trésors en jeu List <Carte> aPlacer = this.Main.FindAll(x => (x.Type.Contains("Trésor") && (x.EnJeu))); MessageBox.Show("Vous allez placer vos trésors en jeu sur votre deck, un par un."); //Puis on demande de placer un trésor sur le deck jusqu'à qu'ils soient tous lacés for (int i = 0, c = aPlacer.Count - 1; i < c; i++) { Carte carteAplacer = this.ChoisirUneCarte("Deck", aPlacer, true); carteAplacer.EnJeu = false; this.Deck.Insert(0, carteAplacer); this.Main.Remove(carteAplacer); aPlacer.Remove(carteAplacer); } //On place la dernière carte automatiquement, puisqu'il n'y a plus de choix à faire aPlacer[0].EnJeu = false; this.Deck.Insert(0, aPlacer[0]); this.Main.Remove(aPlacer[0]); this.MAJMain(); } break; } }