Bonjour,
Je suis en train de réaliser une application complète de loto "à l'ancienne" (avec des cartons et des pions, pas le loto de la FdJ) pour une association et j'ai quelques soucis dans la façon de modéliser ceci afin de pouvoir en générer (des cartons) à la pelle sans trop de difficultés.
Tout d'abord quelques explications:
Un carton de loto c'est "basiquement" un grille de 27 case (3 lignes et 9 colonnes) dont 15 contiennent des valeurs de 1 à 90 et 12 sont vides.
Quelques règles sur ce qu'est un carton "valide":
Chacune des lignes (ou "quine") du carton doit contenir EXACTEMENT 5 nombres et donc 4 cases vides.
Chacune des colonnes du carton ne doit contenir EXACTEMENT que 1 ou 2 nombres, ni plus ni moins.
Corrolaire du dernier point il y a donc EXACTEMENT 6 colonnes avec 2 valeurs et 3 avec 1 seule valeur.
Les valeurs autorisées pour une colonne se "calculent" comme suit (en partant du principe que la première colonne à l'indice i=0 et donc la dernière i=8):
valeur minimale de la colonne = i*10
valeur maximale de la colonne = (i*10)+9 ou ((i+1)*10)-1
(Exemple pour la 3ème colonne (i=2) les valeurs vont de 20 à 29)
Bien entendu il y a des cas particuliers sinon ça serait trop facile:
Pour la 1ère colonne (i=0) les valeurs ne vont pas de 0 à 9 mais de 1 à 9
Pour la 9ème colonne (i=8) les valeurs ne vont pas de 80 à 89 mais de 80 à 90
J'aimerais donc vos avis sur la façon de modéliser cela, sachant que j'ai déjà plusieurs approches en vues:
Approche 1: le tableau
Créer un carton avec une propriété contenant ses valeurs dans un tableau (à 2 dimensions ou une tableau de tableau.)
Approche 2: l'objet "simple"
Créer un objet Carton qui a comme propriété un tableau d'objet Ligne qui lui-même contient un tableau de valeurs (voire d'objets Numéro cf 3ème approche)
Approche 3: le tout-objet
Dans le fonctionnement d'un carton, chaque numéro peut être ou non marqué durant la partie, puis qu'une "Quine" est déclarée lorsqu'une Ligne est complète (tous ses numéros sont marqués) et qu'enfin un Carton est plein lorsque toutes ses lignes sont complètes (en passant par des "états" intermédiaires: "Quine" (1 Ligne) et "Double-Quine" (2 Lignes))
J'en ai donc perçu une similarité de comportement:
Le Numéro est un "tableau" de 1 case qui peut être marquée.
La Ligne est un tableau de 5 cases qui peuvent être marquées.
Le Carton est un tableau de 15 cases qui peuvent être marquées.
(je ne tiens pas compte des cases vides qui apparaitront d'elles-mêmes lors de l'affichage étant donné les règles de placement des nombres édictées plus haut)
Donc l'idée serait la même que la 2ème approche avec soit une classe mère abstraite dont les 3 (Numéro, Ligne et Carton) hériteraient ou une interface à implémenter par eux.
Je vous remercie donc de m'éclairer, afin de me dire si déjà je suis pas en train de me planter totalement, parce que j'ai loupé un truc ou autre, ensuite de me dire soit l'approche que vous utiliseriez ; dans celles proposées ou autres, et enfin en fonction de votre choix d'approche, comment vous feriez pour la génération automatique des cartons, car j'avoue que c'est là que je bloque principalement.
Je me tiens bien entendu à la disposition de chacun si il y a besoin d'explication supplémentaire, car je sais que des fois je suis pas très clair ; et merci d'avance pour vos réponses bien entendu !
Partager