Working off Dave's initial image I added in a little effect for when the player paddle is moving kind of fast.
sync on
set display mode 800,600,32
set image colorkey 255,0,255
Set Text Font "Impact"
Set Text Size 32
type bit
image as integer
xpos as integer
ypos as integer
Brick_Number as integer
endtype
type format
red as byte
blue as byte
green as byte
hits as byte
points as integer
special as integer
endtype
Type Players
x as float
y as float
speed as float
size as float
Endtype
type Shadow
xpos as float
ypos as float
endtype
dim shadows(-1) as shadow
dim brick_data(9) as format
dim brick(-1) as bit
dim grid(25,29)
dim special$(6)
Global Grid_x
Global Grid_y
Global Brick_Number
Global CURRENT_BRICK=2
Global GRID_ON
Global Level_Number=1
GLOBAL SHADOW_SPRITE=1000
load image "break-in_UI-1.png",1,1
load image "BreakIn_Paddle-top.png",1002,1
load image "brick_dlg1.png",100,1
Sprite 2,0,0,1002
sprite SHADOW_SPRITE,-200,-200,1002
Dim Player(0) as Players
Player(0).x=Screen Width()/2-Sprite Width(2)/2
Player(0).y=32
Player(0).speed=5.0
import_level("level"+str$(level_number))
do
Draw_screen()
if array count(brick())>=0 then draw_bricks()
if player(0).speed>=2.0 then shadow_player()
Control_Paddle()
sync
loop
Function Control_Paddle()
Player(0).x=Player(0).x+((-LeftKey()+RightKey())*Player(0).speed)
If Player(0).x>522 Then Player(0).x=522
If Player(0).x<15 Then Player(0).x=14
Sprite 2,Player(0).x,Player(0).y,1002
`Set Cursor 0,0
`Print Player(0).x
Endfunction
function shadow_player()
array insert at bottom shadows()
count=array count(shadows())
shadows(count).xpos=player(0).x
shadows(count).ypos=player(0).y
if array count(shadows())>9 then array delete element shadows(),0
for a = array count(shadows()) to 0 step -1
inc shade,10
set sprite alpha SHADOW_SPRITE,100-shade
paste sprite SHADOW_SPRITE,shadows(a).xpos,shadows(a).ypos
next a
endfunction
function Draw_Screen()
cls
paste image 1,0,0
text 600,20,"LEVEL: "+str$(level_number)
endfunction
function draw_bricks()
for a = 0 to array count(brick())
paste image brick(a).image,15+brick(a).xpos*19,184+brick(a).ypos*16,1
next a
endfunction
function disect(filename as string,across,down,imagestart)
load bitmap filename,1
x=bitmap width(1)/across
y=bitmap height(1)/down
for a = 0 to down-1
for b = 0 to across-1
get image imagestart+a*across+b,x*b,y*a,x*b+x,y*a+y
next b:next a
delete bitmap 1
endfunction
function import_level(file$)
file$=file$+".bil"
if file exist(file$)=0 then exitfunction
empty array brick()
brick_number=1
open to read 1,file$
for a = 0 to 9
read byte 1,x
brick_data(a).red=x
read byte 1,x
brick_data(a).blue=x
read byte 1,x
brick_data(a).green=x
read byte 1,x
brick_data(a).hits=x
read byte 1,x
brick_data(a).special=x
read long 1,x
brick_data(a).points=x
makebrick(brick_data(a).red, brick_data(a).blue, brick_data(a).green,38,16,a+2)
next a
read long 1,NOB
for a = 0 to NOB
array insert at bottom brick()
count=array count(brick())
read byte 1,x
brick(count).xpos=x
read byte 1,x
brick(count).ypos=x
read byte 1,x
brick(count).image=x
brick(count).brick_number=brick_number
grid(brick(count).ypos,brick(count).xpos)=brick_number
grid(brick(count).ypos,brick(count).xpos+1)=brick_number
inc brick_number
next a
close file 1
endfunction
function makebrick(R as integer, G as integer, B as integer, xsize as integer, ysize as integer, image_number as integer)
create bitmap 1,xsize+8,ysize+8
ink rgb(255,255,255),0
box 0,0,xsize+4,ysize+4
get image 999,1,1,xsize,2,1
sprite 999,0,0,999
hide sprite 999
box 1,1,xsize,ysize,rgb(R,G,B),rgb(R/3,G/3,B/3),rgb(R,G,B),rgb(R/3,G/3,B/3)
set sprite alpha 999,222
paste sprite 999,1,1
set sprite alpha 999,182
paste sprite 999,1,2
set sprite alpha 999,142
paste sprite 999,1,3
set sprite alpha 999,102
paste sprite 999,1,4
set sprite alpha 999,62
paste sprite 999,1,5
ink rgb(22,22,22),0:line 1,1,xsize,1:line 1,1,1,ysize:line xsize,1,xsize,ysize:line 1,ysize,xsize,ysize:dot xsize,ysize
dot 2,2:dot 2,ysize-1:dot xsize-1,2:dot xsize-1,ysize-1
ink rgb(255,0,255),0:dot 1,1:dot 1,2:dot 2,1:dot xsize-1,1:dot xsize,1:dot xsize,2:dot 1,ysize-1:dot 1,ysize:dot 2,ysize:dot xsize-1,ysize:dot xsize,ysize:dot xsize,ysize-1
get image Image_number,1,1,xsize+1,ysize+1,1
delete bitmap 1
if sprite exist(999) then delete sprite 999
set current bitmap 0
endfunction
data 217,2,6,1,0,10
data 2,218,55,1,0,20
data 27,2,218,1,0,30
data 232,255,77,1,0,40
data 218,164,2,1,0,50
data 77,253,252,1,0,60
data 173,24,196,1,0,70
data 243,205,249,1,0,80
data 22,93,23,1,0,90
data 40,40,40,1,0,100
data "None","Indestructible","Random Powerup","Random Powerdown","Speed Up","Speed Down","Bomb"
Here is a version adding in some of Phaleax's ball code.
sync on
set display mode 800,600,32
set image colorkey 255,0,255
Set Text Font "Impact"
Set Text Size 32
type bit
image as integer
xpos as integer
ypos as integer
Brick_Number as integer
endtype
type format
red as byte
blue as byte
green as byte
hits as byte
points as integer
special as integer
endtype
Type Players
x as float
y as float
speed as float
size as float
Endtype
type Shadow
xpos as float
ypos as float
endtype
type Ball
x as float
y as float
oldx as float
oldy as float
speed as integer
radius as integer
dx as float
dy as float
endtype
type Bat
x as integer
y as integer
width as integer
endtype
Global paddle as Bat
paddle.width = 32
paddle.y = 96
dim balls(1) as Ball
dim shadows(-1) as shadow
dim brick_data(9) as format
dim brick(-1) as bit
dim grid(25,29)
dim special$(6)
Global Grid_x
Global Grid_y
Global Brick_Number
Global CURRENT_BRICK=2
Global GRID_ON
Global Level_Number=1
GLOBAL SHADOW_SPRITE=1000
#CONSTANT BOUND_TOP = 8
#CONSTANT BOUND_BOTTOM = 584
#CONSTANT BOUND_LEFT = 6
#CONSTANT BOUND_RIGHT = 577
balls(1).x = 200
balls(1).y = 50
balls(1).dx = cos(255)
balls(1).dy = sin(255)
balls(1).radius = 8
balls(1).speed = 2
load image "break-in_UI-1.png",1,1
load image "breakin-ball2.png",1003,1
load image "BreakIn_Paddle-top.png",1002,1
load image "brick_dlg1.png",100,1
Sprite 2,0,0,1002
sprite SHADOW_SPRITE,-200,-200,1002
Dim Player(0) as Players
Player(0).x=Screen Width()/2-Sprite Width(2)/2
Player(0).y=32
Player(0).speed=3.0
import_level("level"+str$(level_number))
do
Draw_screen()
if array count(brick())>=0 then draw_bricks()
if player(0).speed>=2.0 then shadow_player()
Control_Paddle()
update_positions()
sprite 1003,balls(1).x,balls(1).y,1003
sync
loop
Function Control_Paddle()
Player(0).x=Player(0).x+((-LeftKey()+RightKey())*Player(0).speed)
If Player(0).x>522 Then Player(0).x=522
If Player(0).x<15 Then Player(0).x=14
Sprite 2,Player(0).x,Player(0).y,1002
paddle.x=player(0).x
`Set Cursor 0,0
`Print Player(0).x
Endfunction
function shadow_player()
array insert at bottom shadows()
count=array count(shadows())
shadows(count).xpos=player(0).x
shadows(count).ypos=player(0).y
if array count(shadows())>9 then array delete element shadows(),0
for a = array count(shadows()) to 0 step -1
inc shade,10
set sprite alpha SHADOW_SPRITE,100-shade
paste sprite SHADOW_SPRITE,shadows(a).xpos,shadows(a).ypos
next a
endfunction
function Draw_Screen()
cls
paste image 1,0,0
text 600,20,"LEVEL: "+str$(level_number)
endfunction
function draw_bricks()
for a = 0 to array count(brick())
paste image brick(a).image,15+brick(a).xpos*19,184+brick(a).ypos*16,1
next a
endfunction
function disect(filename as string,across,down,imagestart)
load bitmap filename,1
x=bitmap width(1)/across
y=bitmap height(1)/down
for a = 0 to down-1
for b = 0 to across-1
get image imagestart+a*across+b,x*b,y*a,x*b+x,y*a+y
next b:next a
delete bitmap 1
endfunction
function import_level(file$)
file$=file$+".bil"
if file exist(file$)=0 then exitfunction
empty array brick()
brick_number=1
open to read 1,file$
for a = 0 to 9
read byte 1,x
brick_data(a).red=x
read byte 1,x
brick_data(a).blue=x
read byte 1,x
brick_data(a).green=x
read byte 1,x
brick_data(a).hits=x
read byte 1,x
brick_data(a).special=x
read long 1,x
brick_data(a).points=x
makebrick(brick_data(a).red, brick_data(a).blue, brick_data(a).green,38,16,a+2)
next a
read long 1,NOB
for a = 0 to NOB
array insert at bottom brick()
count=array count(brick())
read byte 1,x
brick(count).xpos=x
read byte 1,x
brick(count).ypos=x
read byte 1,x
brick(count).image=x
brick(count).brick_number=brick_number
grid(brick(count).ypos,brick(count).xpos)=brick_number
grid(brick(count).ypos,brick(count).xpos+1)=brick_number
inc brick_number
next a
close file 1
endfunction
function makebrick(R as integer, G as integer, B as integer, xsize as integer, ysize as integer, image_number as integer)
create bitmap 1,xsize+8,ysize+8
ink rgb(255,255,255),0
box 0,0,xsize+4,ysize+4
get image 999,1,1,xsize,2,1
sprite 999,0,0,999
hide sprite 999
box 1,1,xsize,ysize,rgb(R,G,B),rgb(R/3,G/3,B/3),rgb(R,G,B),rgb(R/3,G/3,B/3)
set sprite alpha 999,222
paste sprite 999,1,1
set sprite alpha 999,182
paste sprite 999,1,2
set sprite alpha 999,142
paste sprite 999,1,3
set sprite alpha 999,102
paste sprite 999,1,4
set sprite alpha 999,62
paste sprite 999,1,5
ink rgb(22,22,22),0:line 1,1,xsize,1:line 1,1,1,ysize:line xsize,1,xsize,ysize:line 1,ysize,xsize,ysize:dot xsize,ysize
dot 2,2:dot 2,ysize-1:dot xsize-1,2:dot xsize-1,ysize-1
ink rgb(255,0,255),0:dot 1,1:dot 1,2:dot 2,1:dot xsize-1,1:dot xsize,1:dot xsize,2:dot 1,ysize-1:dot 1,ysize:dot 2,ysize:dot xsize-1,ysize:dot xsize,ysize:dot xsize,ysize-1
get image Image_number,1,1,xsize+1,ysize+1,1
delete bitmap 1
if sprite exist(999) then delete sprite 999
set current bitmap 0
endfunction
function update_positions()
for b = 1 to array count(balls())
rem update position
balls(b).oldx = balls(b).x
balls(b).oldy = balls(b).y
balls(b).x = balls(b).x + balls(b).dx*balls(b).speed
balls(b).y = balls(b).y + balls(b).dy*balls(b).speed
rem check bounds
if balls(b).x-balls(b).radius <= BOUND_LEFT then balls(b).dx = balls(b).dx*-1
if balls(b).x+balls(b).radius >= BOUND_RIGHT then balls(b).dx = balls(b).dx*-1
if balls(b).y-balls(b).radius <= BOUND_TOP then balls(b).dy = balls(b).dy*-1
if balls(b).y+balls(b).radius >= BOUND_BOTTOM then balls(b).dy = balls(b).dy*-1
next b
endfunction
data 217,2,6,1,0,10
data 2,218,55,1,0,20
data 27,2,218,1,0,30
data 232,255,77,1,0,40
data 218,164,2,1,0,50
data 77,253,252,1,0,60
data 173,24,196,1,0,70
data 243,205,249,1,0,80
data 22,93,23,1,0,90
data 40,40,40,1,0,100
data "None","Indestructible","Random Powerup","Random Powerdown","Speed Up","Speed Down","Bomb"