| Dear All, 
 I was wondering if you could help me?
 
 Im trying to do a columns game. I found some code from a Dark Basic program, and tried to convert it. But im not having much luck. www.darkforge.co.uk and click on files - i've included the code below.
 
 If you could help me by sending me some code to do a columns game (or help me convert it - im not interested in the intro or other stuff - just the main game code - as i'll eventually do my own jewels gfx.) I'd really appreciate it.
 
 
 
set display mode 320,240,16
hide mouse
sync rate 0
sync on
`   0 = keyboard, 1 = joystick, 2 = both
`   0 = off, 1 = on
`   1 = one player, 2 = 2 players!
`   Global arrays so we can access from within functions mainly For 2 player expansion
Dim control(1)
Dim music(1)
Dim players(1)
music(0)=0
control(0)=2
players(0)=1
`   music maestro? (can use mp3 Or Mid)
   If file exist("columns.mp3")
      music(0)=1
      load music "columns.mp3",1
   EndIf
   If file exist("columns.mid")
      music(0)=1
      load music "columns.mid",1
   EndIf
`   Create our scroll-Text fonts, prep it all, etc...
load image "font.bmp",500
paste image 500,0,0
i=165
For y=0 To 32 Step 16
   For x=0 To 295 Step 15
      get image i,x,y,x+16,y+16
      inc i
   Next x
Next y
Dim scrolltext$(20)
Dim scrollnext$(20)
Dim scrolltemp$(20)
Dim scroller_offset#(1)
Dim scroller_count(1)
Dim scroller_speed#(1)
scroller_offset#(0)=0
scroller_count(0)=0
scroller_speed#(0)=2
getscrolltext(0)
Cls 0
load bitmap "bmpack22.bmp",7
`   title1, title2, 1player, jewels, 2player, highscore, gameover
get image 1,640,0,960,240
get image 2,0,240,320,480
get image 3,0,0,320,220
get image 4,637,240,959,256
get image 5,320,0,640,220
get image 6,320,240,640,460
get image 7,640,256,728,270
`   Swap screen
sw=screen width() : sh=screen height()
create bitmap 2,sw,sh
Delete bitmap 7
`   Cut out the jewels
`   Image 10 = blank, 11,12,13,14,15,16 = jewels
`   17 = explode, 18,19,20,21 = explosion
paste image 4,0,0
i=10
For x=0 To 192 Step 16
   get image i,x,0,x+16,16
   inc i
Next a
Cls 0
`   PREP the intro sequence
t=60
Dim velocity#(t)
Dim acceleration#(t)
Dim jump(t)
Dim x#(t)
Dim speed#(t)
Dim y#(t)
Dim d(t)
Dim jewel(t)
makefire(t,320,240,120)
For a=0 To t
   sprite 1000+a,-16,-16,10
   set sprite 1000+a,0,1
Next a
`   Distort Title Picture on & start intro sequence
If music(0)=1 Then loop music 1
startgame:
i=1+Rnd(1)
sinewaveon(i)
show all sprites
intro(i,t)
set current bitmap 2
Cls 0
set current bitmap 1
Cls 0
set current bitmap 0
Cls 0
set current bitmap 2
hide all sprites
sync
`   game grid is 6x13 with 16x16 sprites
If players(0)=1
   Dim grid1(5,12)
   Dim colour1(5,12)
   Dim explode1(5,12)
   Dim jewels1(0)
   Dim score1(0)
   Dim t1(12)
   x1=144 : y1#=8 : s1#=0.50 : gx1=(x1-112)/16 : gy1=(y1#+24)/16
   jewels1(0)=3 : friendly1=0 : difficulty1=5
`   get 3 random jewels To make our droplet
   i11=Rnd(difficulty1)+11
   i21=Rnd(difficulty1)+11
   i31=Rnd(difficulty1)+11
`   get the Next 3 (preview pane) too
   n11=Rnd(difficulty1)+11
   n21=Rnd(difficulty1)+11
   n31=Rnd(difficulty1)+11
   sprite 1,x1,y1#,i11
   sprite 2,x1,y1#+16,i21
   sprite 3,x1,y1#+32,i31
   show sprite 1
   show sprite 2
   show sprite 3
EndIf
If players(0)=2
   Dim grid2(5,12)
   Dim colour2(5,12)
   Dim explode2(5,12)
   Dim jewels2(0)
   Dim score2(0)
   Dim t2(12)
   x1=32 : y1#=8 : s1#=0.50 : gx1=(x1-16)/16 : gy1=(y1#+24)/16
   jewels1(0)=3 : friendly1=0 : difficulty1=2
   x2=144 : y2#=8 : s2#=0.50 : gx2=(x2-112)/16 : gy2=(y#+24)/16
   jewels2(0)=3 : friendly2=0 : difficulty2=2
`   get 3 random jewels To make our droplet
   i11=Rnd(difficulty1)+11
   i21=Rnd(difficulty1)+11
   i31=Rnd(difficulty1)+11
   i12=Rnd(difficulty2)+11
   i22=Rnd(difficulty2)+11
   i32=Rnd(difficulty2)+11
`   get the Next 3 (preview pane) too
   n11=Rnd(difficulty1)+11
   n21=Rnd(difficulty1)+11
   n31=Rnd(difficulty1)+11
   n12=Rnd(difficulty2)+11
   n22=Rnd(difficulty2)+11
   n32=Rnd(difficulty2)+11
   sprite 1,x1,y1#,i11
   sprite 2,x1,y1#+16,i21
   sprite 3,x1,y1#+32,i31
   sprite 4,x2,y2#,i12
   sprite 5,x2,y2#+16,i22
   sprite 6,x2,y2#+32,i32
   show sprite 1
   show sprite 2
   show sprite 3
   show sprite 4
   show sprite 5
   show sprite 6
EndIf
keytimer=0 : level=1
For a=0 To 5
   For b=0 To 12
      colour1(a,b)=10
      If players(0)=2 Then colour2(a,b)=10
   Next b
Next a
`   set the scene
ink rgb(175,175,0),0
set Text font "Arial"
set Text size 12
set Text opaque
slideallow1=0
If players(0)=1
   paste image 3,0,0
   For a=0 To 5
      For b=0 To 12
         paste image 10,112+(a*16),8+(b*16)
      Next b
   Next a
   paste image n11,88,8
   paste image n21,88,24
   paste image n31,88,40
Else
   paste image 5,0,0
   For a=0 To 5
      For b=0 To 12
         paste image 10,16+(a*16),8+(b*16)
      Next b
   Next a
   paste image n11,88,8
   paste image n21,88,24
   paste image n31,88,40
EndIf
copy bitmap 2,0
sync
`   --------------------------------------------------------------------------
`   da main event...
`   --------------------------------------------------------------------------
do
`   debug info
`   Text 0,222,"X: "+Str$(gx)+" Y: "+Str$(gy)+" Friendly: "+Str$(friendly)+"  "
`   temporary score display, etc.
   If players(0)=1
      Text 44,132,Str$(score1(0))
      Text 89,173,Str$(level)
      Text 89,205,Str$(jewels1(0))
   EndIf
   sprite 1,x1,y1#,i11
   sprite 2,x1,y1#+16,i21
   sprite 3,x1,y1#+32,i31
   ox1=x1 : oy1=y1#
   If players(0)=2
      sprite 4,x2,y2#,i12
      sprite 5,x2,y2#+16,i22
      sprite 6,x2,y2#+32,i32
      ox2=x2 : oy2=y2#
   EndIf
`  check For control direction
   If upkey() Or joystick up() Then direction=1
   If rightkey() Or joystick Right() Then direction=2
   If downkey() Or joystick down() Then direction=3
   If leftkey() Or joystick Left() Then direction=4
   inc keytimer
   If keytimer>=7
      If direction=2 And gx1<5 And slideallow1=0
         If grid1(gx1+1,gy1+1)=0
            inc x1,16
         EndIf
         keytimer=0
      EndIf
      If direction=4 And gx1>0 And slideallow1=0
         If grid1(gx1-1,gy1+1)=0
            dec x1,16
         EndIf
         keytimer=0
      EndIf
      If direction=3 And gy1<13 And slideallow1=0
         speed1=1
      Else
         speed1=0
      EndIf
`      rotate the pieces
      If direction=1
         itemp1=i11
         i11=i21
         i21=i31
         i31=itemp1
         keytimer=0
      EndIf
   EndIf
`   down we go
   If slideallow1=0
      If speed1=0
         inc y1#,s1#
      Else
         inc y1#,s1#*4
         speed1=0
      EndIf
   EndIf
   If players(0)=1
      gx1=(x1-112)/16 : gy1=(y1#+24)/16
   Else
      gx1=(x1-16)/16 : gy1=(y1#+24)/16
   EndIf
`   we're at the top so check To see If it's full below us
   If gy1=2
      If grid1(gx1,gy1+1)=1
         Goto gameover
      EndIf
   EndIf
`   no? good, lets test For another colour/base of the game grid
   If gy1<12
      If grid1(gx1,gy1+1)=1 Then hit1=1
   EndIf
   If gy1=12 Then hit1=1
   If hit1=1
      paste image i11,x1,(gy1*16)-24
      paste image i21,x1,(gy1*16)-8
      paste image i31,x1,(gy1*16)+8
      grid1(gx1,gy1-2)=1
      grid1(gx1,gy1-1)=1
      grid1(gx1,gy1)=1
      colour1(gx1,gy1-2)=i11
      colour1(gx1,gy1-1)=i21
      colour1(gx1,gy1)=i31
`   here is where we start checking the explode loop
      For a=1 To 3
         hide sprite a
      Next a
      Repeat
         e=explode(gx1,gy1)
         If e=1
            d=dropem()
         Else
            d=0
         EndIf
      Until d=0
      For a=1 To 3
         show sprite a
      Next a
`   get the Next set And reset our stuff
      If players(0)=2
         x1=16
         y1#=8
         x2=144
         y2#=8
      Else
         x1=144
         y1#=8
      EndIf
      i11=n11
      i21=n21
      i31=n31
      inc friendly1
      If friendly1=3
         n11=Rnd(difficulty1)+11
         n21=Rnd(difficulty1)+11
         n31=n21
         friendly1=0
      Else
         n11=Rnd(difficulty1)+11
         n21=Rnd(difficulty1)+11
         n31=Rnd(difficulty1)+11
      EndIf
      paste image n11,88,8
      paste image n21,88,24
      paste image n31,88,40
      If players(0)=1
         gx1=(x1-112)/16
         gy1=(y1#+24)/16
      Else
         gx1=(x1-16)/16
         gy1=(y1#+24)/16
         gx2=(x2-112)/16
         gy2=(y2#+24)/16
      EndIf
      j1=jewels1(0)
      inc j1,3
      jewels1(0)=j1
      hit1=0
      sco1=score1(0)
      inc sco1,25
      score1(0)=sco1
`   Gosub progress
   EndIf
`   textgrid()
   direction=0
   scroller_go()
   copy bitmap 2,0
   sync
loop
`   Scroll Text Routine
Function scroller_go()
   scroller_x#=0
   For scroll=0 To 20
      im=Asc(scrolltext$(scroll))
      inc im,100
      If im=132 Then im=191
      If im=146 Then im=192
      If im=144 Then im=193
      If im=158 Then im=194
      If im=145 Then im=195
      If im=143 Then im=196
      If im=133 Then im=197
      If im=148 Then im=205
      If im=149 Then im=206
      If im=150 Then im=207
      If im=151 Then im=208
      If im=152 Then im=209
      If im=153 Then im=210
      If im=154 Then im=211
      If im=155 Then im=212
      If im=156 Then im=213
      If im=157 Then im=214
      paste image im,scroller_offset#(0)+scroller_x#,224
      inc scroller_x#,16
   Next scroll
   sotemp#=scroller_offset#(0)
   dec sotemp#,scroller_speed#(0)
   scroller_offset#(0)=sotemp#
`   dec scroller_offset#,scroller_speed#(0)
   If sotemp#=<-16
      scroller_offset#(0)=0
      getnextcharacter(scroller_count(0))
      sctemp=scroller_count(0)
      inc sctemp
      scroller_count(0)=sctemp
`      inc scroller_count
      If sctemp=21
         getscrolltext(1)
         scroller_count(0)=0
      EndIf
   EndIf
endfunction
Function explode(x,y)
`   scan array vertically looking For matching jewels And mark them all
   e=0
   For a=0 To 5
      For b=12 To 2 Step -1
         tj1=colour1(a,b)
         tj2=colour1(a,b-1)
         tj3=colour1(a,b-2)
`         we got a match sir!
         If tj1>10
            If tj1=tj2 And tj2=tj3
               grid1(a,b)=99
               grid1(a,b-1)=99
               grid1(a,b-2)=99
               e=1
               s=score1(0)
               inc s,50
               score1(0)=s
            EndIf
         EndIf
      Next b
   Next a
`   scan horizontally too
   For a=0 To 3
      For b=12 To 1 Step-1
         tj1=colour1(a,b)
         tj2=colour1(a+1,b)
         tj3=colour1(a+2,b)
         If tj1>10
            If tj1=tj2 And tj2=tj3
               grid1(a,b)=99
               grid1(a+1,b)=99
               grid1(a+2,b)=99
               e=1
               s=score1(0)
               inc s,50
               score1(0)=s
            EndIf
         EndIf
      Next b
   Next a
`   scan diagnols, bottom Left up To top Right
   For a=0 To 3
      For b=12 To 3 Step-1
         tj1=colour1(a,b)
         tj2=colour1(a+1,b-1)
         tj3=colour1(a+2,b-2)
         If tj1>10
            If tj1=tj2 And tj2=tj3
               grid1(a,b)=99
               grid1(a+1,b-1)=99
               grid1(a+2,b-2)=99
               e=1
               s=score1(0)
               inc s,100
               score1(0)=s
            EndIf
         EndIf
      Next b
   Next a
`   scan diagnols, bottom Right up To top Left
   For a=5 To 2 Step -1
      For b=12 To 3 Step-1
         tj1=colour1(a,b)
         tj2=colour1(a-1,b-1)
         tj3=colour1(a-2,b-2)
         If tj1>10
            If tj1=tj2 And tj2=tj3
               grid1(a,b)=99
               grid1(a-1,b-1)=99
               grid1(a-2,b-2)=99
               e=1
               s=score1(0)
               inc s,100
               score1(0)=s
            EndIf
         EndIf
      Next b
   Next a
endfunction e
Function dropem()
   d=0
`   2 stage process, First remove all 99 (exploded) jewels
   For a=0 To 5
      For b=0 To 12
         If grid1(a,b)=99
            colour1(a,b)=10
            grid1(a,b)=0
            If players(0)=1
               jx=(a*16)+112
               jy=(b*16)+8
            Else
               jx=(a*16)+16
               jy=(b*16)+8
               jx2=(a*16)+112
               jy2=(b*16)+8
            EndIf
`   shatter jewels loop
            ei=18
            Repeat
               paste image ei,jx,jy
               scroller_go()
               copy bitmap 2,0
               sync
               inc ei
            Until ei=22
            paste image 10,jx,jy
`            j=jewels1(0)
`            dec j
`            jewels1(0)=j
            d=1
         EndIf
      Next b
   Next a
`   now move remainder down
`   check To see If this row is blank
   For a=0 To 5
      rowcount=0
      For b=0 To 12
         rowcount=rowcount+colour1(a,b)
      Next b
      If rowcount>130
         count=0
         For b=0 To 12
            tc=colour1(a,b)
            If tc>10
               If players(0)=1
                  jx=(a*16)+112
                  jy=(b*16)+8
               Else
                  jx=(a*16)+16
                  jy=(b*16)+8
                  jx2=(a*16)+112
                  jy2=(b*16)+8
               EndIf
               t1(count)=tc
               paste image 10,jx,jy
               colour1(a,b)=10
               grid1(a,b)=0
               inc count
            EndIf
         Next b
         dec count
         rkd=count
         For b=12 To 0 Step -1
            If players(0)=1
               jx=(a*16)+112
               jy=(b*16)+8
            Else
               jx=(a*16)+16
               jy=(b*16)+8
               jx2=(a*16)+112
               jy2=(b*16)+8
            EndIf
            dal=12-b
            If t1(dal)>0
               paste image t1(rkd),jx,jy
               colour1(a,b)=t1(rkd)
               grid1(a,b)=1
               dec rkd
            EndIf
         Next b
         For b=0 To 12
            t1(b)=0
         Next b
         scroller_go()
         copy bitmap 2,0
         sync
      EndIf
   Next a
endfunction d
Function textgrid()
   x=340 : y=0
   For a=0 To 12
      For b=0 To 5
         Text x,y,Str$(colour1(b,a))+"  "
         Text x+140,y,Str$(grid1(b,a))
         inc x,20
      Next b
      inc y,20
      x=340
   Next a
endfunction
Function sinewaveon(im)
   set current bitmap 2
   paste image im,0,0
   For i=1 To 240
      get image 499+i,0,i-1,320,i
   Next i
   Cls 0
   Step#=8.0 : sx=0 : speed=6 : o#=25
   t=timer()
   Repeat
      Cls 0
      si=500
      For i=1 To 240
         paste image si,Sin(sx+i*Step#)*o#,i-1
         inc si
      Next i
      inc sx,speed
      copy bitmap 2,0
      If timer()=>t+25
         dec Step#,0.05
         dec o#,0.25
         t=timer()
      EndIf
      skip=0
      If scancode()<>0 Then skip=1
      If joystick fire a()=1 Then skip=1
      sync
   Until Step#<=3 Or skip=1
   paste image im,0,0
   copy bitmap 2,0
   sync
   Repeat
   Until scancode()=0
endfunction
`   Scroll Text routine To kick things off
Function getscrolltext(c)
   If c=0
      Read Line$
      If Line$="*"
         Restore
         Read Line$
      EndIf
      Read line2$
      If line2$="*"
         Restore
         Read line2$
      EndIf
      For a=0 To 20
         scrolltext$(a)=Mid$(Line$,1+a)
         scrollnext$(a)=Mid$(line2$,1+a)
      Next a
   Else
      Read Line$
      If Line$="*"
         Restore
         Read Line$
      EndIf
      For a=0 To 20
         scrollnext$(a)=Mid$(Line$,1+a)
      Next a
   EndIf
endfunction
`   Scroll Text routine To get the Next character And shuffle stuff
Function getnextcharacter(c)
   For a=0 To 20
      scrolltemp$(a)=scrolltext$(a)
   Next a
   For a=0 To 19
      scrolltext$(a)=scrolltemp$(1+a)
   Next a
   scrolltext$(20)=scrollnext$(c)
endfunction
`   Intro Sequence
Function intro(b,t)
   start=timer()
   set current bitmap 0
   w=320
   h=240
   xh=120
   For a=1 To 6
      If sprite exist(a) Then hide sprite a
   Next a
   do
      paste image b,0,0
      For a=0 To t
         If jump(a)=0
            velocity#(a)=9.0+Rnd(10)
            jump(a)=1
         EndIf
         If jump(a)=1
            If velocity#(a)!-10
               velocity#(a)=velocity#(a)-acceleration#(a)
            EndIf
            y#(a)=y#(a)-velocity#(a)
         EndIf
         temp_x#=x#(a)
         temp_s#=speed#(a)
         If y#(a)>h
            y#(a)=h
         Else
            If d(a)=1
               inc temp_x#,temp_s#
            Else
               dec temp_x#,temp_s#
            EndIf
            x#(a)=temp_x#
         EndIf
         sprite 1001+a,x#(a),y#(a),jewel(a)
      Next a
      If timer()=>start+2500+Rnd(1000)
         makefire(t,320,240,120)
         start=timer()
      EndIf
      If joystick fire a()=1 Or scancode()>0 Then exitfunction
      sync
   loop
endfunction
Function makefire(t,w,h,xh)
   For a=0 To t
      velocity#(a)=0
      acceleration#(a)=0.5
      jump(a)=0
      x#(a)=xh+10+Rnd(xh/2)
      speed#(a)=Rnd(4)
      y#(a)=150+Rnd(40)
      d(a)=Rnd(1)
      jewel(a)=11+Rnd(6)
   Next a
endfunction
`   Game Over Routine And HighScore Table Display
gameover:
   paste image 7,116,120
   hide all sprites
   copy bitmap 2,0
   sync
   Repeat
      scroller_go()
      copy bitmap 2,0
      sync
   Until joystick fire a()=1 Or scancode()>0
`   do the mass explode thing
   ei=18
   Repeat
      For a=12 To 0 Step -1
         For b=0 To 5
            jx=(b*16)+112
            jy=(a*16)+8
            paste image ei,jx,jy
         Next b
         scroller_go()
         copy bitmap 2,0
         sync
      Next a
      inc ei
   Until ei=22
   scroller_go()
   copy bitmap 2,0
   sync
   For a=0 To 5
      For b=0 To 12
         paste image 10,112+(a*16),8+(b*16)
      Next b
   Next a
   scroller_go()
   copy bitmap 2,0
   sync
   Repeat
      scroller_go()
      copy bitmap 2,0
      sync
   Until joystick fire a()=1 Or scancode()>0
  Cls 0
  Goto startgame
`   **************************************************** PROGRESS!
`  This part isn't used yet, but could be
progress:
      If sco1>=2500 And difficulty1=2
         inc difficulty1
      EndIf
      If sco1=>5000 And difficulty1=3
         inc difficulty1
      EndIf
      If sco1=>10000 And difficulty1=4
         inc difficulty1
      EndIf
      If sco1=>10000 And s1#=0.5
         inc s1#,0.25
      EndIf
      If sco1=>50000 And s1#=0.75
         inc s1#,0.25
      EndIf
Return
 
 |