public MyInput(Coup coup, Deplacement deplacement) { this.coup = coup; this.deplacement = deplacement; this.id = 0; SetId(); }
public void AddCoup(Coup coup) { timeSinceLastUpdate = 0; actualCombo.Add(coup); if (coup != Coup.LightPass && coup != Coup.HeavyPass) { ResetCombo(); } else { UpdateCombo(); } }
public void Reset() { this.coup = Coup.NOTHING; this.deplacement = Deplacement.NOTHING; SetId(); }
public void SetCoup(Coup coup) { this.coup = coup; SetId(); }
/// <summary> /// /// </summary> /// <param name="plateau"></param> /// <param name="joueurs"> la liste des joueurs dans l'ordre du tour en commencant par moi</param> /// <param name="profondeur"></param> /// <param name="profondeurMax"></param> /// <returns></returns> public static MinMaxTrace MinMax(Plateau plateau, int profondeur, int profondeurMax, int alpha, int beta, out Coup meilleurCoup, out int result) { int currentJoueurIndex = profondeur % plateau.Joueurs.Count(); //id du joueurs de la liste dont c'est le tour (0 c'est moi) var trace = new MinMaxTrace(profondeur, currentJoueurIndex == 0, profondeur != profondeurMax); if (profondeur < profondeurMax) { List <Coup> coups = new List <Coup>(); coups.Add(new Coup(Direction.DROITE)); coups.Add(new Coup(Direction.GAUCHE)); coups.Add(new Coup(Direction.HAUT)); coups.Add(new Coup(Direction.BAS)); // pour tout les murs if (plateau.Joueurs[currentJoueurIndex].MurRestant > 0) { foreach (var mur in Player.AvailableMur) { coups.Add(new Coup(mur)); } } int bestEval = currentJoueurIndex == 0 ? int.MinValue : int.MaxValue; Coup bestCoup = null; foreach (var coup in coups) { //Console.Error.WriteLine(profondeur + " " + coup.ToString()); if (coup.Mur != null) { var mur = coup.Mur; if (plateau.AddMur(mur)) { try { int eval; trace.Childrens.Add(MinMax(plateau, profondeur + 1, profondeurMax, alpha, beta, out meilleurCoup, out eval)); //Console.Error.WriteLine("eval " + eval); if (currentJoueurIndex == 0 && eval > bestEval) //MAX { bestEval = eval; bestCoup = coup; alpha = Math.Max(alpha, bestEval); if (beta <= bestEval) { meilleurCoup = bestCoup; result = bestEval; return(trace); } } else if (currentJoueurIndex != 0 && eval < bestEval) //MIN { bestEval = eval; bestCoup = coup; beta = Math.Min(alpha, bestEval); if (bestEval <= alpha) { meilleurCoup = bestCoup; result = bestEval; return(trace); } } } catch (NoPathException) { Console.Error.WriteLine("invalid no issue " + coup.Mur + " " + coup.Dir); } finally { plateau.RemoveMur(mur); } } else if (profondeur == 0 && AvailableMur.Contains(mur)) { AvailableMur.Remove(mur); } } else { Direction direction = (Direction)coup.Dir; var oldPos = plateau.Joueurs[currentJoueurIndex].Pos; var newPos = oldPos.GetPositionInDirection(direction); var test = plateau.GetCase(oldPos).Voisines.Contains(plateau.GetCase(newPos)); if (newPos != null && test) { try { plateau.Joueurs[currentJoueurIndex].Pos = newPos; int eval; trace.Childrens.Add(MinMax(plateau, profondeur + 1, profondeurMax, beta, alpha, out meilleurCoup, out eval)); //Console.Error.WriteLine("eval " + eval); if (currentJoueurIndex == 0 && eval > bestEval) //MAX { bestEval = eval; bestCoup = coup; alpha = Math.Max(alpha, bestEval); if (beta <= bestEval) //coupe beta { meilleurCoup = bestCoup; result = bestEval; return(trace); } } else if (currentJoueurIndex != 0 && eval < bestEval) //MIN { bestEval = eval; bestCoup = coup; beta = Math.Min(beta, bestEval); if (bestEval <= alpha) //coupe alpha { meilleurCoup = bestCoup; result = bestEval; return(trace); } } } catch (Exception e) { Console.Error.WriteLine("invalid no issue " + coup.Mur + " " + coup.Dir); } finally { plateau.Joueurs[currentJoueurIndex].Pos = oldPos; } } } } meilleurCoup = bestCoup; trace.Choix = bestCoup; trace.Eval = bestEval; result = bestEval; return(trace); } else { meilleurCoup = null; var eval = plateau.Evaluation(); trace.Max = null; trace.Eval = eval; result = eval; return(trace); } }