// https://motherboard.vice.com/fr/article/8q5na3/pourquoi-on-est-mauvais-a-pierre-feuille-ciseaux-et-comment-devenir-meilleur /* * Si votre adversaire l'a emporté au tour précédent, jouez une main qui bat sa main précédente (ex. : ciseaux s'il a joué feuille). * S'il a perdu, jouez la main qu'il vient de jouer (puisqu'il risque de jouer la main « inférieure »). * S'il y a eu match nul, jouez une main « inférieure » à celle qu'il vient de jouer, puisqu'il va sûrement en changer et qu'a priori vous aurez l'avantage.*/ /// <summary> /// Mini inteligence artificiel /// </summary> /// <param name="Etapes"></param> /// <returns></returns> public static Etape.posibilite playAI(List <Etape> Etapes) { Etape DerniereEtap = null; //si il s'agit de la premiere etape il ets obliger de jouer de facon random if (Etapes == null || Etapes.Count <= 0) { return(random()); } DerniereEtap = Etapes.Last(); Etape.posibilite Choix = new Etape.posibilite(); if (DerniereEtap.GetGagant() == null) { //S'il y a eu match nul, jouez une main « inférieure » à celle qu'il vient de jouer, puisqu'il va sûrement en changer et qu'a priori vous aurez l'avantage.*/ switch (DerniereEtap.GetPropositionJ1()) { case Etape.posibilite.Feuille: Choix = Etape.posibilite.Pierre; //ou puit break; case Etape.posibilite.Pierre: Choix = Etape.posibilite.Ciseaux; break; case Etape.posibilite.Ciseaux: Choix = Etape.posibilite.Feuille; break; case Etape.posibilite.Puit: Choix = Etape.posibilite.Pierre; //ou ciseai break; default: break; } } else if (DerniereEtap.GetGagant().typePlayer == Joueur.type.Reel) //si la derniere main a ete gagner par le joueur reel { // Si votre adversaire l'a emporté au tour précédent, jouez une main qui bat sa main précédente (ex. : ciseaux s'il a joué feuille). switch (DerniereEtap.GetPropositionJ1()) { case Etape.posibilite.Feuille: Choix = Etape.posibilite.Ciseaux; break; case Etape.posibilite.Pierre: // Rand.Next(Etape.posibilite.Puit, Etape.posibilite.Feuille); Choix = Etape.posibilite.Puit; //ou feuile break; case Etape.posibilite.Ciseaux: Choix = Etape.posibilite.Pierre; //ou puit break; case Etape.posibilite.Puit: Choix = Etape.posibilite.Feuille; break; default: break; } } else if (DerniereEtap.GetGagant().typePlayer == Joueur.type.BotAI) { // S'il a perdu, jouez la main qu'il vient de jouer(puisqu'il risque de jouer la main « inférieure »). Choix = DerniereEtap.GetPropositionJ1(); } Console.WriteLine((int)Choix); return(Choix); }
/// <summary> /// Verifie les coup et resort le joueur victorieux /// </summary> /// <param name="Coup1"></param> /// <param name="J1"></param> /// <param name="Coup2"></param> /// <param name="J2"></param> /// <returns>Joueur gagant</returns> public Joueur verif(Etape.posibilite Coup1, Joueur J1, Etape.posibilite Coup2, Joueur J2) { #region Pierre if (Coup1 == Etape.posibilite.Pierre && Coup2 == Etape.posibilite.Pierre) { return(null); } if (Coup1 == Etape.posibilite.Pierre && Coup2 == Etape.posibilite.Feuille) { return(J2); } if (Coup1 == Etape.posibilite.Pierre && Coup2 == Etape.posibilite.Ciseaux) { return(J1); } if (Coup1 == Etape.posibilite.Pierre && Coup2 == Etape.posibilite.Puit) { return(J2); } #endregion Pierre #region Feuille if (Coup1 == Etape.posibilite.Feuille && Coup2 == Etape.posibilite.Pierre) { return(J1); } if (Coup1 == Etape.posibilite.Feuille && Coup2 == Etape.posibilite.Feuille) { return(null); } if (Coup1 == Etape.posibilite.Feuille && Coup2 == Etape.posibilite.Ciseaux) { return(J2); } if (Coup1 == Etape.posibilite.Feuille && Coup2 == Etape.posibilite.Puit) { return(J1); } #endregion Feuille #region Ciseau if (Coup1 == Etape.posibilite.Ciseaux && Coup2 == Etape.posibilite.Pierre) { return(J2); } if (Coup1 == Etape.posibilite.Ciseaux && Coup2 == Etape.posibilite.Feuille) { return(J1); } if (Coup1 == Etape.posibilite.Ciseaux && Coup2 == Etape.posibilite.Ciseaux) { return(null); } if (Coup1 == Etape.posibilite.Ciseaux && Coup2 == Etape.posibilite.Puit) { return(J2); } #endregion Ciseau #region Puit if (Coup1 == Etape.posibilite.Puit && Coup2 == Etape.posibilite.Pierre) { return(J1); } if (Coup1 == Etape.posibilite.Puit && Coup2 == Etape.posibilite.Feuille) { return(J2); } if (Coup1 == Etape.posibilite.Puit && Coup2 == Etape.posibilite.Ciseaux) { return(J1); } if (Coup1 == Etape.posibilite.Puit && Coup2 == Etape.posibilite.Puit) { return(null); } #endregion Puit #region Egalité if (Coup1 == Coup2) //en cas d'egalité, retour d'aucun vainquer { return(null); } #endregion Egalité return(null); }