At first I didn't like this, too may tiles all spinning randomly which made me think "is it even possible to get them all to line up?" So I persevered and yes I could get them all lined up. It was fairly easy in the end. All I did was scan across the top row until they lined up and then scanned down to get the rest to line up but there was a slightly annoying steady hand aspect to it.
The way you have it set up as long as the mouse position is at 360,360 - or multiples of - then all the tiles line up.
However, I think there's something here, it kinda reminds me of this game:
starlight. I had a played about and created a version where the position the mouse needs to be is randomised.
// show all errors
SetErrorMode(2)
#constant width=1024
#constant height=768
type _level
tiles as integer[10,10]
rotate# as float[10,10]
endtype
global level as _level[100] // 100 Levels
// set window properties
SetWindowTitle( "idea" )
SetWindowSize( width, height, 0 )
// set display properties
SetVirtualResolution( width, height )
SetOrientationAllowed( 1, 1, 1, 1 )
SetSyncRate( 30, 0 ) // 30fps instead of 60 to save battery
currentlevel=1
tilenumber=1
for a=0 to 10
for b=0 to 10
if a = 0 and b = 0
level[currentlevel].tiles[0,0]=createsprite(loadimage("\media\tiles.png"))
else
level[currentlevel].tiles[a,b]=CloneSprite(level[currentlevel].tiles[0,0])
level[currentlevel].rotate#[a,b]=(a*b) * tilenumber
endif
inc tilenumber
next
next
// the tile and mouse offsets randomise where the mouse needs to be
// in order for the tiles to line up
// tile offsets
offset_a = random(0,10)
offset_b = random(0,10)
// mouse offsets
offset_x = random(0,360)
offset_y = random(0,360)
do
// Display Board
for a=0 to 10
for b=0 to 10
SetSpritePosition(level[currentlevel].tiles[a,b], a*64,b*64)
SetSpriteAngle(level[currentlevel].tiles[a,b],level[currentlevel].rotate#[a,b])
// level[currentlevel].rotate#=level[currentlevel].rotate#+.01
level[currentlevel].rotate#[a,b]=(a-offset_a)*(getpointerx()-offset_x)+ (b-offset_b)*(getpointery()-offset_y)
next
next
Print("press space to replay")
if GetButtonPressed(1) = 1
offset_a = random(0,10)
offset_b = random(0,10)
offset_x = random(0,360)
offset_y = random(0,360)
endif
//Render2DFront()
Sync()
loop
I think rather then having tile that need to be line you had a single picture that is revealed - flowers, kittens, trees that sort of thing - then this might actually work. You could have a easier stage where there are fewer tiles.
One thing you'd need to do is the make sure the pointer always has to be on the image - you're original 360,360 was actually off the picture which didn't feel right.