I also added an element in which each block had two different pictures, one on top and one of the side, so to add to the difficulty, the player would need to flip some of them to put the right picture on top.
The 10 blocks above need to land on the 10 marked tiles in the right order with the correct side facing up.
Once the player finishes the puzzle, an event happens, and the map transfers to look like this.
To set it up, I assigned each block an X and Y variable in the Control Variables event option.
In this example, Block 1 is set to be Event 69. The (2a) is simply my code for where the block needs to land and which side should be facing up.
After I set up the Variables, I set up Conditional Branches to show what X and Y coordinates and which switches need to be turned on or left off.
The switches are controlled when the player flips the block or leaves it in its current orientation.
Each block is set up as its own event, but the event that checks if the player has completed the puzzle runs on a separate parallel event.