Hi everyone,
as a challenge, I tried to implemente the logic of recursion in Power Apps. The best example I found was the game Mine Sweeper (old school cool !).

I'm a great designer, I know
The rule is pretty simple : a grid of cells contains a certain number of mines. The goal is to reveal every cell that do not contain a mine.
We can summarize the steps in the game like this:
- The grid gets generated depending on the level. Harder means more rows and columns, and more mines.
- The user clic on a first cell. This first cell and the surrounding ones can't contain a mine. So we have do either generate the mines right during the clic, or get rid of all the mines in this area (I choosed the later).
- If the cell that is revealed has no mine around, then we need to reveal all the surrounding cells. Repeat this for every new cell revealed. This is where the recursion occurs.
- If the cell has one or more mine around, simply display the number of mines around.
- Then the user just clic on every cell he thinks has no mine in it. The first clic allows you to "flag" the cell (if you think theres a mine in it), the 2nd clic reveals the cell.
So ! The challenge it the recursion. If a cell has no surrounding mines, then reveal the next cells. And repeat this again. And again.
As @mr-dang proposed on Twitter, we could prepare a list of every cell to reveal for each cell in the collection. I did not try that, and I'm not sure how to do it (seems like recusion anyway).
So I came up with the workaround of having toggles in each cell. The default value of the toggle is "ThisItem.Status=2", knowing that the field [Status] = 2 means the cell is revealed.
So what's going on is :
- the user clicks on a cell. We use Patch to change the Status value of ThisItem (one click=1, 2 clicks=2)
- the toggle of the cell is triggered thanks to the default value
- if the number of mines arround is >0, nothing happens
- if the number of mines arround is =0, then we UpdateIt the collection to change the Status value of every surrounding cell
- it triggers the toggles for each of this cells, propagating the logic.
Performance is not very good however, I struggle to find ideas to improve it. Any tips or crazy algorithm in mind ?
Have fun !
Paul.