File Exchange

image thumbnail


version 1.8 (41.8 KB) by

Minesweeper GUI with classical graphics, a persistent leaderboard, and an auto-solution engine



View License

The latest update adds public methods to the Minesweeper class that support external control of the GUI.
The included script AItest.m shows how to connect a custom "artificial intelligence" function to the GUI and programmatically make left/right-clicks.

CHALLENGE: Write your own AI engine to solve Minesweeper puzzles. Can you beat the speed and/or accuracy of the built-in EngineMove() method?

Feel free to share your AI code! I'd love to see your solution :)

Syntax: Minesweeper();

Inputs: level = {'Beginner','Intermediate','Expert'}
(nRows,nCols) = (#rows,#columns)
nMines = #mines

Description: This class generates a fully-functional Minesweeper GUI with beginner, intermediate,
expert, and custom levels, a persistent leaderboard, classical graphics, hints, and an
artificial intelligence (AI) auto-solution engine.

Objective: Uncover all safe squares without touching a mine. The numbers on each square denote the
number of mines adjacent to that square.

Controls: Left-click a square to open it. Right/CMD/CTRL-click a square to flag it as a
mine. For your safety, flagged squares cannot be left-clicked. Right/CMD/CTRL-click a flag
to remove it. Once you have flagged the appropriate number of mines adjacent to a
given square, you can left-click that square to cascade open its unflagged adjacent squares.
Finally, click the smiley button to reset the board, and change the board size through the
GAME menu.

Hints: Use the HINT menu to have a safe square opened for you when you are stuck. However,
note that using a hint will disqualify your time from appearing on the leaderboard.

Auto-solution: Use the SOLVE menu to invoke auto-solution mode. You can stop the solver
at any time by clicking the red stop button. Naturally, using the auto-solver will disqualify
your time from appearing on the leaderboard.

Author: Brian Moore

Comments and Ratings (2)

very nice

Matthias Held

Very nice contribution!



Improved handling of GUI children handles


Adding public methods to allow programmatic control of the GUI.

CHALLENGE: One can now easily design an external AI function to auto-solve a puzzle. Can you beat the speed and/or accuracy of the internal EngineMove() method?


Adding support for mouse right-click mine flagging (last update accidentally broke this...)


Adding close hot-keys support to auxiliary figures


Fixing description typo


Adding board reset accelerator


Fixing description typo


Fixing title typo

MATLAB Release
MATLAB 7.13 (R2011b)

Download apps, toolboxes, and other File Exchange content using Add-On Explorer in MATLAB.

» Watch video

Win prizes and improve your MATLAB skills

Play today