using System; using TheGameExtreme.model.card.cardType; namespace TheGameExtreme.model.deck { public class FractionDeck : Deck { /** * Fonction permettant de créer un jeu de carte pour jouer avec les fractions */ public FractionDeck(int nbCard, decimal borneMin, decimal borneMax) : base(nbCard) { Random random = new Random(); for (int j = 1; j < 10; j++) { for (int i = 1; i < 10; i++) { if (deck.Count < nbCard) { InsertionDichotomique(deck, 0, deck.Count - 1, new FractionCard(new Fraction(i, j, 2))); } else { return; } } } while (deck.Count < nbCard) { int numerateur = random.Next(10, 25); int denominateur = random.Next(10, 25); decimal d = (decimal)numerateur / (decimal)denominateur; if (d.CompareTo(borneMin) > 0 && d.CompareTo(borneMax) < 0) { int pgcd = PGCD(numerateur, denominateur); while (pgcd != 1) { numerateur /= pgcd; denominateur /= pgcd; pgcd = PGCD(numerateur, denominateur); } InsertionDichotomique(deck, 0, deck.Count - 1, new FractionCard(new Fraction(numerateur, denominateur, 2))); } } } /** * Fonction permettant de retourner le plus grand diviseur commun à deux nombres * Premier nombre * Deuxième nombre * Plus grand diviseur commun */ private int PGCD(int a, int b) { int temp = a % b; if (temp == 0) return b; return PGCD(b, temp); } } }