Labyrinthe

Printemps 2016

Présentation


Ce projet a été conçu dans le cadre du premier cours d’architecture client-serveur & développement Web du cycle de préparation intégrée au sein de mon école d’ingénieurs. Lors de notre 2e année, ce module a eu pour but de nous faire découvrir les technologies de l’internet et du web. Il était composé de deux projets distincts. Le premier, celui présenté sur cette page, avait pour objectif de créer un Labyrinthe.

Vins

Les consignes


Ce projet s’est partagé en plusieurs travaux pratiques présentant chacun des étapes vues en cours :

  • TP 1 : nous avons dû réaliser une maquette d’application, c’est-à-dire un ensemble de page statiques. (HTML/CSS)
  • TP2&3 : Le but étant de dynamiser les pages réalisées au TP1, nous avons ajouté du code JavaScript à l’ensemble de nos pages statiques. Dans un premier temps, nous avons généré un code JavaScript permettant la mise en place du labyrinthe. Ensuite, nous devions insérer un gameplay comme par exemple :
    • Le démarrage de la partie avec l’affichage du joueur matérialisé sur la cellule d’entrée du labyrinthe.
    • Le déplacement avec les touches directionnelles du clavier sans franchir les murs.
    • Le déclenchement de la fin de partie lorsque que l’utilisateur parvient à la sortie.
    Dans un second temps, notre objectif était d’ajouter nos propres principes de jeu. Ces derniers sont spécifiés ci-dessous. Afin de rendre à l’application un aspect graphique plus attirant, nous avons fini les TP en mettant à jour le CSS.
  • TP4 : La finalité de ce TP était de nous apprendre à distribuer notre application web ‘Standalone’ pour en faire une application multi-clients, et donc multi- utilisateurs, servie par un serveur central en charge de l’intermédiation entre ses clients et utilisateurs. Pour cela, il a fallu concevoir un modèle de données pour le stockage (côté serveur avec MongoDB) des éléments partagés entre tous les clients et mettre en place une communication entre notre application existante et le serveur, avec l’aide de Node.js (côté serveur) et Ajax (dans jQuery) côté client.

Les principaux critères d’évaluation sont :

  • Pour l’exécution :
    • La couverture fonctionnelle.
    • La lisibilité des interfaces.
    • La facilité d’utilisation, l’ergonomie des interactions.
  • Pour le code :
    • La qualité des structures de données et des algorithmes.
    • La qualité d’écriture du code (indentations, commentaires, choix des identifiants, etc).
  • La rigueur est également prise en compte :
    • Respect des consignes de livraison, en particulier de la deadline.
    • Qualité du README.

Mon Labyrinthe et ses fonctionnalités


Afin d’effectuer une partie, le joueur a dans un premier temps, l’obligation de se créer un compte et de s’identifier, sinon il ne peut pas accéder au jeu. A l’aide des modules brcypt et express-session de NodeJS, l’application assure une authentification fiable et sécurisée. Une fois cette étape franchie, il peut jouer en choisissant le niveau de difficulté.
Les principes de jeu choisi :

  • Ajout de bonus et de malus :
    Ces éléments sont générés et disposés aléatoirement dans le labyrinthe à chaque fois qu’un nouveau labyrinthe est généré en, début de partie. Ils sont “ramassés” par le joueur lorsqu’il occupe la même case qu’eux.
    Les bonus :
    • Les vie permettent aux joueurs de gagner 1 point de vie.
    • Les temps permettent aux joueurs de gagner 5 secondes de temps additionnel.
    Le malus :
    • Les trou font perdre 3 points de vie aux joueurs.
    Le attention permet de tomber sur un bonus ou un malus :
    • un gain de 3 points de vie.
    • une perte de 3 points de vie.
    • le renvoi du joueur à la case de départ.
    • le labyrinthe change de sens : la case de départ devient celle d’arrivée.
  • Les fosses :
    Le joueur doit faire attention aux fosses. En effet, si celui-ci tombe dans l’une d’entre-elles, il perd 4 points de vie. Il faut d’ailleurs que le joueur fasse attention à sa jauge de vie car si le joueur perd toutes ces vies, la partie se termine et « game over ».
  • Un chronomètre :
    La partie se joue en temps limité. Un chronomètre indique au joueur son temps restant, ce temps étant fixé au départ de la partie. Ce temps et ainsi que la taille de la grille, est choisi par l’utilisateur lorsqu’il définit sur quel niveau de jeu il veut jouer.
    Quand le chronomètre tombe à 0, la partie est terminée, le joueur a perdu et ne gagne pas de points. Le jeu est alors bloqué et il n’est plus possible de se déplacer dans le labyrinthe.
  • Développement du système de calcul des scores :
    Le score est calculé avec plusieurs facteurs :
    • Le niveau de jeu choisi avant la partie. Plus le niveau est élevé, plus la partie est difficile et plus le score est important si le joueur arrive à sortir du labyrinthe.
    • Le nombre de vies récoltées.
    • Le temps restant à l’arrivée sur la sortie du labyrinthe.
    • Le nombre de déplacements réalisés pendant la partie.

Une fois la partie terminée, le score est sauvegardé si celui-ci est plus grand que 0. Toutes les informations de la partie sont elles aussi, sauvegardées. Ainsi, les joueurs peuvent avoir accès aux meilleurs scores dans la rubrique appropriée. La liste des meilleurs scores est relativement complète et permet aux visiteurs de voir les statistiques de chacun de façon détaillée avec de nombreux tris possibles. Toutes les données relatives aux joueurs et également aux meilleurs scores sont sauvegarder dans une base de données Mongo hébergé sur Mlab.