project basis

This commit is contained in:
Morph01
2024-03-18 22:31:29 +01:00
commit 2ed144ff8c
20 changed files with 1358 additions and 0 deletions

629
README.md Normal file
View File

@@ -0,0 +1,629 @@
# 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 lapplication 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 daccueil 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é dune 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 linté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 laccord du responsable de lUE.
À 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 dintroduction aux bases de données**. La non-utilisation dune 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 lobjectif davoir 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 lapplication
Lobjectif 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 sappuiera 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 lheure
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 dun 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 dune image pour représenter le visuel de la carte. Une carte dispose dun
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 dassocier à 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 nest 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"
```
Dautres 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 dune 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** : lordre 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, lordre de passage se fera en fonction
du nom selon lordre lexicographique.
— Un mode dit **honneur au moins expérimenté** : lordre 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, lordre de
passage se fera en fonction du nom selon lordre lexicographique.
— Un mode dit **aléatoire** : lordre 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 dun
même tour. Toutefois, sil se trouve sur la carte _n_ , quil arrive à valider entièrement les contraintes de la carte
_n_ +2mais que la carte _n_ +1nest pas entièrement validée au bout des 3 lancers, le pion du joueur navancera pas.
```
Lordre darrivé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 quil a validées, points qui sont pondérées
de la manière suivante, sachant quune tentative de validation correspond à un tour (et non un lancer) :
— le joueur cumule 3 fois le nombre de points de la carte, sil la valide à la première tentative ;
— le joueur cumule 2 fois le nombre de points de la carte, sil la valide à la seconde tentative ;
— le joueur cumule le nombre de points de la carte, sil 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.
— À larrivée dun 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 : lapplication 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 dune carte par un
joueur doivent être mémorisés en base.
En marge des parties, on souhaite gérer également lorganisation 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 linformation si le joueur a joué la phase et
sil sest qualifié pour la phase suivante ou pas. À noter que si le joueur est qualifié pour la phase de niveau
Finale, cela signifie quil 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 dune équipe. Les résultats des membres dune é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_ loutil _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 loutil 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. Lutilisation 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 lon appelle _intégration de données_
sera réalisé à travers des requêtes SQL que vous exécuterez dans PHPMyAdmin.
Létape dinté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 nest pas bien modélisé. En conséquence si vous modélisez votre
schéma de base de données avec lobjectif dintégrer facilement les données fournies, votre schéma ne
respectera plus les spécifications demandées.
2. Écrire les dinsertion 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 nest pas demandé de développer une fonctionnalité permettant de gérer lintégration depuis
votre interface Web.
Pour bien comprendre le principe par lexemple, vous pouvez vous référer à lannexe 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 daccueil et statistiques
En parallèle du processus dinté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 lapproche MVC que lon vous a apprise.
**À propos des statistiques**
La première fonctionnalité de votre application est de mettre en place la page daccueil qui offre un descriptif
de lapplication et un ensemble dinformations et de statistiques. Parmi ces informations et ces statistiques, il
est demandé davoir 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 sest qualifié
lutilisateur courant. Le résultat sera trié sur les années selon lordre antéchronologique puis sur les niveaux
de phase selon lordre lexicographique inverse".
— "le nombre déquipes classées premières des classements et dont aucun des membres nest 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 dau 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 dune structure qui vous est imposée. En effet, pour chaque page vous
devez avoir les cinq zones suivantes :
— Un bloc "entête" ( _<header>_ ), qui contient le nom du site et un logo cliquable pour toujours revenir à la
page daccueil,
— Un bloc "menu" ( _<nav>_ ) dans lequel chaque élément permet daccéder à une page spécifique,
— Un bloc "contenu de la page" ; contenu qui sadaptera en fonction de la fonctionnalité à laquelle lutilisateur
souhaite accéder,
— Un bloc "pied de page" ( _<footer>_ ), qui contiendra au moins un lien vers le site de lUCBL, le nom des
auteurs du site, lannée de réalisation, un lien vers une page statique contenant le plan du site...
Concernant la mise en forme du site, elle se fera avec des styles CSS. Le projet sera évalué avec le navigateur
Mozilla Firefox, donc vérifiez le rendu de votre site avec ce navigateur!
Concernant le rendu, il est possible dembellir votre application en ajoutant des composants ou widgets
javascript. Il est cependant important de garder en mémoire que le projet est un projet PHP, donc la proportion
de javascript doit rester raisonnable.
### 4.2 Fonctionnalité 1 : liste des parties terminées et en cours
```
Cette fonctionnalité, que lon nommera "afficherPartie", consiste à lister les parties se trouvant en base.
```
Pour cette fonctionnalité, on affichera les informations sur les parties sous la forme dun lien hypertexte
faisant apparaître les informations suivantes (quand celles-ci existent) :
```
— Identifiant de partie,
— Date et horaire de la partie,
— Taille du plateau,
```
```
— Triplet (nbB, nbJ, nbR) représentant respectivement le nombre de cartes vertes, oranges et noires dans la
partie,
— Liste des pseudos des joueurs de la partie,
— Podium (1 e , 2 e et 3 e places) des joueurs avec respectivement leur nombre de points gagnés dans la partie.
Ainsi, vous devez :
```
1. Créer le contrôleur et la vue associés à cette fonctionnalité.
2. Afficher la liste des parties dans létat ’À venir.
3. Afficher la liste des parties dans létat En cours (potentiellement interrompue).
4. Afficher un formulaire permettant de sélectionner un mode daffichage des parties terminées. On considé-
rera une liste déroulante avec au moins les modes daffichage suivants :
— "Toutes les parties",
— "Les 50 parties les plus récentes" avec un tri de la plus récente à la plus ancienne,
— "Les 50 parties plus rapides par taille de plateau" avec un tri par nombre de cartes décroissant puis,
pour les parties avec un plateau de même taille, de la plus rapide à la plus lente.
### 4.3 Fonctionnalité 2 : Mise en place de la partie
Cette fonctionnalité, que lon nommera "creerPartie", consiste à créer en base une partie paramétrée par
lutilisateur et de lui associer des joueurs.
```
Pour cela, vous devez :
```
1. créer le contrôleur et la vue associés à cette fonctionnalité.
2. afficher, quand aucun formulaire nest soumis, un formulaire permettant de saisir les paramètres de la
partie qui contient au moins :
— le nombre de cartes constituant le plateau (en plus des cartes de départ et darrivée)
— le nombre de cartes vertes à sélectionner
— le nombre de cartes oranges à sélectionner
— le nombre de cartes noires à sélectionner
— un bouton de soumission du formulaire qui déclenche la création de la partie en base.
3. créer la partie en base dans un état A venir. Une fois la partie créée, il faut créer le plateau avec la taille
saisie dans le formulaire et associer le plateau courant à la partie courante. Une fois le plateau créé, il
est nécessaire de choisir aléatoirement autant de cartes vertes, oranges et noires que demandées dans le
formulaire pour les associer au plateau courant. Il sera évidemment nécessaire de sassurer que le nombre
de cartes sélectionnées est cohérent avec la taille du plateau.
4. afficher, quand le formulaire de saisie des paramètres de la partie est soumis, un formulaire permettant de
sélectionner des joueurs, qui contient au moins :
— une liste déroulante contenant la liste de tous les noms, prénom et pseudo des joueurs en base.
— un bouton de soumission dajout dune personne, qui rechargera la page en affectant la personne
sélectionnée à la partie courante. Une couleur sera alors associée aléatoirement à la personne, ce qui
correspondra à la couleur de son pion dans le jeu.
— un bouton de soumission de retrait dune personne, qui rechargera la page en retirant la personne
sélectionnée de la partie courante (pour gérer les éventuelle erreur daffectation).
— une liste déroulante contenant la liste des stratégies dordre de passage Honneur au plus jeune",
"Honneur au moins expérimenté" ou "Aléatoire".
— un bouton de soumission de validation de la partie. En fonction de la stratégie dordre de passage des
joueurs, il est nécessaire de calculer lordre de passage des joueurs et de mettre à jour linformation
en base.
**Remarque damélioration :** Le protocole proposé est une proposition, libre à vous de proposer un
autre protocole, qui peut se baser sur le principe dinvitation de certains joueurs, dinscription à la partie par
publication sur une page des parties en attente de joueurs...
### 4.4 Fonctionnalité 3 : Déroulé dune partie
```
Cette fonctionnalité, que lon nommera "jouerPartie", correspond au déroulement dune partie.
```
```
Pour cela, vous devez :
```
1. créer le contrôleur et la vue associés à cette fonctionnalité.
2. afficher, quand aucun formulaire nest soumis, les différents éléments permettant le déroulé dune partie :
— le plateau contenant les cartes sélectionnées,
— un numéro au-dessus de chaque carte (hormis carte de départ et darrivée) qui servira à associer les
dés lancés à la carte lors du déroulement de la partie,
— les pions de chaque joueur placés sur ou à hauteur de la case de départ,
— la liste des joueurs (pseudo) triée selon lordre de passage déterminé précédemment.Le nom des joueur
doivent apparaître de la couleur correspondant à leur pion.
— un bouton de soumission pour lancer la partie. Au lancement de la partie, la base est mise à jour
pour sauvegarder la date et lhoraire de début de partie. Létat de la partie passe à En cours.
3. créer un tour pour la partie. À la création du tour, le pseudo du joueur courant est indiqué et sauvegardé
en base. Le formulaire précédent saffichera hormis le bouton de soumission pour lancer la partie qui est
remplacé par les onglets permettant au joueur courant de choisir une main. On a donc :
— un onglet de saisie du nombre de dés bleus,
— un onglet de saisie du nombre de dés jaunes,
— un onglet de saisie du nombre de dés rouges,
— un bouton de soumission pour enregistrer la main en base et permettre ensuite au joueur courant de
lancer 3 fois les dés.
4. créer la main associée au joueur courant pour le tour courant dans la base. Une fois la main créée, afficher :
— les dés correspondants à la main,
— le numéro du tour,
— le nombre de lancers restant,
— un bouton "lancer les dés" pour que le joueur courant puisse lancer les dés.
5. lancer les dés consiste à choisir aléatoirement des valeurs entre 1 et 6 pour chaque couleur de dés de la
main. Ce choix est mis en base. Pour permettre ensuite à lutilisateur dassocier un dé à une carte pour
valider sa contrainte, le joueur courant verra afficher sur la page :
— les dés correspondant au lancer,
— à côté de chaque dé, on affichera une liste déroulante cor-
respondant au numéro des cartes du plateau quil reste à
parcourir et loption Affecter une carte comme représenté
sur la Figure 4.
— le nombre de lancers restant,
— le nombre de tentatives de validation de la carte suivante
( _i.e.,_ depuis combien de tours le joueur essaie de valider
la carte suivante) ,
— un bouton "lancer les dés" pour que le joueur courant
puisse lancer les dés.
```
Figure 4 : Illustration de
laffectation de dés à des cartes
```
6. valider laffectation dun dé à une carte. Il est nécessaire de sassurer que la ou les affectations à une carte
sont possibles. Si laffectation est valide, elle est mise en base. Les dés affectés ne peuvent plus être utilisés
au lancer suivant.
7. avancer le pion du joueur au bout des 3 lancers. Une fois les 3 lancers effectués, identifier la ou les cartes
dont toutes les contraintes sont validées. Affecter la nouvelle position du joueur et la mettre en base.
Calculer le nombre de points obtenus par le joueur.
8. passer au joueur suivant en mettant à jour la base.
9. changer de tour, une fois que tous les joueurs ont effectué leurs 3 lancers,
10. détecter si un joueur est arrivé. Dans le cas où le joueur valide la dernière carte (avant celle de larrivée),
le rang final du joueur est mémorisé en base.
11. détecter si tous les joueurs sont arrivés. Dans le cas où le dernier joueur est arrivé, on mémorise la durée
de la partie et on calcule les scores des joueurs selon le principe décrit dans le cahier des charges. Létat
de la partie passe à Terminée. On affichera alors :
— lordre darrivée des joueurs
— le nombre de points gagnés pour chaque joueur
**Remarque importante :** Il est rappelé ici quà tout moment le navigateur peu être fermé et la partie
interrompue. Il est donc important de bien mettre en base toute information permettant de reprendre la partie
là où elle a été interrompue.
### 4.5 Fonctionnalité 4 : fonctionnalités supplémentaires
En fonction de lavancement de votre projet, libre à vous de proposer des amélioration dans le déroulé de la
partie, ou des fonctionnalités supplémentaires telles que la gestion des tournois, des classements, la proposition
de nouvelles règles de jeux...
## 5 Déroulé du projet et jalons
```
Lors de la réalisation de votre projet, on vous demande de respecter le calendrier de jalons suivant.
```
### 5.1 Les jalons
#### JALON 1
Lors de la séance de TP du 29/03/2023, vous présenterez votre schéma entité association en létat. Une
appréciation vous sera alors attribuée.
#### JALON 2
Lors de la séance de TP du 05/04/2023, vous présenterez votre base de données peuplées et les requêtes
statistiques. Une appréciation vous sera alors attribuée.
#### JALON 3
Lors de la séance de TP 13/04/2023, vous présenterez létat davancement du déroulé dune partie. Une
appréciation vous sera alors attribuée.
### 5.2 Rendu du projet
```
Ce projet est à rendre avec les consignes de rendu suivantes :
— Larchive rendue (un seul par binôme) aura une extension .zip et il doit inclure votre/vos nom(s) à la fois
dans le nom de fichier et en entête de chacun de vos fichiers
— Ce fichier zip contiendra au moins 4 fichiers :
— larchive contenant les pages de votre site (code commenté et indenté).
— un fichier .sql qui contiendra le script SQL "exécutable" de création de votre base de données,
— un fichier .sql qui contiendra le script SQL "exécutable" dimportation des données dans votre base,
— un fichier contenant votre MCD (schéma E/A).
Ce fichier zip est à rendre le 18 avril à 23h59 dans la zone de dépôt TOMUSS dédiée (Rendu_projet).
```
### 5.3 Calendrier récapitulatif
```
Date Type Description
29/03/23 Jalon 1 Évaluation du schéma E/A en séance
05/04/23 Jalon 2 Évaluation état BD et statistiques en séance
13/04/23 Jalon 3 Évaluation état davancement déroulé dune partie
18/04/23 Jalon 4 Dépôt sur TOMUSS de votre rendu de projet
19/04/23 Soutenance démonstration de lapplication
```
## 6 ANNEXE A : à propos de lintégration de données
```
On considère dune part, la relation initiale R définie comme suit :
R (idA, A1, A2, B1, B2, C1, C2, D)
```
```
En sachant que D est une valeur numérique représentant une capacité mémoire en Mo.
```
```
Dautre part, on dispose du schéma relationnel suivant :
EA (idA, A1, A2), #idB)
EB (idB, B1, B2)
EC (idC, C1, C2)
ED (#idA, #idC, D)
```
```
En sachant que D est exprimé en Ko.
```
```
Ce modèle relationnel répond au schéma Entité/Association suivant :
```
```
Comment intégrer les données de R dans les relation EA, EB, EC, ED?
```
1. **Création de la table EB** : comme EB ne dispose daucune contrainte de clé étrangère, nous allons
commencer par créer la table correspondante. Cependant, il ny a pas de valeur deidBdans R. Nous
allons donc définiridB de typeinteger avec unAUTO_INCREMENT. On peut donc créer la EB de la
manière suivante :
CREATE TABLE EB (
idB integer AUTO_INCREMENT PRIMARY KEY,
B1 varchar(100),
B2 varchar(100)
)
2. **Création de la table EC** : on utilise le même principe que précédemment. On peut donc créer la EC
de la manière suivante :
CREATE TABLE EC (
idC integer AUTO_INCREMENT PRIMARY KEY,
C1 varchar(100),
C2 varchar(100)
)
3. **Création de la table EA** : comme lidentifiantidAde EA se trouve dans R, il est possible de récupérer
directement sa valeur dans R. On peut donc créer la EA de la manière suivante :
CREATE TABLE EA (
idA integer PRIMARY KEY,
A1 varchar(100),
A2 varchar(100),
idB integer
) ;
ALTER TABLE EA ADD CONSTRAINT fk_EA_EB FOREING KEY (idB) REFERENCES EB (idB) ;
4. **Création de la table ED** : La table ED peut être définie de la manière suivante :
#### CREATE TABLE ED (
```
idA integer,
idB integer,
D integer ) ;
```
```
ALTER TABLE ED ADD CONSTRAINT fk_ED_EA FOREING KEY (idA) REFERENCES EA (idA) ;
ALTER TABLE ED ADD CONSTRAINT fk_ED_EB FOREING KEY (idB) REFERENCES EB (idB) ;
```
5. **Peuplement de la table EB** : Pour cela, il est possible dutiliser la requête suivante :
```
INSERT INTO EB (B1, B2) SELECT DISTINCT B1, B2 FROM R ;
```
```
Les valeurs deidBsont alors définies.
```
6. **Peuplement de la table EC** : Pour cela, il est possible dutiliser la requête suivante :
```
INSERT INTO EB (B1, B2) SELECT DISTINCT B1, B2 FROM R ;
```
```
Les valeurs deidBsont alors définies.
```
7. **Peuplement de la table EA** : Pour cela, il est possible dutiliser la requête suivante :
```
INSERT INTO EA (idA, A1, A2, idB)
SELECT DISTINCT R.idA, R.A1, R.A2, EB.idB FROM R JOIN EB ON R.B1 = EB.B1 AND
R.B2 = EB.B2 ;
```
```
La valeur deidBen clé étrangère est retrouvée grâce à la jointure sur B1 et B2, que lon sait unique dans
ce cas particulier (du fait de la manière dont on a peuplé EB). Dans le cas général, il sera important de
sassurer que les attributs de jointures garantissent didentifier de manière unique le n-uplet.
```
8. **Peuplement de la table ED** : Pour cela, il est possible dutiliser la requête suivante en transformant
les données quand cela est nécessaire :
```
INSERT INTO ED (idA, idC, D)
SELECT DISTINCT R.idA, EC.idC, (1024 * R.D) as D FROM R JOIN EC ON R.C1 = EC.C1 AND
R.C2 = EC.C
```