Here's my entry.
I named it crazy mouse, because it is pretty crazy!
See what happens when you try to move the the mouse horizontally, or vertically, or even diagonally!
sync on : hide mouse
type __FloodFillType
Initialised as integer
CoverColour as integer
BitmapWidth as integer
BitmapHeight as integer
endtype
global __FloodFillGlobal as __FloodFillType
#constant __SpanListSize 15
type __FillSpan
Left as integer
Right as integer
endtype
set image colorkey 255,255,0
img = make_arrow()
crc = make_circle()
set current bitmap 0
color backdrop 0
type xy
x as float
y as float
endtype
dim msps(20) as xy
for d = 0 to 20
sprite d+2,0,0,img
set sprite alpha d+2,250-(d*12)
next d
ink rgb(255,255,255),0
bx1# = rnd(screen width())
by1# = rnd(screen height())
bx2# = rnd(screen width())
by2# = rnd(screen height())
bx3# = rnd(screen width())
by3# = rnd(screen height())
do
rem circles
`1
xd1# = msx#-bx1#
yd1# = msy#-by1#
ang1# = atanfull(xd1#,yd1#)
dst1# = sqrt((xd1#^2)+(yd1#^2))*0.005
inc bxm1#,sin(ang1#)*dst1#
inc bym1#,cos(ang1#)*dst1#
`2
xd2# = msx#-bx2#
yd2# = msy#-by2#
ang2# = atanfull(xd2#,yd2#)
dst2# = sqrt((xd2#^2)+(yd2#^2))*0.005
inc bxm2#,sin(ang2#)*dst2#
inc bym2#,cos(ang2#)*dst2#
`3
xd3# = msx#-bx3#
yd3# = msy#-by3#
ang3# = atanfull(xd3#,yd3#)
dst3# = sqrt((xd3#^2)+(yd3#^2))*0.005
inc bxm3#,sin(ang3#)*dst3#
inc bym3#,cos(ang3#)*dst3#
xd12# = bx1#-bx2#
yd12# = by1#-by2#
dst12# = sqrt((xd12#^2)+(yd12#^2))
if dst12# < 20
bxm1# = (0-bxm1#)+(rnd(4)-2)
bym1# = (0-bym1#)+(rnd(4)-2)
bxm2# = (0-bxm2#)+(rnd(4)-2)
bym2# = (0-bym2#)+(rnd(4)-2)
endif
xd13# = bx1#-bx3#
yd13# = by1#-by3#
dst13# = sqrt((xd13#^2)+(yd13#^2))
if dst13# < 20
bxm1# = (0-bxm1#)+(rnd(4)-2)
bym1# = (0-bym1#)+(rnd(4)-2)
bxm3# = (0-bxm3#)+(rnd(4)-2)
bym3# = (0-bym3#)+(rnd(4)-2)
endif
xd23# = bx2#-bx3#
yd23# = by2#-by3#
dst23# = sqrt((xd23#^2)+(yd23#^2))
if dst23# < 20
bxm2# = (0-bxm2#)+(rnd(4)-2)
bym2# = (0-bym2#)+(rnd(4)-2)
bxm3# = (0-bxm3#)+(rnd(4)-2)
bym3# = (0-bym3#)+(rnd(4)-2)
endif
bxm1# = bxm1#*0.99
bym1# = bym1#*0.99
bxm2# = bxm2#*0.99
bym2# = bym2#*0.99
bxm3# = bxm3#*0.99
bym3# = bym3#*0.99
inc bx1#,bxm1#
inc by1#,bym1#
inc bx2#,bxm2#
inc by2#,bym2#
inc bx3#,bxm3#
inc by3#,bym3#
if bx1# < 15 then bxm1# = abs(bxm1#) : bx1# = 15
if by1# < 15 then bym1# = abs(bym1#) : by1# = 15
if bx1# > screen width()-15 then bxm1# = 0-abs(bxm1#) : bx1# = screen width()-15
if by1# > screen height()-15 then bym1# = 0-abs(bym1#) : by1# = screen height()-15
if bx2# < 15 then bxm2# = abs(bxm2#) : bx2# = 15
if by2# < 15 then bym2# = abs(bym2#) : by2# = 15
if bx2# > screen width()-15 then bxm2# = 0-abs(bxm2#) : bx2# = screen width()-15
if by2# > screen height()-15 then bym2# = 0-abs(bym2#) : by2# = screen height()-15
if bx3# < 15 then bxm3# = abs(bxm3#) : bx3# = 15
if by3# < 15 then bym3# = abs(bym3#) : by3# = 15
if bx3# > screen width()-15 then bxm3# = 0-abs(bxm3#) : bx3# = screen width()-15
if by3# > screen height()-15 then bym3# = 0-abs(bym3#) : by3# = screen height()-15
line msx#,msy#,bx1#,by1#
line msx#,msy#,bx2#,by2#
line msx#,msy#,bx3#,by3#
sprite 23,bx1#-15,by1#-15,crc
sprite 24,bx2#-15,by2#-15,crc
sprite 25,bx3#-15,by3#-15,crc
rem curvy mouse movement
mmx# = mousemovex()
mmy# = mousemovey()
circx# = wrapvalue(circx#+(mmx#*2))
circy# = wrapvalue(circy#+(mmy#*2))
ocmx2# = cmx2#
ocmy2# = cmy2#
cmy2# = cos(circx#)*50
cmx2# = sin(circy#)*50
xmo# = (ocmx2#-cmx2#)+mmx#
ymo# = (ocmy2#-cmy2#)+mmy#
array insert at top msps(0)
array delete element msps(0),21
msps(0).x = msx#
msps(0).y = msy#
inc msx#,xmo#
inc msy#,ymo#
while msx# > screen width() : dec msx#,screen width() : endwhile
while msx# < 0 : inc msx#,screen width() : endwhile
while msy# > screen height() : dec msy#,screen height() : endwhile
while msy# < 0 : inc msy#,screen height() : endwhile
sprite 1,msx#,msy#,img
for d = 0 to 20
sprite d+2,msps(d).x,msps(d).y,img
next d
sync
loop
function make_arrow()
create bitmap 1,20,20
ink rgb(255,255,0),0
box 0,0,20,20
ink rgb(0,0,255),0
line 0,0,0,10
line 0,0,10,0
line 0,10,3,7
line 10,0,7,3
line 3,7,15,19
line 7,3,19,15
line 15,19,19,15
FloodFill(1,1,rgb(255,0,0))
img = 1
get image img,0,0,19,19
delete bitmap 1
endfunction img
function make_circle()
create bitmap 1,30,30
ink rgb(255,255,0),0
box 0,0,30,30
for c# = 15 to 0 step -0.5
ink rgb(0,0,255-(c#*17)),0
circle 15,15,c#
next c#
crc = 2
get image crc,0,0,29,29
delete bitmap 1
endfunction crc
` This code was downloaded from The Game Creators
` It is reproduced here with full permission
` http://www.thegamecreators.com
global dim __FilledSpans() as __FillSpan
global dim __FilledSpansCount() as integer
function FloodFill(x,y,c)
__FloodFillGlobal.BitmapWidth=bitmap width()-1
__FloodFillGlobal.BitmapHeight=bitmap height()-1
__InitialiseFillSpan()
if x >= 0 and x <= __FloodFillGlobal.BitmapWidth
if y >= 0 and y <= __FloodFillGlobal.BitmapHeight
lock pixels
__FloodFillGlobal.CoverColour = point(x,y)
if __FloodFillGlobal.CoverColour <> c
ink c,0
__FloodLoop(x,y)
endif
unlock pixels
endif
endif
endfunction
function __FloodLoop(x as integer,y as integer)
local Left as integer
local Right as integer
local SpanSize as integer
for Left=x-1 to 0 step -1
if point(Left,y) <> __FloodFillGlobal.CoverColour then exit
next Left
inc Left
for Right=x+1 to __FloodFillGlobal.BitmapWidth
if point(Right,y) <> __FloodFillGlobal.CoverColour then exit
next Right
` draw this line
box Left,y,Right,y+1
` and remember it
__AddFillSpan(y,Left-1,Right+1)
` Fill upwards
if y > 0
dec y
x=Left
while x < Right
SpanSize=__CheckFillSpan(x,y)
if SpanSize = 0
if point(x,y) = __FloodFillGlobal.CoverColour
__FloodLoop(x,y)
endif
inc x
else
inc x,SpanSize
endif
endwhile
inc y
endif
` Fill downwards
if y < __FloodFillGlobal.BitmapHeight
inc y
x=Left
while x < Right
SpanSize=__CheckFillSpan(x,y)
if SpanSize = 0
if point(x,y) = __FloodFillGlobal.CoverColour
__FloodLoop(x,y)
endif
inc x
else
inc x,SpanSize
endif
endwhile
endif
endfunction
function __InitialiseFillSpan()
local i as integer
if __FloodFillGlobal.Initialised = 0
` First time called, create the arrays - bigger than we should ever need
undim __FilledSpans()
global dim __FilledSpans(__SpanListSize,2048) as __FillSpan
undim __FilledSpansCount()
global dim __FilledSpansCount(2048) as integer
__FloodFillGlobal.Initialised=1
else
` Subsequent call, just reset the spans we'll be using
for i=__FloodFillGlobal.BitmapHeight to 0 step -1
__FilledSpansCount(i)=0
next i
endif
endfunction
function __AddFillSpan(y as integer,Left as integer,Right as integer)
local i as integer
i=__FilledSpansCount(y)
if i < __SpanListSize
__FilledSpans(i, y).Left=Left
__FilledSpans(i, y).Right=Right
inc __FilledSpansCount(y)
endif
endfunction
function __CheckFillSpan(x as integer,y as integer)
local i as integer
for i=__FilledSpansCount(y)-1 to 0 step -1
if x >= __FilledSpans(i, y).Left
if x < __FilledSpans(i, y).Right then exitfunction __FilledSpans(i, y).Right-x
endif
next i
endfunction 0
function XtoY(x#,rad#)
newx# = x#/rad#
ang# = asin(newx#)
newy# = cos(ang#)
y# = newy#*rad#
endfunction y#
