The premise is simple; clear a grid of hidden tiles to isolate the mines, but touch a mine and it's all over! As you clear, numbers on revealed tiles tell you how many adjacent tiles have mines on them, or if the tile has no dangerous neighbours it reveals all neighbouring tiles.
When developing this game, there are two key areas. The first is how the grid itself is built:
[grid] = [array of tiles, width x height] [placed mines] = 0 do until [placed mines] == [desired number of mines]: [pos] = select random tile if [pos] has mine then restart 'do' loop else: [grid][pos] has mine [placed mines] + 1 (loop) foreach [pos] in [grid]: set [grid][pos] danger = (number of adjacent tiles that have mines) (loop)
Once our grid has been built, we handle user input. This consists of the user clicking on a tile, as well as a function that handles revealing the tile to the player, and works as follows:
function reveal tile ( [tile] ): set [tile] revealed if [tile][danger] == 0: foreach [n] in [neighbours]: reveal tile( [n] ) (loop) end function if [clicked tile] has mine: game over else: reveal tile( [clicked tile] ) if [all tiles without mines] are revealed: game won
These are the key concepts behind the game minesweeper, so if you follow these carry on to see how the game can be put together!