This is a classic 'slider' puzzle.
It demonstrates theuse of multiple classes, input from a keyboard OR a joystick,
adding content after the game loop, and some more complex game logic.

There are several ways the code for this game could be improved, but
working with a 2D list of custom Sprites is a nice approach for many games.

There are lines (poorly documented) where you can change the dimensions of the
tiling, and the image used (though it should be a square image).  Remaining pixels
of the image are discarded after the tiling.

Is any random permutation of tiles possible to slide into a solution?
I don't think so, but haven't researched it.  Perhaps you will get stuck :-)