Le Démineur et le Takuzu

Publié lundi 1 janvier 2024 à 10:50
Ajout de deux nouveaux jeux de réflexion solo pour ioTactile Games

Aucune intelligence artificielle n'a été utilisé dans la rédaction de cet article.

Contexte et objectifs


Après avoir effectué la refonte de Dice, le premier jeu de mon site, je souhaitais développer des jeux solo qui intègrent plus de logique algorithmique. Le démineur s'est imposé à moi par hasard après avoir visionné la vidéo Coding Challenge #71: Minesweeper du youtubeur The Coding Train. À la fin de sa vidéo, j'ai réalisé à quel point le développement de jeux de réflexion peut être éducatif et amusant. Je me suis fixé ces objectifs :

1. Produire une version fonctionnelle du démineur.

2. Donner une charte graphique futuriste et minimaliste.

3. Ajouter des scores et des résultats pour les joueurs connectés.

Vous retrouverez le code juste ici et mon site ici.

Organisation du code


Pour ce projet, j'ai opté pour la programmation orientée objet. Le code est structuré avec un fichier qui représente la classe portant le nom du jeu, un fichier "types" comprenant les différents types et interfaces, un fichier "cell" qui contient la classe d'une case de jeu, un fichier "timer" pour gérer le temps de jeu, et enfin un fichier "database" qui s'occupe des appels à la base de données Firestore (Firebase) pour enregistrer les scores.


Phase de développement


En premier lieu, j'ai implémenté des attributs privés que j'ai instanciés par un constructeur, donnant accès à ces attributs via des méthodes publiques. J'ai également créé la classe "cell" comprenant cinq attributs, dont quatre booléens indiquant si la case est une mine, si elle est dévoilée, si elle est une mine cliquée, et finalement, le nombre de mines autour d'elle. La dernière classe est le "timer" qui contient la durée en millisecondes et s'il est en pause ou non.

La méthode "setup" permet de définir les propriétés de la partie telles que le nombre de colonnes, de lignes, de mines, et la difficulté de la partie. Cette méthode appelle une autre qui génère le tableau avec le nombre de mines en paramètre.

Ensuite, une série de méthodes privées gèrent la génération aléatoire du tableau avec les mines, le calcul et l'attribution du nombre de mines à proximité de chaque case.

Lors des premiers tests, j'ai constaté que le premier clic était trop aléatoire, nécessitant de relancer fréquemment pour commencer réellement à jouer. J'ai donc décidé d'implémenter une règle unique permettant de cliquer sans perdre tant que l'on n'a pas cliqué sur une case sûre.

Cette règle conduit à la principale méthode "handleCellAction", qui gère les clics gauche ou droit du joueur. Elle permet d'attribuer un drapeau avec le clic droit, de cliquer sur une case non dévoilée, et de cliquer sur une case dévoilée avec le clic gauche.

En effet, afin de pouvoir avoir l'effet de cascade lorsque l'on clique sur une case qui n'a pas de mine adjacente, j'utilise une méthode récursive qui se déclenchera jusqu'à ne plus satisfaire les règles de ne pas avoir de mines adjacentes et de ne pas être encore dévoilée.

Afin de créer l'effet de cascade lorsqu'on clique sur une case sans mine adjacente, j'utilise une méthode récursive qui se déclenche jusqu'à ce qu'elle ne satisfasse plus les règles de l'absence de mines adjacentes et de non-dévoilement.

Pour rendre le jeu attractif et compétitif, j'ai ajouté, bien après la première version du jeu, la fonctionnalité de pouvoir cliquer sur une case déjà dévoilée pour découvrir toutes les cases adjacentes encore cachées. Il est nécessaire d'indiquer au préalable les mines potentielles par des drapeaux pour ne pas perdre. Cette fonctionnalité intègre le principe de récursivité précédemment expliqué pour créer l'effet de cascade sur les mines adjacentes.

Enfin, il reste quelques méthodes privées qui gèrent le déroulement d'une partie, notamment en cas de victoire, de défaite, pour lancer la partie ou la recommencer.


Fonctionnalités du Démineur


Vous pouvez jouer aux trois niveaux de difficulté traditionnels, ainsi qu'à un mode personnalisé qui vous permet de créer votre propre terrain avec le nombre de lignes, de colonnes, et de mines de votre choix.

Utilisez le clic droit pour placer des drapeaux et le clic gauche pour dévoiler une case ou les cases voisines d'une case déjà découverte. Vous pouvez mettre le jeu en pause pour ne pas avantager les joueurs réfléchissant pendant la pause, le tableau étant caché. La possibilité de redémarrer une partie terminée ou non est également présente.

Si vous êtes connecté sur le site, vos scores seront enregistrés et comparés avec ceux des autres joueurs dans la section classement.

Le jeu est entièrement jouable sur tout type d'écran. Pour les appareils tactiles, j'ai intégré un bouton en jeu permettant de basculer entre un clic pour dévoiler une case et un clic pour poser un drapeau.


Fonctionnalités du Takuzu


Vous pouvez jouer sur quatre tailles de plateau : 6 x 6, 8 x 8, 10 x 10, et 12 x 12, avec, pour chaque taille, quatre niveaux de difficulté ajustant le nombre de boules disponibles au lancement de la partie.

Je ne rentre pas en détail sur le processus de développement du Takuzu, car pour être totalement transparent, la majeure partie de la logique du jeu ne vient pas de moi. En effet, après plusieurs jours, je n'ai pas réussi à obtenir un jeu fonctionnel qui respecte toutes les règles du jeu. Il nécessitait un niveau de logique et de récursivité bien plus complexe que pour le démineur. En revanche, j'ai procédé à une analyse approfondie du code généré afin de le comprendre et de maintenir une mentalité d'amélioration continue.

Cependant, j'ai ajouté quelques fonctionnalités intéressantes telles que la réinitialisation de la partie, le retour en arrière permettant de retracer tous ses précédents coups et de reprendre là où vous le souhaitez, ainsi que l'ajout d'un "timer" et d'une pause.

Si vous êtes connecté sur le site, vos scores seront également enregistrés et comparés avec ceux des autres joueurs dans la section classement.

Le jeu est entièrement jouable sur tout type d'écran.



Conclusion


Je suis très fier de vous proposer ces deux nouveaux jeux de réflexion. J'ai encore amélioré ma programmation orientée objet, la structuration des dossiers et fichiers, ainsi que le découpage des fonctions en fonctions plus petites pour rendre la testabilité plus simple.

Le prochain article portera soit sur la création d'un clone du jeu Codenames, soit sur la réalisation de mon lecteur de musique d'ambiance disponible sur mon site.

Je tiens à remercier tous ceux qui ont lu cet article jusqu'au bout, et j'ai hâte de vous retrouver sur le Démineur ou sur le Takuzu. À bientôt et meilleurs vœux pour cette belle année 2024 !