using System; using System.Collections.Generic; using OrderStacks.model.card; namespace OrderStacks.model.deck { public abstract class Deck { protected List deck = new List(); protected int nbCard; /** * Nombre de carte dans le deck * Constructeur */ protected Deck(int nbCard) { this.nbCard = nbCard; } /** * Fonction retournant le nombre de carte dans le deck */ public int size() { return deck.Count; } /** * Index supprimé * Fonction permettant de retirer un index du deck */ public void removeAt(int index) { deck.RemoveAt(index); } /** * Index de la carte chercher * Fonction retournant la carte contenu dans l'index * Carte à la position chercher */ public Card getCard(int index) { return deck[index]; } /** * Carte que l'on souhaite insérer * Début de la plage de recherche * Fin de la plage de recherche * Fonction permet d'insérer dichotomiquement une carte * N'insére pas de carte en double */ protected void InsertionDichotomique(int start, int end, Card card) { if (deck.Count == 0) { deck.Add(card); return; } int mediane = (end - start) / 2 + start; int comparateur = deck[mediane].Value.CompareTo(card.Value); if (comparateur == 0) { return; } if (mediane == start) { if (comparateur < 0) { if (deck[end].Value.CompareTo(card.Value) < 0) { deck.Insert(end + 1, card); return; } else if (deck[end].Value.CompareTo(card.Value) > 0) { deck.Insert(end, card); return; } else { return; } } else { deck.Insert(start, card); return; } } else { if (comparateur < 0) { InsertionDichotomique(mediane, end, card); return; } else { InsertionDichotomique(start, mediane, card); return; } } } } }