Object of the game is to end up will as little of blocks as possible. Perfect would be all of them gone. Touch groups of color blocks to remove them. There must be at lease two blocks of the same color to remove them (side by side). The blocks will drop down filling in the holes, and move to the left.
It's only for iPad right now, but I'll add rbytes cool all device code when I have more time.
Enjoy. Hope it's not too addicting...
Code: Select all
'GridClear v1.0 (ipad only)
'Coded by Dav DEC/2016
'Based on a old qbasic game
'Try to clear the grid of all color blocks.
'Touch a group of colors to remove that group.
'Blocks will drop down to fill in the holes.
'Blocks move to the left when a column removed.
'Ending up with 5 blocks or less is great.
'Only for ipad right now, but I will probably
'add rbytes cool all-device code later on.
if lowstr$(device_type$())<>"ipad" then
  print "Sorry, only designed for iPad."
  end
end if
'=== set up screen
graphics
graphics clear 0,0,0
set orientation left
option base 1
set buttons custom
set buttons font size 56
draw color 0,0,0
sw=screen_width()
sh=screen_height()
rows = 11!columns = 7!size =75
dim btn(rows,columns)  'buttons display
'generate random board colors
for r= 1 to rows
   for c = 1 to columns
     btn(r,c)=rnd(6)
   next c
next r
gosub updateboard
do
  'get a button press
  do
    nm=0 'button count
    for r= 1 to rows
       for c = 1 to columns
         nm=nm+1
         if button_pressed(str$(nm)) then 
           old=btn(r,c) 'button color
           'only do when non black touched
           if old <>6 then
             'only do if a neighbor is same
             nn=0
             if r>1 then
                if btn(r-1,c)=old then nn=1
             end if
             if r<rows then
                if btn(r+1,c)=old then nn=1
             end if
             if c>1 then
                if btn(r,c-1)=old then nn=1
             end if
             if c<columns then
                if btn(r,c+1)=old then nn=1
             end if
             'if a group of colors...
             if nn= 1 then
                notes set "101:tc7b7a7"
                notes play
                x=(r*size) ! y=(c*size)
                goto selected
             end if
           end if
         end if
       next c
    next r
   slowdown
  until 0
  selected:
  'fill the group...
  FloodFill(old, 6, r, c)
  'show blacked out colors
  gosub updateboard
  
  moved=0 'moving sound flag
  'drop down blocks here...
  for r= 1 to rows
     for c = columns to 2 step -1
       if btn(r,c)=6 then
         c2=c
         do
           c2=c2-1
         until btn(r,c2)<>6 or c2 = 1
         if c2 >0 then
           if btn(r,c) <> btn(r,c2) then 
              moved =1
           end if
           btn(r,c) = btn(r,c2)
           btn(r,c2)=6
         end if
       end if
      next c
   next r
  'move blocks left here...
   for r = 1 to rows -1
     if btn(r,columns)=6 then
        r2=r
        do
          r2=r2+1
        until btn(r2,columns)<>6 or r2=rows
        for c = 1 to columns
           if btn(r,c)<>btn(r2,c) then
              moved =1
           end if
           btn(r,c)=btn(r2,c)
           btn(r2,c)=6
        next c
     end if
   next r
   if moved=1 then
      'play sfx for blocks dropping
       notes set "122:sc3b2a2"
       notes play
   end if
  'redraw buttons board
  gosub updateboard
  'see if any groups presently left
  dn=0
  for r=1 to rows
    for c=1 to columns
        if btn(r,c)<>6 then
          if r>1 then
             if btn(r-1,c)=btn(r,c) then dn=1
          end if
          if r<rows then
             if btn(r+1,c)=btn(r,c) then dn=1
          end if
          if c>1 then
             if btn(r,c-1)=btn(r,c) then dn=1
          end if
          if c<columns then
             if btn(r,c+1)=btn(r,c) then dn=1
          end if
        end if
     next c
   next r
   'count how many blocks left
   h=0
   for r=1 to rows
       for c=1 to columns
         if btn(r,c)<>6 then h=h+1
       next c
   next r
   fill color .2,.2,.2
   draw color 1,1,1
   h$=str$(h)&" blocks left"
   set buttons font size 26
   button "s" text h$ at 10,10
   set buttons font size 56
   fill color 0,0,0
   draw color 0,0,0
   'if no more groups, end...
   if dn=0 then 
     graphics clear
     end
   end if
until forever
end
'==========================================
' GOSUBS AND FUNCTIONS
'==========================================
'==========
updateboard:
'==========
nm=0
for r= 1 to rows
   for c = 1 to columns
     j= btn(r,c) ! nm=nm+1
     if j=0 then fill color 1,0,0
     if j=1 then fill color 0,1,0
     if j=2 then fill color 0,0,1
     if j=3 then fill color 1,1,0
     if j=4 then fill color 1,0,1
     if j=5 then fill color 1,.5,0
     if j=6 then fill color 0,0,0
     x=(r*size) ! y=(c*size)
     button str$(nm) text "" at x,y+15 size size,size
   next c
next r
return
def FloodFill(old, clr, x, y)
	If .btn(x,y) <> old Then
		Return
	Else
		.btn(x,y) = clr
	End if
	If x > 1 Then FloodFill(old, clr, x-1, y)
	If x < .rows Then FloodFill(old, clr, x + 1, y)
	If y > 1 Then FloodFill(old, clr, x, y-1)
	If y < .columns Then FloodFill(old, clr, x, y+1)
End def
