Projet Boggle (Java / C / PHP / Python)







Collaborateurs :

Ethan CLERC Aurélien FAUCONNIER

Description :

Reproducton du jeu de lettre Boggle en Java, C, PHP et Python.

Compétences visées : Un projet muti-compétences - Englobe en soit toutes les compétences - Réaliser un développement d'application

Synopsis : Boggle est un jeu de mots rapide et amusant où vous devez trouver autant de mots que possible dans une grille de lettres en trois minutes. Les mots doivent être formés en connectant des lettres adjacentes et chaque lettre ne peut être utilisée qu'une seule fois dans chaque mot. Le joueur avec le score le plus élevé gagne!


Plus d'informations :

Le projet Boggle a été réalisé en équipe de 3 personnnes. C'est un énorme projet constitué de deux grandes phases, elles-même divisées en différents modules indépendant. Chaque module remplie une fonction et des compétences précises, qui ensuite sont assemblés pour former le jeu final.

  • Phase 1 : Back-end
    • Module L1 : Moteur de jeu (en C)
    • Module L1 Bis : Dictionnaire de fréquence (en java)
    • Module L2 : La base de données relationnelle (en PostgreSQL)
    • Module L3 : Le serveur WEB (en php)

  • Phase 2 : Front-end
    • Module L4 : L'interface graphique (en react et des communications via Python)
    • Module L5 : Une application mobile (en java)


Les autres compétences interviennent dans la gestion du projet et la communication qui sont indispensable pour un projet de cette envergure.

C'est donc un projet modulaire et multi-langage, ce qui a été un vrai challenge pour nous.

Schéma du découpage du projet



Phase 1: Le back-end


Comme dit précédemment, la phase 1 du projet consistait à réaliser le back-end du jeu. C'est à dire le moteur de jeu, le dictionnaire de fréquence, la base de données et le serveur web.

Module L1 : Moteur de jeu
Le module L1 est le moteur de jeu et correspond à la compétence 2: Optimiser des applications. En effet, étant le cœur du jeu, il est nécessaire qu'il soit le plus performant possible. C'est pourquoi il est codé en C, un langage très performant et très proche du langage machine permettant de répondre à des problèmes complexes avec des structures de données complexes.

Il est composé de plusieurs fonctions qui permettent de gérer le jeu, de vérifier les mots, de gérer les scores, etc. Voici les 6 exécutables nécessaires au bon fonctionnement du jeu :
  • Dictionnary_build
  • Dictionnary_lookup
  • Grid_build
  • Grid_path
  • Solve
  • Score

Ce module a été très intéressant à réaliser car il nous a permis de mettre en pratique les cours de développement efficace en faisant appelle à de la récursivité et à des structures de données telles que les arbres lexicographiques (Child-Sibling Tree). Nous avons également découvert l'utilisation des fichiers binaires que j'ai pu retrouvé dans le module L2 et d'autre projets.
Exemple d'un fichier binaire


Pour ma part, je me suis surtout occupé de l'exécutable Grid_build qui permet de générer une grille de jeu aléatoire en fonction d'un fichier de fréquence. C'est un programme faisant appel à un fichier externe d'où l'importance de gérer les différentes erreurs possibles lié à l'ouverture du fichier.

Gestion des erreurs


De plus le grand défi de ce programme est de réussir à gérer les doubles lettres ('qu'). Comme vous pouvez le voir dans l'image ci-dessous, j'ai choisi de créer une structure de données utilisant des allocations dynamiques pour gérer les doubles lettres.
Allocations dynamiques de mémoire


Module L1 Bis : Dictionnaire de fréquence
Le module L1 bis est le dictionnaire de fréquence et correspond à la compétence 1 : Réaliser un développement d’application. En effet, ce module est une application à part entière qui pourrait être utiliser même sans le jeu et qui est codé en java.

J'ai exclusivement travaillé sur ce module composé de 4 programmes :
  • CharTableMaker : Compte le nombre d'occurence de chaque lettre dans le dictionnaire (utilisé en entrée du moteur de jeu en C)
  • DictionnaryMaker (et indexMaker) : Créer un dictionnaire à l'aide d'un fichier JSON. (+ l'index de recherche)
  • DictionnarySearcher : chercher la définition d'un mot
  • NormalizedExtractor : extraire tous les mots normalisés (en majuscule et sans accents) contenu dans le dictionnaire


Ce fut un module intéressant de part l'utilsation de plugins tels que org.json ou jackson qui me sont aujourd'hui très utiles. Cependant, j'ai aussi rencontré quelques difficultés au cours de ce module. En effet, j'ai eu du mal à comprendre comment fonctionnait le parsage de fichier JSON ainsi que la création du fichier binaire via le indexMaker. Heureusement, j'avais déjà rencontré les fichiers binaires dans le module L1 et cela m'a beaucoup aidé à comprendre dans ce module.
Extrait du parsage et de la mise en index


Le programme DictionnarySearcher à le mérite d'être mis en avant. Mais il sera détaillé davantage dans la page Recherche dichotomique de la compétence 2.

Module L2 : La base de donnée relationnelle
Le module L2 est la base de donnée relationnelle et correspond à la compétence 4 : Gérer des données de l’information. Conformément à la compétence 4, nous avons respecter les différentes sous-compétences :
  • SC 1 : Optimiser les modèles de données de l’entreprise
  • SC 2 : Assurer la confidentialité des données (intégrité et sécurité)
  • SC 3 : Organiser la restitution de données à travers la programmation et la visualisation
  • SC 4 : Manipuler des données hétérogènes


En effet, notre BDD a été conçue en appliquant la 3ème FN (Forme Normale) ce qui garanti une optimsation et une hétérogénéité des données.
Modèle conceptuelle des donneés (MCD)


De plus, il est logique de mettre en place une sécurité pour les données. C'est pourquoi nous avons mis en place un système de login et de mot de passe chiffré.
Chiffrement des passwords


Module L3 : Serveur Web
Ce module est très concis dans la phase 1. Il consiste à regrouper tous les modules précédents sur une interface web PHP simple. Il est donc volontairement sans design car le front arrive dans la phase 2.

Le défi ici est de faire communiquer les différents modules entre eux.
Interface PHP simple du jeu

Phase 2: Le front-end

Module L4 : Interface graphique (sous react)
Le module L4 est la partie front-end du projet. Nous avons choisi d'utiliser React pour développer l'interface graphique .

Il était aussi très important pour nous d'avoir une IHM originale et agréable à utiliser. C'est pourquoi nous avons décidé de faire un design sobre et épuré avec des couleurs rappellant l'univers des jeux-vidéo.

Salle d'attente pour rejoindre des parties.


En ce qui concerne le jeu et toutes les communications entre le joueur et le serveur, nous avons utilisé des websockets. Cela nous a permis entre autre de faire notre système de chat en temps réel.

Partie de Boggle
Module L5 : Une application mobile
Nous avons aussi développé une application mobile pour le jeu. C'est une application Android développée en Java disposant de deux fonctionnalités :

  • Système de messagerie asynchrone (comme les mails)
  • Pouvoir joueur au jeu


Démonstration de l'application mobile