/// <summary> /// Supprime une action de la stratégie /// </summary> /// <param name="action">Action à supprimer</param> public void Supprimer(ActionRobot action) { Actions.Remove(action); while (Actions.Count == 0) { Thread.Sleep(20); } }
/// <summary> /// Compare la priorité de l'action à celle d'une autre action en tenant compte des condition d'éxecution /// </summary> /// <param name="autre">Action à comparer</param> /// <returns>Résultat de la comparaison ({ -1; 0; 1 })</returns> public int CompareTo(ActionRobot autre) { int priorite, autrePriorite; bool possible, autrePossible; if (autre == null) { return(1); } priorite = Priorite; autrePriorite = autre.Priorite; possible = ExecutionPossible(); autrePossible = autre.ExecutionPossible(); return(!possible && !autrePossible ? 0 : possible && !autrePossible ? 1 : !possible && autrePossible ? -1 : priorite > autrePriorite ? 1 : priorite < autrePriorite ? -1 : 0); }
private ActionRobot ActionOptimale() { ActionRobot optimale = null; // attention le coup de l'indice c'est assez moche // mais apparemment le foreach bugue en parcourant Actions, et renvoie null pour chaque action removed int j = 0; foreach (ActionRobot action in Actions) { if (j < Actions.Count) { j++; if (action.ExecutionPossible() && action > optimale) { // Debug.Print("if passée pour une certaine action"); optimale = action; } } } // Debug.Print("action optimale boucle for ok"); return(optimale); }
/// <summary> /// Recherche un élément existant dans la liste des actions /// </summary> /// <param name="action">Action à rechercher</param> /// <returns>Retourne si la stratégie contient l'action spécifiée</returns> public bool Contient(ActionRobot action) { return(Actions.Contains(action)); }
/// <summary> /// Ajoute une action à la stratégie /// </summary> /// <param name="action">Action à ajouter</param> public void Ajouter(ActionRobot action) { Actions.Add(action); }