GG. Beat all the levels. Ez video game. But seriously tho, I liked how all of the levels were difficult and rewarding and how they were complemented with some clean visuals. Each level introduces a new idea and builds off of previous levels all while presenting a unique, brain melting challenge.
Now for a rant about unresponsive controls:
When it comes to game design, this game is perfect, but the movement is poorly coded. Coding good movement is easy, but if you don't do it right, players will have to put up with it for the entire length of the game. For instance, if I press up and then immediately press right (which do all the time since I like to buffer inputs), the player will continue going up instead of going right. Why? Because in this specific scenario I didn't let go of the up key fast enough and up has priority over right. Also, sometimes I press up then right immediately after, but then I go up and stand still because I let go of both keys too early. I shouldn't have to worry about letting go of up before pressing right or making sure I hold down keys long enough for the game to notice I pressed them. Instead of making a simple system where down has priority over left, left has priority over up and so on, keep track of the last key that the player pressed (pressed not held) and move the player in that direction even if they let go of the key. Then every time the character moves, you reset it as if the player never pressed any keys and the cycle continues. You also need a bit of extra code to check if the player is holding the same direction for multiple moves. That way the controls will work exactly as you expect. Additionally, it's good practice to cancel out opposite directions (like holding left and right) instead of giving one direction priority. However, I would very much prefer you using a simpler yet more effective solution: canceling the walking animation. Basically, if you move to the tile to the right of you, then as you are moving press left, the player will teleport to the right tile and begin moving left. Also, if the player holds the up key down, make sure the up press is repeated every X turns. This is a simple yet effective solution used in a lot of games which allows the player to move as fast as they want without having to worry about buffering.