Centralisation, mémorisation et restitution des différents résultat d'algorithmes de régulation

Remerciements

Nous remercions Monsieur Jacques Laffont pour avoir proposé ce projet et pour tout le temps et l'aide qu'il a mis à notre disposition pour le mener à bien.

Introduction

Le projet que nous avons choisi consiste en l’ajout et la consultation de données à travers un site internet. Il servira à comparer les méthodes utilisées pour venir à bout des différents circuits et extraire celle qui prendra le moins de temps et qui sera donc la méthode optimale.

Sommaire

Présentation du projet

Notre projet repose sur un jeu de simulation de contrôle d’un véhicule, l’objectif dans ce jeu étant de dépasser des obstacles en un minimum de temps.

Présentation du jeu

Capture d'écran du logiciel de simulation Capture d'écran du logiciel de simulation

Le but du jeu est de faire faire un tour de circuit à la voiture le plus rapidement possible. Pour cela, la voiture roule sur un circuit virtuel, simulée sur PC, elle est contrôlée par un programme écrit en langage C.

Rôle du projet

Le but de ce projet est de pouvoir sauvegarder les scores afin de les visualiser sur une page internet. Ceci ayant déjà été réalisé partiellement par Monsieur Jacques Laffont. L’intérêt de la refonte était aussi de délivrer un code facilement maintenable pour qu’il puisse être mis à jour par quelqu’un ayant des connaissances en php mais n’étant pas spécialiste du domaine.

Définition concrète des objectifs

Pour mener à bien ce projet, nous avons défini trois grands axes de travail :
  • Définir les données utilisées : comprendre l’intérêt de chaque donnée afin de hiérarchiser les scores et de ne pas stocker de redondances dans la base de données
  • Créer les pages de visualisation : création des pages adéquates pour une lecture facile, intègre et complète des données enregistrées
  • Mettre à jour l’insertion de données : modification des pages d’ajout de données pour qu’elles soient compatibles avec le nouveau modèle de données

Après plusieurs réunions avec notre professeur référent, nous avons aussi trouvé utile de rajouter un module d’administration pour créer une interface supplémentaire entre la base de données et l’administrateur de ces données. Ceci afin de réduire les passages par le Système de Gestion de Bases de Données (SGBD).

Outils utilisés

Nous avons réutilisés les langages avec lesquels l’ancienne version du site avait été construite, c’est-à-dire HTML, CSS et PHP
Pour mener à bien ce projet, nous avons utilisés les outils suivants :
  • Netbeans : C’est un environnement de développement intégré (IDE) qui permet de développer en langage PHP. Il existe de nombreux IDE permettant le développement en PHP mais nous avons choisi celui-ci pour son auto-complétion performante et l’intégration de plugins utiles tels que Subversion (cf ci-dessous)
  • Wamp : Plateforme de développement web contenant un serveur apache (permettant d’exécuter des scripts php) et le SGBD mysql (pour stocker les données).
  • Subversion (SVN) : C’est un logiciel de gestion de versions facilitant le travail collaboratif. Ce plugin intégré à Netbeans nous a permis de travailler efficacement en binôme.

Réalisation

Structuration des données

Après entretien avec Monsieur Jacques Laffont, nous avons réparti les données en deux tables comme suit :

Modèle relationnel de la base de données

Dictionnaire de données

Les clés primaires sont des nombres auto-incrémentés par le SGBD.
Nous avons choisi de regrouper les données concernant les circuits dans une table séparée des données de score pour éviter les redondances d’information. Ainsi, si le nombre de ckeckpoints d’un circuit est modifié, une seule ligne de la table sera mise à jour et non tous les lignes de score correspondantes à ce circuit.
Nous n’avons pas créé de table membre spécifique étant donné que la seule information à retenir était le nom d’utilisateur, l’adresse IP pouvant varier pour un même membre.

Pages de visualisation

Nous avons décidé de créer plusieurs pages pour la visualisation des données étant donné que l’interface ne sera pas la même si l’on veut visualiser le journal des courses, le classement, la fiche d’un joueur ou encore la fiche d’un circuit. C’est pourquoi nous avons conçu quatre pages différentes :
  • index.php : Cette page est la page d’accueil du site, elle affiche les N premiers joueurs pour chaque circuit/version (N étant paramétrable dans le fichier). Le clic sur un nom de joueur, de circuit ou un numéro de version permet d’être redirigé vers la page adaptée.
  • journal.php : Ici sont affichées toutes les courses. Par défaut le tri est organisé par date décroissante mais l’utilisateur peut trier les résultats de la page selon toutes les autres informations. Cette page peut accepter jusqu’à deux paramètres qui sont le critère de tri (tri) et l’ordre de tri (ordre).
  • circuit.php : Cette page liste les circuits présents dans la base de données puis affiche le classement sur le circuit/version concerné. Elle peut recevoir deux paramètres : le nom du circuit(nomcircuit) et la version du circuit (version).
  • membre.php : Lors de son appel sans paramètre, cette page affiche la liste des joueurs présents dans la base de données. Lors du clic sur un de ces joueurs, les N premiers scores de ce joueur sont affichés pour chaque circuit avec le classement associé. Cette page affiche aussi le nombre d’essai et la durée ces essais pour chaque circuit et de manière globale. Elle prend un unique paramètre qui est le nom du joueur (pseudo).
En plus de ces quatre pages principales de visualisation, nous avons créé d’autres fichiers annexes auxquels nous faisons appel dans les pages principales :
  • ident.php : contient les identifiants à la base de données. La création de ce fichier facilite la portabilité du projet sur un autre service d’hébergement.
  • header.php : Contient des informations de mise en page des pages principales : affichage du titre, du menu et lien avec le fichier de style (style.css). Ceci permet de ne modifier qu’un minimum de fichiers pour mettre à jour le style de toutes les pages.
  • footer.php : Inclut dans toutes les fichiers principaux, il contient les informations affichées en bas de page. Là aussi ce fichier a été créé pour une maintenance plus facile
  • listeCircuits.php : Ce fichier contient la fonction afficherListesCircuits() qui permet de faire apparaître la liste des circuits et des versions existants. Il a été créé car la fonction est appelée depuis plusieurs pages.
  • calculRang.php : Pour les mêmes raisons que listeCircuits.php, ce fichier contient une fonction calculRang() pouvant servir à plusieurs pages.

Scripts de mise à jour des données

Schémas ajout de données

La page post.php est localisée côté client et permet d’envoyer les données à la page ajout.php située sur le serveur. C’est cette dernière qui ajoutera concrètement le nouveau score dans la base de données.
La page ajout.php vérifie si le circuit est déjà présent dans la base de donnée et l’ajoute le cas échéant ou le met à jour si le nombre de checkpoint a augmenté.
Elle vérifie aussi que trop de scores ne sont pas ajoutés depuis une même adresse IP sans quoi ils ne seront pas sauvegardés (l’intervalle de temps et le nombre de scores sont paramétrables).

Module d'administration

Nous avons créé une page d’administration afin qu’un administrateur puisse supprimer des scores de la base de données (scores frauduleux par exemple). Sur cette page apparaissent donc la liste de tous les scores qui peut être triée selon tous les critères affichés et qui laisse la possibilité de supprimer chacun de ces scores. Cette page (admin_scores.php) est protégée par un système de sessions. L’administrateur doit donc passer d’abord par la page admin.php pour se connecter avec un mot de passe stocké dans la base de données.

Table stockant les administrateurs

Guide d'installation

Pour mettre en place le projet, voici les étapes à suivre :
  • Transférer l’intégralité des fichiers du projet sur le serveur hébergeant les pages,
  • Mettre à jour le fichier ident.php avec les identifiants de connexion l’hébergeur,
  • Créer la base de données dont le nom a été définit dans le fichier ident.php,
  • Aller sur la page creer_tables.php qui demandera de renseigner un nouveau nom d’administrateur avec son mot de passe. Une fois ce formulaire validé, toutes les tables seront créées et l’administrateur sera ajouté,
  • Remplacer l’ancien fichier post.php par le nouveau dans l’archive du jeu en prenant soin de corriger l’adresse qui pointe sur le fichier ajout.php,

Le projet est alors en place.

Remarques pour l’hébergeur free :
  • Il est nécessaire de créer un répertoire vide appelé sessions pour que le module d’administration puisse fonctionner
  • Il faut paramétrer les réglages de façon à ce qu’il accepte la version 5 de PHP (utilisation de la bibliothèque PDO pour accéder à la base de données)

Conclusion

Ce projet nous a permis de manipuler les langages les plus utilisés sur le web actuellement que sont HTML, CSS et PHP à travers la création d’un site internet qui sera réellement utilisé, ce qui a rendu le projet d’autant plus motivant.
Nous avons aussi dû modéliser et manipuler les données avec mySQL ce qui nous a permis d’avoir une vue globale du projet en combinant les données et les traitements.
Le travail en équipe a été productif par l’utilisation d’un système de travail collaboratif et par la décomposition en plusieurs fichiers.
Même si le projet nous a pris plus des vingt heures initialement prévues, nous avons pris soin de produire un code modulable, réutilisable et documenté ce qui était un des principaux objectifs.

Lexique

  • Adresse IP (Internet Protocol) : Numéro d’identification attribué à chaque appareil connecté à un réseau utilisant le protocole IP.
  • IDE (Integrated Development Environment) : Logiciel comprenant un éditeur de texte, un compilateur (pour les langages compilés) et un débogueur afin de développer.
  • PDO (Php Data Object) : Interface permettant l’accès à une base de données depuis php.
  • PHP (Hypertext Preprocessor) : Langage de programmation interprété utilisé principalement pour les pages web mais aussi pour les scripts.
  • SGBD (Système de gestion de bases de données) : Interface destinée à stocker et à partager des informations dans une base de données
  • SQL (Structured Query Language) : Langage informatique normalisé servant à effectuer des operations sur des bases de données relationnelles.
  • SVN (Subversion) : Logiciel de gestion de versions

Webographie

presentation2.JPG - Capture d'écran du logiciel de simulation (60.1 KB) Valentin Elvassore, 06/26/2013 05:54 PM

presentation1.png - Capture d'écran du logiciel de simulation (118 KB) Valentin Elvassore, 06/26/2013 05:55 PM

bdd.jpg - Modèle relationnel de la base de données (54 KB) Valentin Elvassore, 06/26/2013 06:19 PM

dicodedonnees.jpg - Dictionnaire de données (198 KB) Valentin Elvassore, 06/26/2013 06:36 PM

ajoutdonnees.jpg - Schémas ajout de données (22.3 KB) Valentin Elvassore, 06/26/2013 06:52 PM

table_admin.jpg - Table stockant les administrateurs (51.5 KB) Valentin Elvassore, 06/27/2013 09:02 AM