# BDW - Projet # DeezCycle 🚮 ### UCBL - DĂ©partement Informatique de Lyon 1 – Printemps 2024 ## Connect 🌐 ``` ssh p22XXXXX@bdw.univ-lyon1.fr ``` ## Transfer 📬 ``` scp -r ./DeezCycle p2203977@bdw.univ-lyon1.fr:~ ``` ## Site đŸŽČ https://bdw.univ-lyon1.fr/p22XXXXX/DeezCycle/ ## Table des matiĂšres **1 Informations gĂ©nĂ©rales sur le projet 1** **2 SpĂ©cification de l’application 2** **3 Mise en place de la Base de DonnĂ©es 5** 3.1 Construction de la base de donnĂ©es................................... 5 3.2 IntĂ©gration des donnĂ©es fournies.................................... 5 **4 Les fonctionnalitĂ©s 5** 4.1 Page d’accueil et statistiques...................................... 6 4.2 FonctionnalitĂ© 1 : Liste des parties terminĂ©e et en cours....................... 6 4.3 FonctionnalitĂ© 2 : Mise en place de la partie.............................. 7 4.4 FonctionnalitĂ© 3 : DĂ©roulĂ© d’une partie................................. 8 4.5 FonctionnalitĂ© 4 : fonctionnalitĂ©s supplĂ©mentaires........................... 9 **5 DĂ©roulĂ© du projet et jalons 9** 5.1 Les jalons................................................. 9 5.2 Rendu du projet............................................. 9 5.3 Calendrier rĂ©capitulatif......................................... 10 **6 ANNEXE A : Ă  propos de l’intĂ©gration de donnĂ©es 11** ## 1 Informations gĂ©nĂ©rales sur le projet Le projet est Ă  rĂ©aliser **en binĂŽme** (les trinĂŽmes ne sont pas autorisĂ©s). La rĂ©alisation du projet en monĂŽme nĂ©cessite l’accord du responsable de l’UE. À noter que la rĂ©alisation du projet nĂ©cessitera un travail personnel et/ou collaboratif complĂ©mentaire au travail rĂ©alisĂ© durant les sĂ©ances de TP. Il est donc important de choisir un binĂŽme avec un emploi du temps compatible avec le vĂŽtre. ### À propos de l’évaluation du projet Le projet est Ă©valuĂ© Ă  travers les notes issues des diffĂ©rents QCM de Validation des Acquis pour le Projet, de l’évaluation des jalons et de la soutenance finale. **Gestion du plagiat**. Il est important de noter que toute ressemblance trop importante entre des projets sera sanctionnĂ©e par un 0 Ă  chacun des protagonistes. **BDW est avant tout une UE d’introduction aux bases de donnĂ©es**. La non-utilisation d’une BD relationnelle dans le projet impactera forcĂ©ment la note de maniĂšre nĂ©gative. **Attention Ă  la gestion de votre temps!** La mise en place de jalons rĂ©guliers est lĂ  pour vous aider dans ce sens. En effet, il a souvent Ă©tĂ© observĂ© que des Ă©tudiants passaient trop de temps sur les aspects modĂ©lisa- tion (avec l’objectif d’avoir un schĂ©ma EA parfait) au dĂ©triment du dĂ©veloppement des fonctionnalitĂ©s dont la comprĂ©hension tardive imposait finalement de modifier le schĂ©ma EA _a posteriori_. ## 2 SpĂ©cification de l’application L’objectif du projet est de dĂ©velopper un jeu de dĂ©s _via_ une application web. Ce jeu est fortement inspirĂ© du jeu DICYCLE RACE prĂ©sentĂ© en cours. Le principe du jeu est le suivant : chaque joueur est un cycliste qui doit arriver le premier au bout du parcours qui est composĂ© de 12 cartes. Pour avancer sur une case, il faut que le joueur rĂ©alise la combinaison de dĂ©s demandĂ©e sur la carte. Pour cela, chaque joueur dispose de 6 dĂ©s de couleur bleue, 6 dĂ©s de couleur jaune et 6 dĂ©s de couleur rouge. À chaque tour, le joueur choisit 6 dĂ©s parmi les 18 dĂ©s de couleurs pour essayer de valider une ou plusieurs cases en au plus 3 lancers. DiffĂ©rentes stratĂ©gies peuvent ĂȘtre mises en place en fonction du nombre de cartes que le joueur souhaite valider en un tour. Cette section va vous permettre de modĂ©liser et concevoir la base de donnĂ©es sur laquelle s’appuiera votre application web. À partir de cette spĂ©cification, il est important de bien distinguer les donnĂ©es qui devront ĂȘtre stockĂ©es de celles qui seront calculĂ©es. Dans un premier temps, nous considĂ©rons les joueurs. Les joueurs sont identifiĂ©s par un entier numĂ©rique et on stocke le nom, le prĂ©nom, la date de naissance, un pseudo et une adresse mail. Un joueur joue des parties. Une partie est identifiĂ©e par une valeur numĂ©rique et on stocke la date et l’heure du dĂ©but de partie ainsi que la durĂ©e une fois que la partie est terminĂ©e. Une partie a donc un Ă©tat qui peut ĂȘtre ’A venir’ (partie paramĂ©trĂ©e et créée mais non encore commencĂ©e), ’En cours’ (partie en cours de jeu ou interrompue) et ’TerminĂ©e’ (partie oĂč tous les joueurs ont fini le parcours). Pour chaque partie, on dispose d’un plateau composĂ© de plusieurs cartes. Chaque plateau a un nombre de cartes fixĂ©. Par dĂ©faut, un plateau est composĂ© de 12 cartes. Pour chaque carte, on dispose d’une image pour reprĂ©senter le visuel de la carte. Une carte dispose d’un niveau (vert, orange ou noir) en fonction du niveau de difficultĂ© de celle-ci. Chaque carte dispose Ă©galement de points, lĂ  encore dĂ©finis en fonction de la difficultĂ© de la carte. Une carte est associĂ©e Ă  une ou plusieurs contraintes de base. Ces contraintes ont un nom et on en considĂšre quatre : — une contrainte nommĂ©e **"face de dĂ©"** reprĂ©sentĂ©e par le couple ( _coul_ , _val_ ), oĂč _coul_ ∈{’rouge’,’jaune’,’bleu’} et _val_ ∈{1, 2, 3, 4, 5, 6} : Pour valider cette contrainte, le joueur doit obtenir au moins un dĂ© de couleur _coul_ avec la valeur _val_. — une contrainte nommĂ©e **"seuil de dĂ©s"** reprĂ©sentĂ©e par le triplet ( _coul_ , _seuil_ , _sens_ ), oĂč _coul_ ∈{’rou- ge’,’jaune’,’bleu’}, _seuil_ ∈{2,.. ., 36} et _sens_ ∈{ _<_ , _>_ } : Pour valider cette contrainte, le joueur doit obtenir un score cumulĂ© de valeurs de dĂ©s de couleur _coul_ qui soit strictement supĂ©rieur ou infĂ©rieur (selon la valeur de _sens_ ) Ă  la valeur _seuil_. — une contrainte nommĂ©e **"les mĂȘmes au choix"** reprĂ©sentĂ©e par le couple ( _coul_ , _nb_ ), oĂč _coul_ ∈{’rou- ge’,’jaune’,’bleu’} et _nb_ ∈{2, 3, 4} : Pour valider cette contrainte, le joueur doit obtenir au moins _nb_ dĂ©s de mĂȘme valeur et de couleur _coul_. — une contrainte nommĂ©e **"suite au choix"** reprĂ©sentĂ©e par le singleton ( _coul_ , _nb_ ), oĂč _coul_ ∈ {’rou- ge’,’jaune’,’bleu’} et _nb_ ∈{2, 3, 4} : Pour valider cette contrainte, le joueur doit obtenir au moins _nb_ dĂ©s de valeurs successives et de couleur _coul_. À partir de ces contraintes, il est possible d’associer Ă  chaque carte une ou plusieurs contraintes. Ainsi, la Figure 1 reprĂ©sente trois cartes associĂ©es Ă  une ou plusieurs contraintes "face de dĂ©s". La carte C005.png est associĂ©e Ă  une contrainte "face de dĂ©" (’bleu’,5). La carte C020.png est associĂ©e aux contraintes "face de dĂ©" (’bleu’,2) et (’rouge’,4). La carte C039.png est associĂ©e aux contraintes "face de dĂ©" (’jaune’,3), (’rouge’,3) (’bleu’,3). À noter que C039.png n’est pas associĂ©e Ă  une contrainte "les mĂȘmes au choix" car les couleurs imposĂ©es par dĂ© sont diffĂ©rentes. ``` Figure 1– Exemple de 3 cartes associĂ©es Ă  une ou plusieurs contraintes "face de dĂ©s" ``` ``` Figure 2– Exemple de cartes associĂ©es Ă  des contraintes "face de dĂ©", "seuil de dĂ©s" et "les mĂȘmes au choix" ``` D’autres exemples sont sur la Figure 2. La carte C053.png est associĂ©e Ă  une contrainte "seuil de dĂ©s" (’jaune’,14, ’ _>_ ’). La carte C072.png est asso- ciĂ©e aux contraintes "seuil de dĂ©s" (’rouge’,4, ’ _<_ ’) et "face de dĂ©" (’jaune’,2). La carte C056.png est associĂ©e Ă  la contrainte "les mĂȘmes au choix" (’bleu’,3). Pour finir, la Figure 3 reprĂ©sente trois cartes associĂ©es Ă  des contraintes "face de dĂ©", "les mĂȘmes au choix" et "suite au choix". ``` Figure 3– Exemple de 3 cartes associĂ©es Ă  une ou plusieurs contraintes "face de dĂ©s" ``` La carte C070.png est associĂ©e aux contraintes "les mĂȘmes au choix" (’jaune’, 2) et "face de dĂ©" (’jaune’, 2). La carte C068.png est associĂ©e Ă  la contrainte "sĂ©rie au choix" (’rouge’, 3). La carte C073.png est associĂ©e aux contraintes "les mĂȘmes au choix" (’bleu’,2) et "sĂ©rie au choix" (’rouge’, 2). ``` À noter que sur les 3 figures, le niveau des cartes est reprĂ©sentĂ© par la couleur de fond de la pastille des ``` points. Les cartes C005.png et C020.png sont des cartes vertes valant 1 point. Les cartes C053.png et C072.png sont des cartes vertes valant 2 points. Les cartes C039.png, C056.png, C070.png et C068.png sont des cartes oranges valant 4 points. Enfin la carte C073.png est une carte noire valant 5 points. Au dĂ©but d’une partie, une couleur de pion est attribuĂ©e alĂ©atoirement Ă  chaque joueur. Chaque pion est placĂ© sur la carte ’dĂ©part’. Un ordre de passage est choisi. Trois modes sont possibles : — Un mode dit **honneur au plus jeune** : l’ordre de passage se fait du plus jeune au plus ancien en fonction de la date de naissance des joueurs. Pour les joueurs nĂ©s le mĂȘme jour, l’ordre de passage se fera en fonction du nom selon l’ordre lexicographique. — Un mode dit **honneur au moins expĂ©rimentĂ©** : l’ordre de passage se fait du joueurs ayant fait le moins de parties Ă  celui qui en a fait le plus. Pour les joueurs ayant fait le mĂȘme nombre de parties, l’ordre de passage se fera en fonction du nom selon l’ordre lexicographique. — Un mode dit **alĂ©atoire** : l’ordre de passage se fait de maniĂšre alĂ©atoire. Une partie se dĂ©roule en plusieurs tours (autant que nĂ©cessaires pour que tous les joueurs franchissent la carte ’arrivĂ©e’). À chaque tour, chaque joueur choisit une main constituĂ©e de 6 dĂ©s dont un certain nombre de dĂ©s rouges, de dĂ©s jaunes et de dĂšs bleus. À partir de cette main, le joueur a droit Ă  au plus 3 lancers. AprĂšs chaque lancer, le joueur sĂ©lectionne le ou les dĂ©s qui permettent de valider une ou plusieurs contraintes de la prochaine carte sur laquelle il veut avancer. Si toutes les contraintes de la carte sont validĂ©es, le pion du joueur peut alors avancer sur cette carte. En termes de stratĂ©gie pour avancer plus vite, le joueur peut chercher Ă  valider plusieurs cartes lors d’un mĂȘme tour. Toutefois, s’il se trouve sur la carte _n_ , qu’il arrive Ă  valider entiĂšrement les contraintes de la carte _n_ +2mais que la carte _n_ +1n’est pas entiĂšrement validĂ©e au bout des 3 lancers, le pion du joueur n’avancera pas. ``` L’ordre d’arrivĂ©e des joueurs permet d’établir le classement final. ``` La gestion des scores se fait de la maniĂšre suivante : — Pendant la partie, chaque joueur cumule les points des cartes qu’il a validĂ©es, points qui sont pondĂ©rĂ©es de la maniĂšre suivante, sachant qu’une tentative de validation correspond Ă  un tour (et non un lancer) : — le joueur cumule 3 fois le nombre de points de la carte, s’il la valide Ă  la premiĂšre tentative ; — le joueur cumule 2 fois le nombre de points de la carte, s’il la valide Ă  la seconde tentative ; — le joueur cumule le nombre de points de la carte, s’il la valide Ă  la troisiĂšme tentative ; — le joueur ne cumule aucun point au-delĂ  de la troisiĂšme tentative. — Pendant un tour, le nombre de points cumulĂ©s durant le tour est multipliĂ© par le nombre de cartes validĂ©es durant ledit tour. — À l’arrivĂ©e d’un joueur, son score correspond au nombre de points cumulĂ©s durant la partie multipliĂ© par la pondĂ©ration _ÎŽ_ , oĂč _ÎŽ_ correspond au nombre total de joueurs de la partie auquel on retranche le rang final dudit joueur augmentĂ© de un. Ainsi, pour une partie avec 5 joueurs, le joueur de rang 1 verra son nombre de points cumulĂ©s multipliĂ© par (5-1+1=) 5 et le dernier verra son nombre de points cumulĂ©s multipliĂ© par (5-5+1) = 1. ÉlĂ©ment trĂšs important : l’application doit permettre Ă  un joueur de se dĂ©connecter (volontairement ou non) et de pouvoir reprendre la partie lĂ  oĂč il en Ă©tait. Ainsi, la position des pions sur le plateau, la valeur des dĂ©s lancĂ©s durant un tour, le nombre de points cumulĂ©s, le nombre de tentatives de validation d’une carte par un joueur doivent ĂȘtre mĂ©morisĂ©s en base. En marge des parties, on souhaite gĂ©rer Ă©galement l’organisation de tournois et les classements de joueurs. Concernant les tournois, un tournoi est identifiĂ© par un entier numĂ©rique et il a un nom, une date de dĂ©but et une date de fin. Un tournoi se dĂ©compose en phase. Une phase est identifiĂ©e relativement au tournoi par rapport Ă  un niveau ’Poule de sĂ©lection’, ’SeiziĂšme de finale’, ’HuitiĂšme de finale’, ’Quart de finale’, ’Demi-finale’ et ’Finale’. Un joueur participe Ă  une phase de tournoi et on stocke l’information si le joueur a jouĂ© la phase et s’il s’est qualifiĂ© pour la phase suivante ou pas. À noter que si le joueur est qualifiĂ© pour la phase de niveau ’Finale’, cela signifie qu’il a gagnĂ© le tournoi. Les diffĂ©rentes Ă©ditions des tournois sont gĂ©rĂ©es par le fait que les tournois peuvent ĂȘtre en lien les uns avec les autres. Ainsi, le tournoi nommĂ© ’DeezCycle France 2024’ est en lien avec le tournoi nommĂ© ’DeezCycle Race France 2023’. Le type de lien entre les deux tournois est un lien d’édition. Les classements se font en fonction des points cumulĂ©s et du nombre de parties jouĂ©es. Un classement est identifiĂ© par un entier et on stocke la portĂ©e du classement (’internationale’, ’nationale’, ’rĂ©gionale’.. .). Il existe alors diffĂ©rents classements. Les joueurs peuvent ĂȘtre classĂ©s de maniĂšre individuelle ou en Ă©quipe. En effet, un joueur peut ĂȘtre membre d’une Ă©quipe. Les rĂ©sultats des membres d’une Ă©quipe sont agrĂ©gĂ©s, ce qui permet de classer les Ă©quipes. Au mĂȘme titre que les tournois, les classements peuvent ĂȘtre en lien. Ainsi, le Classement international ’World DeezCycle Ranking’ est en lien avec le classement national ’DeezCycle Race France’. Les types de lien peuvent ĂȘtre hiĂ©rarchiques. ## 3 Mise en place de la Base de DonnĂ©es ### 3.1 Construction de la base de donnĂ©es Dans un premier temps, vous allez concevoir la base de donnĂ©es Ă  partir des spĂ©cifications prĂ©cĂ©dentes. Votre modĂ©lisation doit respecter au mieux ces spĂ©cifications. 1. Produire un diagramme EntitĂ©/Association selon les spĂ©cifications fournies _via_ l’outil _mocodo_ (version en ligne https://www.mocodo.net/) ou Looping. 2. Produire le modĂšle relationnel dĂ©rivĂ© de votre schĂ©ma EntitĂ©/Association. Attention : si vous gĂ©nĂ©rez automatiquement ce schĂ©ma avec l’outil de modĂ©lisation, il est fortement recommandĂ© de le vĂ©rifier pour Ă©ventuellement le corriger ou le complĂ©ter. 3. Produire le script SQL permettant le crĂ©ation de votre base de donnĂ©es ( _idem_ que prĂ©cĂ©demment, il sera sĂ»rement nĂ©cessaire de le modifier si vous le gĂ©nĂ©rez automatiquement). ### 3.2 IntĂ©gration des donnĂ©es fournies Dans un deuxiĂšme temps, vous allez migrer les donnĂ©es existantes fournies dans la base de donnĂ©es _dataset_ dans votre base de donnĂ©es. L’utilisation de ces donnĂ©es est **obligatoire**. Les donnĂ©es fournies sont stockĂ©es dans une table qui ne correspond pas Ă  votre modĂšle de donnĂ©es, il va donc ĂȘtre nĂ©cessaire de transformer les donnĂ©es fournies pour pouvoir les insĂ©rer dans vos tables. Ce processus, que l’on appelle _intĂ©gration de donnĂ©es_ sera rĂ©alisĂ© Ă  travers des requĂȘtes SQL que vous exĂ©cuterez dans PHPMyAdmin. L’étape d’intĂ©gration peut se dĂ©composer en 3 parties : 1. RĂ©flĂ©chir aux correspondances entre les donnĂ©es existantes et votre schĂ©ma ( _e.g.,_ Ă  quel attribut de votre schĂ©ma correspond tel attribut fourni). VĂ©rifier si les types de donnĂ©es sont cohĂ©rents entre attributs correspondants et quelles sont les transformations nĂ©cessaires au niveau des valeurs. Il est important de comprendre que le jeu de donnĂ©es fourni n’est pas bien modĂ©lisĂ©. En consĂ©quence si vous modĂ©lisez votre schĂ©ma de base de donnĂ©es avec l’objectif d’intĂ©grer facilement les donnĂ©es fournies, votre schĂ©ma ne respectera plus les spĂ©cifications demandĂ©es. 2. Écrire les d’insertion du type _INSERT INTO maTable SELECT ... FROM donnees_fournies.instancesX ;_ permettant de peupler votre base. Il est important de noter que la base _donnees_fournies_ sera Ă  terme (avant la soutenance) supprimĂ©e. Donc les donnĂ©es doivent ĂȘtre absolument rĂ©cupĂ©rĂ©es dans votre propre base de donnĂ©es. **Remarque** : il n’est pas demandĂ© de dĂ©velopper une fonctionnalitĂ© permettant de gĂ©rer l’intĂ©gration depuis votre interface Web. Pour bien comprendre le principe par l’exemple, vous pouvez vous rĂ©fĂ©rer Ă  l’annexe A. ## 4 Les fonctionnalitĂ©s Dans ce projet, vous allez avoir Ă  dĂ©velopper des interfaces associĂ©es aux fonctionnalitĂ©s dĂ©crites dans cette section. Il est important dans un premier temps de dĂ©finir (ou rĂ©cupĂ©rer dans les TP4-5) ces primitives de votre modĂšle que vous pourrez alors utiliser pour le dĂ©veloppement des fonctionnalitĂ©s. Vous disposez avec le sujet des ressources graphiques associĂ©es aux cartes dans le rĂ©pertoire RessourcesGra- phiques*DĂ©Biclou. Les 75 cartes proposĂ©es sont dĂ©finies dans la base \_donnees_fournies* dans la table _’ressources’_. ### 4.1 Page d’accueil et statistiques En parallĂšle du processus d’intĂ©gration, vous pouvez commencer Ă  mettre en place votre site WEB Ă  partir du code fourni lors des TP prĂ©cĂ©dent. Il est important de conserver l’approche MVC que l’on vous a apprise. **À propos des statistiques** La premiĂšre fonctionnalitĂ© de votre application est de mettre en place la page d’accueil qui offre un descriptif de l’application et un ensemble d’informations et de statistiques. Parmi ces informations et ces statistiques, il est demandĂ© d’avoir au moins : ``` — "un n-uplet contenant le nombre de joueurs, le nombre d’équipes, le nombre de classements, le nombre de tournois et la moyenne des participants par tournoi". — "les phases de tournoi (nom et annĂ©e de tournoi, niveau de phase) jouĂ©es et pour lesquelles s’est qualifiĂ© l’utilisateur courant. Le rĂ©sultat sera triĂ© sur les annĂ©es selon l’ordre antĂ©chronologique puis sur les niveaux de phase selon l’ordre lexicographique inverse". — "le nombre d’équipes classĂ©es premiĂšres des classements et dont aucun des membres n’est premier dans un classement individuel". — "Pour les 3 derniĂšres annĂ©es, donner le nombre moyen de participants aux tournois". — "Donner le nom et le prĂ©nom des joueurs classĂ©s de maniĂšre individuelle dans le top 5 d’au moins 2 classements de portĂ©e nationale". — "Pour chaque taille de plateau, donner le nombre de parties jouĂ©es avec un plateau de cette taille". — "Le top 5 des joueurs (pseudo) qui ont jouĂ© le plus de parties". ``` **Ă  propos du design du site** Chaque page de votre site dispose d’une structure qui vous est imposĂ©e. En effet, pour chaque page vous devez avoir les cinq zones suivantes : — Un bloc "entĂȘte" ( _
_ ), qui contient le nom du site et un logo cliquable pour toujours revenir à la page d’accueil, — Un bloc "menu" ( _