sync on
 
width=200
height=200
dim area(width,height)
 
for x=20 to 180
   area(x,20)=1
   area(x,180)=1
next x
 
for y=20 to 180
   area(20,y)=1
   area(180,y)=1
next y
 
for i=1 to 200
   area(rnd(width-1)+1,rnd(height-1)+1)=1
next i
 
a=timer()
floodfill(width,height,100,100,2)
b=timer()-a
set cursor 0,200
print "Time Taken: "b
 
for x=1 to width
   for y=1 to height
      ink area(x,y)*127,0
      dot x,y
   next y
next x
sync
 
end
 
function floodfill(width,height,x,y,newtype)
 
   currtype=area(x,y)
 
   dim fillx(width*height)
   dim filly(width*height)
   dim fill(width,height)
 
   fills=1
   fillx(1)=x
   filly(1)=y
   fill(x,y)=1
   endfill=0
 
   while endfill=0
 
      endfill=1
 
      fill2=fills
      for i=1 to fills
 
         fillx=fillx(i)
         filly=filly(i)
 
         if fillx<width
            if fill(fillx+1,filly)=0 : rem Right
               if area(fillx+1,filly)=currtype
                  fill2=fill2+1
                  fillx(fill2)=fillx+1
                  filly(fill2)=filly
                  fill(fillx+1,filly)=1
                  endfill=0
               endif
            endif
         endif
 
         if fillx>1
            if fill(fillx-1,filly)=0 : rem Left
               if area(fillx-1,filly)=currtype
                  fill2=fill2+1
                  fillx(fill2)=fillx-1
                  filly(fill2)=filly
                  fill(fillx-1,filly)=1
                  endfill=0
               endif
            endif
         endif
 
         if filly>1
            if fill(fillx,filly-1)=0 : rem Up
               if area(fillx,filly-1)=currtype
                  fill2=fill2+1
                  fillx(fill2)=fillx
                  filly(fill2)=filly-1
                  fill(fillx,filly-1)=1
                  endfill=0
               endif
            endif
         endif
 
         if filly<height
            if fill(fillx,filly+1)=0 : rem Down
               if area(fillx,filly+1)=currtype
                  fill2=fill2+1
                  fillx(fill2)=fillx
                  filly(fill2)=filly+1
                  fill(fillx,filly+1)=1
                  endfill=0
               endif
            endif
         endif
 
      next i
 
      fills=fill2
 
      if fills>=width*height then endfill=1
 
   endwhile
 
   for i=1 to fills
      fillx=fillx(i)
      filly=filly(i)
      area(fillx,filly)=newtype
   next i
 
   undim fillx(width*height)
   undim filly(width*height)
   undim fill(width,height)
 
endfunction