Resultat

La page finale
La page finale
La page ouverte sur un mobile
La page ouverte sur un mobile

Il est possible de jouer à ce mots croisées mathématiques pour résoudre des additions et des soustractions !


Pour jouer, il suffit de rentrer les valeurs dans les cases vides. Pour cela, vous pouvez vous aider des indices. Ils vous donnent la liste des nombres manquants


Une fois que vous êtes sur de ce que vous avez entré, appuyez sur le bouton "Valider" pour avoir le verdict (sans la correction comme ça vous pouvez réessayer).


Pourquoi ?

Dans mon option de troisième année, j'ai des temps aménagés en autonomie pour travailler sur des projets de 2 types : les MON (2x10h par temps dans lesquelles je peux apprendre en autonomie sur un sujet en informatique, gestion de projet ou management); et les POK (20h pour réalisés un mini-projet qui me permet de démontrer mes connaissances). Pour ce premier temps, j'ai décidé d'apprendre Rust pendant mes 2 premiers MON et de réaliser un site qui utilise du webassembly pour mon premier POK. J'ai passé 20h et 26 minutes à la réalisation de ce projet (en comptant le temps pour découvrir le webassembly).


Au départ, pour ce projet, tout ce que je savais c'est que j'allais écrire du Rust, le compilé en webassembly pour ensuite utiliser ce code dans un site. L'idée de faire ce jeu de "mots croisées" mathématiques m'est venu après mes premiers tests. J'avais vu une publicité d'une application mobile avec un jeu de la sorte, et j'ai trouvé que le défi était intéressant tout en restant faisable dans les temps.


Les difficultés

Après avoir compris ce qu'est le webassembly et comment passer du Rust au webassembly, je me suis lancé dans le gros du sujet : écrire l'algorithme de génération de la grille du jeu


Le programme fonctionnerait de la façon suivante : mon webassembly génère les grilles et le site les affiches en laissant la possibilité au joueur d'intéragir avec cette grille. L'algorithme de génération des grilles, doit donc créer n équations aléatoirement et les placer dans une grille. Il renvoie ensuite cette grille après avoir retiré des nombres aléatoirement. Pour ce faire, j'utilise une struct Equation, qui contient 3 entiers : x, y et z tels que x + (ou -) y = z. Cette equation a aussi une direction et un sens (de la gauche vers la droite, du haut vers le bas, etc...). L'algorithme va ensuite générer une grille avec suffisemment de cases pour que les n équations puissent rentrer (100 * n² cases). Il commence par mettre une équation complètement aléatoire au milieu de la grille. Ensuite, il sélectionne l'un des nombre de la grille (appelons le k), et crée une équation aléatoire dans laquelle k est un des termes (ou le résultat). Ensuite, l'algorithme va essayer de voir dans quel direction et dans quel sens il doit insérer ladite équation. Si cette direction et ce sens n'existe pas, il choisi un autre nombre présent dans la grille et récommence.


A chaque fois que l'algorithme entre une équation dans la grille, il ajoute dans quel sens et dans quelle direction elle est insérée. Il garde aussi en mémoire une liste des nombres présent dans la grille. Ces nombres sont "disponibles" si ils ne sont associés qu'à une équation dans la grille.


Avant de renvoyer la grille, l'algorithme retire les cases qui sont inutiles.


Ce que j'ai appris

Ce projet m'a permis de mettre en pratique ce que j'ai appris sur Rust durant mes deux premiers MON.


J'ai aussi pu découvrir le WebAssembly, je trouve ça assez fascinant !


Retrouvez le code de mon projet sur mon github.