Partage
  • Partager sur Facebook
  • Partager sur Twitter

Modélisation base de données (Jeux morpion)

Sujet résolu
    13 mai 2018 à 12:49:10

    Bonjour,

    Dans le cadre de mes étude je dois faire une petite application et j'ai choisit de faire une application pour jouer au morpion avec android studio.

    Les parties seront des "duel", dans un duel il faut deux joueur. Et un joueur peut participer à plusieurs duel par exemple Dupont vs Charles et Dupont vs Michel.

    Il y aura plusieurs type de grille, 3x3, 4x4, 5x5, donc pour chaque type de grille il y aura un scores pour un duel.

    Voici mon diagramme des classe. Je l'ai envoyer à mon professeur il m'a répondu :

    Mais je ne vois pas comment modéliser autrement, et vue que ce sera lui a mon oral de fin d'année il ne peut pas m'aider, si quelqu'un d'enter vous a des idées je serais preneur.

    J’espère avoir été assez clair et merci d'avance de vos réponse.

    Valentin

    • Partager sur Facebook
    • Partager sur Twitter
      14 mai 2018 à 9:58:20

      Bonjour,

      Je pense que tu peux revoir tout le modèle :p

      Un joueur devrait choisir sa couleur pour chaque duel, sinon tu risques d'avoir des duels avec des joueurs de même couleur ...

      Je te propose le MCD suivant :

      Je n'ai pas représenté le score car je ne sais pas comment cela se détermine pour un morpion ... il y a un vainqueur et un perdant et c'est tout non ?

      Pour stocker la grille de jeu je propose simplement une colonne grille dans la table duel qui contiendra simplement la matrice de jeu sérialisée qui pourra te permettre de faire ton hashmap côté application ...

      • Partager sur Facebook
      • Partager sur Twitter
      Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
        14 mai 2018 à 15:06:15

        Et encore, il y a des lacunes dans ce MCD : il n'y a pas de liens entre "joueur_1 avec couleur_1" et "joueur_2 avec couleur_2". De plus, rien n'interdit couleur_1 et couleur_2 d'être identique pour le même duel, ni même au même joueur d'être à la fois le joueur 1 et le joueur 2 (de faire un duel avec lui même)

        Pour moi les relations couleur_1 et couleur_2 doivent disparaître. La couleur doit être reliée à joueur_1 et joueur_2

        On se retrouve avec les relations suivantes :

        joueur (id_joueur, ...)

        couleur(id_couleur, libelle)

        participant(id_participant, id_joueur, id_couleur, id_duel)

        duel(id_duel, date, grille, id_participant_1, id_participant_2, grille, ...)

        Il faudra créer deux contraintes UNIQUE sur la table participant:

        * une avec le couple (id_couleur, id_duel), afin d’empêcher la sélection de la même couleur pour les deux joueurs pour le même duel.

        * une seconde avec le couple (id_joueur, id_duel) pour empêcher le même joueur d'être à la fois le joueur 1 et le joueur 2

        -
        Edité par Sebajuste 14 mai 2018 à 15:10:30

        • Partager sur Facebook
        • Partager sur Twitter
          14 mai 2018 à 15:47:08

          Et la contrainte pour empêcher plus de deux joueurs sur un duel ? :p

          • Partager sur Facebook
          • Partager sur Twitter
          Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
            14 mai 2018 à 17:35:21

            Elle est naturellement intégrée dans la table duel, qui contient les deux colonnes id_participant_1 et id_participant_2.

            Cela implique qu'il ne sera jamais possible d'étendre des partie à plus de deux joueurs. Mais comme les duels à plus de deux est antinomique, cela devrait suffire ;)

            Mais tu as raison sur un point, rien n'interdit à id_duel de la relation participant à ne pas pointer sur le bon duel...

            Il serait peut-être plus intéressant de proposer :

            joueur (id_joueur, ...)

            couleur(id_couleur, libelle)

            duel(id_duel, id_participant_1, id_couleur_1, id_participant_2, id_couleur_2, date, grille, ...)

            Avec une contrainte CHECK obligeant id_couleur_1 et id_participant_1 à être différent respectivement de id_couleur_2 et id_participant_2.

            -
            Edité par Sebajuste 14 mai 2018 à 17:44:12

            • Partager sur Facebook
            • Partager sur Twitter
              14 mai 2018 à 17:41:43

              Sebajuste a écrit:

              Elle est naturellement intégrée dans la table duel, qui contient les deux colonnes id_participant_1 et id_participant_2

              Je n'avais même pas fais gaffe ... Mais du coup c'est redondant avec la table participant ... non ?

              • Partager sur Facebook
              • Partager sur Twitter
              Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
                14 mai 2018 à 19:15:18

                Oui c'est vrai. C'est une entorse à une normalisation stricte. Toutefois, le seul autre moyen de respecter le cahier des charges est de passé par des triggers. La réalisation deviens alors beaucoup plus complexe pour un problème aussi trivial.

                J'avais posé il y a longtemps une question similaire sur developpez.com pour choisir le meilleur compromis entre une normalisation respectant la 2FN, mais ne garantissant pas la cohérence fonctionnelle, ou une cohérence respecté mais avec une table dénormalisée. Le choix va à la seconde. C'est une entorse aux règle "acceptable" dans ce cas.

                https://www.developpez.net/forums/d1591614/general-developpement/alm/methodes/merise/coherence-fonctionnelle-respect-formes-normales/

                • Partager sur Facebook
                • Partager sur Twitter
                  14 mai 2018 à 20:19:01

                  Bonsoir,

                  Déjà merci à vous deux pour votre réflexion et vos répons constructive.

                  Ce n’est pas si les joueurs on la même couleur il se différencie avec la croix et le rond quand il joue. Et je veux vraiment qu’ils choisissent la couleur dans leur « profil » et pas pour chaque duel.

                  Oui pour un morpion c’est un gagnant entre les deux joueurs, ou match nul mais dans ce cas-là pas de changement de score.

                  Exemple : Le joueur X gagne il a +1 et le joueur O +0 et inversement, si il y’a match nul +0 au deux.

                  Je ne comprends pas le fait de stocker la grille du jeu, mon but étant de jouer sur le même téléphone on ne joue pas à distance en ligne.

                  Je vais peut-être réexpliquer un peu le terme duel, enfaite le duel c’est juste le fait de lié les 2 joueurs, car ensuite un « duel » peut participer à plusieurs type de grille, la 3x3, 4x4 et 5x5 et avoir un score distinct pour chaque type de grille. Je vais mettre des IHM pour que vous voyiez mieux ce que j’espère faire sur mon application.

                  -
                  Edité par ValentinRicher1 14 mai 2018 à 20:21:13

                  • Partager sur Facebook
                  • Partager sur Twitter
                    15 mai 2018 à 9:04:48

                    Tu ne veux donc pas mémoriser les parties (grilles) composant un même duel ?

                    • Partager sur Facebook
                    • Partager sur Twitter
                    Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
                      15 mai 2018 à 13:17:39

                      Non ils finissent la parti ou il en refont une je ne veut pas Stocker les parties
                      • Partager sur Facebook
                      • Partager sur Twitter
                        15 mai 2018 à 13:43:36

                        Je te proposerai bien de quand même stocker l'historique des parties, au moins pour les scores ...

                        Avec le modèle suivant :

                        Un joueur crée son compte avec ses infos et sa couleur.

                        Deux joueurs crée un duel.

                        Ils créent alors une partie rattachée à ce duel en choisissant une grille.

                        Ils jouent la partie (côté application) et à la fin tu stockes l'id du vainqueur dans la partie.

                        Le score est le nombre de partie où un joueur est vainqueur au sein d'un duel, ou globalement ...

                        • Partager sur Facebook
                        • Partager sur Twitter
                        Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
                          15 mai 2018 à 18:44:17

                          Je pense que je me suis mal expliqué quand je parler de ne pas stocké les parties, parce que la ce que tu as modélisé c'est parfaitement ce que j’imaginai. Tu as vraiment bien compris le contexte.

                          Petite questions, sur quoi fait tu ton diagramme ? Sur quel logiciel ?

                          Franchement je te remercie pour cette aide.

                          • Partager sur Facebook
                          • Partager sur Twitter
                            16 mai 2018 à 9:10:40

                            ValentinRicher1 a écrit:

                            sur quoi fait tu ton diagramme ?

                            J'utilise jMerise depuis longtemps, qui est gratuit ... Par contre un changement de version arrive et devrait au passage le rendre payant ... A suivre ...

                            • Partager sur Facebook
                            • Partager sur Twitter
                            Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
                              16 mai 2018 à 9:25:50

                              D'accord merci, je passe le sujet en résolu je pense que pour moi c'est bon, encore merci a vous.
                              • Partager sur Facebook
                              • Partager sur Twitter

                              Modélisation base de données (Jeux morpion)

                              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                              • Editeur
                              • Markdown