Sprites are awesome but it's collision is confusing so I've only used arrays for collision. Here's an example.
REM Program Name: 2D Array Collision Example
REM Author: Ashingda27
REM Date: 5/01/2010
REM ========================================
`Setup
gosub Initialize
`Main Loop
do
`The Game Routine
gosub Game
`Screen Update
sync
loop
Game:
`Draw the Terrain
for lpy = 0 to MapY
for lpx = 0 to MapX
`Map Data 0 is Sky
`Map Data 1 is Brick
if Map(lpx,lpy) = 0 then ink rgb(200,230,255),0
if Map(lpx,lpy) = 1 then ink rgb(255,55,35),0
`Draw the Tile Colors
box lpx*32,lpy*32,lpx*32+32,lpy*32+32
next lpx
next lpy
`Draw the Char
ink rgb(50,155,80),0
circle CharX,CharY-16,16
dot CharX,CharY,rgb(255,255,255)
`Jumping
if upkey() and Ground = 0
Jump = 10
endif
if Jump
if Map(CharX/32,(CharY-Jump)/32) = 0 `CollisionCheck with Map CharY-Jump
dec CharY,Jump
else
Jump = 0
endif
if Jump > 0 then dec Jump
endif
`Moveing Left & Right
if leftkey()
if Map((CharX-1)/32,CharY/32) = 0 `CollisionCheck with Map CharX-1
dec CharX
endif
endif
if rightkey()
if Map((CharX+1)/32,CharY/32) = 0 `CollisionCheck with Map CharX+1
inc CharX
endif
endif
`Gravity
if Map(CharX/32,(CharY+1)/32) = 0 `CollisionCheck with Map CharY+1
inc CharY
Ground = 1
else
Ground = 0
endif
return
Initialize:
sync on
sync rate 30
`Terrain Data
data 1,1,1,1,1,1,1,1,1,1
data 1,0,0,0,0,0,0,0,0,1
data 1,1,1,0,0,0,0,0,0,1
data 1,0,0,0,0,0,0,0,0,1
data 1,1,1,1,0,0,0,0,1,1
data 0,0,0,1,1,1,1,1,0,0
`Terrain Size
MapX = 9
MapY = 5
`Terrain Array
dim Map(MapX,MapY)
`Reading Terrain Data
for lpy = 0 to MapY
for lpx = 0 to MapX
read Map(lpx,lpy)
next lpx
next lpy
`Character start posision
CharX = 32
CharY = 32
return
