IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Modélisation des données - Loto pour association


Sujet :

VB.NET

  1. #1
    Membre chevronné
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Points : 2 209
    Points
    2 209
    Par défaut Modélisation des données - Loto pour association
    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 !

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Je verrais plus la 2e approche, qui permet d'associer au carton les règles qui s'y appliquent. A mon avis la 3e approche descend trop bas par rapport à la complexité du problème...

    Citation Envoyé par Sehnsucht Voir le message
    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 suis pas vraiment d'accord avec cette approche... mis à part le fait que tous ces éléments peuvent ou non être marqué, ce n'est pas du tout la même chose, et de toutes façons une case ou une ligne n'a de sens que par son appartenance au tableau. Par exemple, une case ne peut pas déterminer par elle-même si une valeur est valide pour cette case, car cela dépend du reste du carton. En plus, certaines règles s'appliquent à une colonne et non à une ligne, et une telle structure ne facilitera pas l'implémentation de ce type de règle

    Enfin bon, à toi de voir, mais à mon avis il est plus naturel d'implémenter toutes ces règles au niveau d'une classe Carton. Par contre, pour chaque cellule, tu peux définir une classe ou une structure avec des propriétés pour indiquer :
    - si elle a un numéro
    - si elle est marquée
    - la valeur du numéro
    Ta classe Carton contiendra donc un tableau à 2 dimensions d'objets Cellule (ou case, ou n'importe quel nom que tu veux lui donner...)

  3. #3
    Membre chevronné
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Points : 2 209
    Points
    2 209
    Par défaut
    Déjà merci d'avoir répondu,

    Il est vrai, qu'avec l'approche que j'envisage, implémenter les différentes règles de création, s'est avérer plutôt laborieux.

    Juste une question tu as choisis un tableau à 2 dimensions plutôt qu'un tableau de tableau, es-ce par choix (si oui quels ont été tes raisons ?) ou par habitude ou autre ?

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par Sehnsucht Voir le message
    Juste une question tu as choisis un tableau à 2 dimensions plutôt qu'un tableau de tableau, es-ce par choix (si oui quels ont été tes raisons ?) ou par habitude ou autre ?
    Ben un carton de loto est un tableau à 2 dimensions... donc l'approche la plus naturelle est de le représenter dans le code de la même manière. En plus ça facilite l'écriture des opérations sur des lignes ou des colonnes

  5. #5
    Membre chevronné
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Points : 2 209
    Points
    2 209
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Ben un carton de loto est un tableau à 2 dimensions... donc l'approche la plus naturelle est de le représenter dans le code de la même manière. En plus ça facilite l'écriture des opérations sur des lignes ou des colonnes
    Ben ça dépend de comment on voit les choses, certes on voit une grille, mais au premier coup d'oeil sur un carton, moi je vois un tableau de lignes, et une ligne est un tableau de cases, d'où ma question

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par Sehnsucht Voir le message
    Ben ça dépend de comment on voit les choses, certes on voit une grille, mais au premier coup d'oeil sur un carton, moi je vois un tableau de lignes, et une ligne est un tableau de cases, d'où ma question
    Donc dans ta vision des choses, une grille est un tableau de tableaux, ce qu'on appelle un "jagged array". Tu peux aussi faire comme ça, ça ne change pas grand chose, mais les performances sont un peu moins bonnes qu'avec un tableau à 2 dimensions. L'intérêt des jagged arrays est plutôt pour des tableaux de tableaux de différentes tailles, mais dans ton cas toutes les lignes ont la même taille

  7. #7
    Membre chevronné
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Points : 2 209
    Points
    2 209
    Par défaut
    En fait c'est

    1) Parce que je trouve plus simple de manipuler des tableaux de dimension 1.
    2) Parce que j'ai sans doute trop en tête le fonctionnement de l'objet, Carton -> Lignes !

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    à toi de voir... comme je l'ai dit, les 2 approches sont valables

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 16/12/2013, 13h23
  2. [Toutes versions] Extraire des données word pour les insérer sous excel
    Par progfou dans le forum Word
    Réponses: 23
    Dernier message: 04/05/2009, 15h23
  3. Réponses: 2
    Dernier message: 17/02/2009, 21h26
  4. Réponses: 1
    Dernier message: 31/01/2008, 10h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo