Aller au contenu principal
sports_esports Lab Canvas 2D Flood-fill Premier coup sûr

Démineur — le classique de Windows réécrit en Canvas 2D

Le jeu de déminage, réimplémenté from scratch en Canvas 2D : logique sur grille 12 × 12, flood-fill qui révèle les zones vides en cascade, comptage des mines voisines et génération différée des mines pour garantir un premier coup toujours sûr. Zéro dépendance.

Clic gauche : révéler Clic droit / appui long : drapeau Espace : rejouer

Un puzzle de logique, pas de hasard

Le Démineur (Windows, 1990) tient sur une grille de 12 × 12 cases dont 24 dissimulent une mine. Chaque case révélée affiche le nombre de mines présentes dans son voisinage immédiat, et c'est ce simple compteur qui transforme le jeu en pur exercice de déduction. Aucune dépendance, quelques kilo-octets de JavaScript et un <canvas> : le prétexte idéal pour travailler proprement une logique sur grille et un algorithme de propagation.

Le premier coup est toujours sûr

Rien de plus frustrant qu'une partie perdue au tout premier clic. Je l'évite par conception : les mines ne sont pas placées à l'avance. Elles sont tirées au sort après ce premier clic, en excluant la case touchée et ses huit voisines. Le joueur ouvre ainsi toujours sur une zone dégagée, ce qui garantit une partie décidable dès le départ. C'est une contrainte simple à énoncer, mais qui impose de différer la génération de l'état du jeu — un réflexe que j'applique partout : ne figer une donnée qu'au moment où l'on connaît réellement les règles qui la gouvernent.

Compter les voisins

Une fois les mines placées, je précalcule pour chaque case son nombre de mines adjacentes en parcourant ses huit voisines, avec un traitement soigneux des bords où le voisinage est tronqué. Ce comptage n'est fait qu'une seule fois : l'information est stockée dans un tableau indexé par case, et le rendu se contente ensuite de la lire. Séparer le calcul de l'affichage garde la boucle de dessin triviale et prévisible.

La révélation en cascade

Cliquer sur une case sans aucune mine adjacente ne révèle pas qu'elle seule : un flood-fill se propage de proche en proche et ouvre d'un coup toute la zone vide, en s'arrêtant net sur la bordure de chiffres qui l'entoure. Je l'implémente avec une pile explicite plutôt qu'une récursion, pour ne jamais risquer de saturer la pile d'appels sur une grande zone. Chaque case dépilée est marquée révélée, et ses voisines ne sont empilées que si elle-même est vide — un parcours de graphe classique, borné et sans doublon.

La rigueur invisible qui fait un bon produit

Premier coup garanti, cascade qui ne déborde jamais, compteur de mines fiable : aucun de ces détails n'est spectaculaire, et c'est précisément le sujet. Un logiciel de qualité, ce sont surtout ces cas limites traités correctement, une fois, au bon endroit. C'est l'attention que je porte à un projet client critique : anticiper les bords, différer ce qui doit l'être et livrer un comportement identique pour tout le monde, sans surprise.

Photo d'Emmanuel BALLERY, fondateur de x10

À propos de l'auteur

Emmanuel BALLERY est le fondateur de x10 solutions. Ces petits jeux sont surtout un plaisir de développeur, codés le week-end — pas une vitrine de mes missions, qui sont bien plus exigeantes. J'y soigne quand même la performance et la lisibilité, par habitude.

Voir plus arrow_forward
rocket_launch

Un vrai projet en tête ?

Ce petit jeu m'amuse, mais il ne dit pas grand-chose de mon métier : mes missions sont bien plus complexes. Si vous avez une application à concevoir ou à fiabiliser, c'est là que je suis vraiment utile.

Discuter de mon projet arrow_forward