From 2ed144ff8c58206c83978202d7846406c56b5be5 Mon Sep 17 00:00:00 2001 From: Morph01 <145839520+Morph01@users.noreply.github.com> Date: Mon, 18 Mar 2024 22:31:29 +0100 Subject: [PATCH] project basis --- INSTALL.txt | 17 + README.md | 629 ++++++++++++++++++++++++ controleurs/accueil_controleur.php | 3 + controleurs/statistiques_controleur.php | 15 + controleurs/tables_controleur.php | 36 ++ css/style.css | 142 ++++++ img/bd.png | Bin 0 -> 8881 bytes img/by-nc-sa-eu.png | Bin 0 -> 4395 bytes img/deezcyclelogo.png | Bin 0 -> 101897 bytes inc/.DS_Store | Bin 0 -> 6148 bytes inc/config-bd.php | 8 + inc/includes.php | 4 + index.php | 72 +++ modele/modele.php | 205 ++++++++ static/footer.php | 10 + static/header.php | 19 + static/menu.php | 6 + vues/accueil_vue.php | 35 ++ vues/statistiques_vue.php | 41 ++ vues/tables_vue.php | 116 +++++ 20 files changed, 1358 insertions(+) create mode 100644 INSTALL.txt create mode 100644 README.md create mode 100644 controleurs/accueil_controleur.php create mode 100644 controleurs/statistiques_controleur.php create mode 100644 controleurs/tables_controleur.php create mode 100644 css/style.css create mode 100644 img/bd.png create mode 100644 img/by-nc-sa-eu.png create mode 100644 img/deezcyclelogo.png create mode 100644 inc/.DS_Store create mode 100644 inc/config-bd.php create mode 100644 inc/includes.php create mode 100644 index.php create mode 100644 modele/modele.php create mode 100644 static/footer.php create mode 100644 static/header.php create mode 100644 static/menu.php create mode 100644 vues/accueil_vue.php create mode 100644 vues/statistiques_vue.php create mode 100644 vues/tables_vue.php diff --git a/INSTALL.txt b/INSTALL.txt new file mode 100644 index 0000000..0e9b384 --- /dev/null +++ b/INSTALL.txt @@ -0,0 +1,17 @@ +############################################################## +# Fichier d'aide pour utiliser le site "BDWebAdmin" # +# Cours de BDW1 - Bases de données et programmation web # +# Nicolas LUMINEAU, Université Claude Bernard Lyon 1 # +############################################################## + + +Pour utiliser ce site sur le serveur de l'UE (bdw.univ-lyon1.fr), quatre étapes : + +- éditer le fichier "includes/config-bd.php" et modifier les valeurs des constantes "UTILISATEUR", "MOTDEPASSE" et "BDD". + +- envoyer le répertoire "BDWebAdmin" sur le serveur (soit avec scp ou rsync en ligne de commande, soit avec un outil graphique comme FileZilla). + +- ouvrir un navigateur et saisir l'url "http://bdw.univ-lyon1.fr/p1234567/BDWebAdmin/" en ayant remplacé p1234567 par votre propre identifiant. + +Pour la réalisation de ce TP, à chaque fois qu'un mot de passe vous est demandé, il s'agit de celui stocké dans la cellule 'password' de TOMUSS. + diff --git a/README.md b/README.md new file mode 100644 index 0000000..a0e36c7 --- /dev/null +++ b/README.md @@ -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 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" ( _