Breakout problem

Blitz3D Forums/Blitz3D Beginners Area/Breakout problem

Ahh, I think I've got this one down now :o) Everything seems to working fine.

Here is my code:

Graphics 800,600
SetBuffer BackBuffer()


Global SCREEN_WIDTH = 800
Global SCREEN_HEIGHT = 600
Global AREA_X = 0;(SCREEN_WIDTH/2)/4;20;150
Global AREA_Y = 30
Global AREA_WIDTH = 11
Global AREA_HEIGHT = 8
Global BRICK_WIDTH = 50
Global BRICK_HEIGHT= 15
Global BALL_WIDTH = 10
Global BALL_HEIGHT = 10

Global ball_x = AREA_X+10
Global ball_y = 10
Global ball_x_dir = 1
Global ball_y_dir = 1
Global ball_x_speed = 3
Global ball_y_speed = 3

Global BOUNDARY_X = AREA_X
Global BOUNDARY_Y = 0
Global BOUNDARY_WIDTH = (BRICK_WIDTH*AREA_WIDTH)+(BRICK_WIDTH*2)
Global BOUNDARY_HEIGHT = 600

Global USER_WIDTH = 100
Global USER_HEIGHT = 15
Global user_x = (BOUNDARY_X+BOUNDARY_WIDTH)/2 
Global user_y = 550
Global user_score = 0

Global TEXT_X = (BOUNDARY_X+BOUNDARY_WIDTH)+2


Dim Bricks(AREA_WIDTH-1,AREA_HEIGHT-1)

For y=0 To AREA_HEIGHT-1
	For x=0 To AREA_WIDTH-1
		Bricks(x,y)=1
	Next
Next




read_level()

While Not KeyHit(1)
Cls
	
	Color 0,0,65
	Rect (BOUNDARY_X+2),(BOUNDARY_Y+2),(BOUNDARY_WIDTH-4),(BOUNDARY_HEIGHT-4),1
	
	update_user()
	
	update_ball()
	
	draw_level()
	
	Color 0,0,Rand(200,255)
	Rect user_x,user_y,USER_WIDTH,USER_HEIGHT,1
	Color 255,255,255
	Rect user_x,user_y,USER_WIDTH,USER_HEIGHT,0
	Oval ball_x,ball_y,BALL_WIDTH,BALL_HEIGHT,1

	Rect BOUNDARY_X,BOUNDARY_Y,BOUNDARY_WIDTH,BOUNDARY_HEIGHT,0
	Color 255,255,255
	Rect (BOUNDARY_X+2),(BOUNDARY_Y+2),(BOUNDARY_WIDTH-4),(BOUNDARY_HEIGHT-4),0
	
	Rect TEXT_X-2,0,SCREEN_WIDTH-(TEXT_X-2),SCREEN_HEIGHT,0

	Text TEXT_X,5,"BALL X:"+ball_x 
	Text TEXT_X,35,"BALL Y:"+ball_y 
	Text TEXT_X,65,"BALL_Y_DIR:"+ball_y_dir
	Text TEXT_X,105,"SCORE:"+user_score
	
	Flip
	
	
Wend
End





Function update_ball()


	If ball_x_dir = 1 Then ball_x = ball_x+ball_x_speed
	If ball_x_dir = 0 Then ball_x = ball_x-ball_x_speed
	If ball_y_dir = 1 Then ball_y = ball_y+ball_y_speed
	If ball_y_dir = 0 Then ball_y = ball_y-ball_y_speed
	
	If ball_x>BOUNDARY_X+(BOUNDARY_WIDTH-BALL_WIDTH) Then ball_x_dir = 1-ball_x_dir
	If ball_x<BOUNDARY_X Then ball_x_dir = 1-ball_x_dir
	If ball_y>(BOUNDARY_HEIGHT-BALL_HEIGHT) Then ball_y_dir = 1-ball_y_dir
	If ball_y<BOUNDARY_Y Then ball_y_dir = 1-ball_y_dir
	
	
	For y = 0 To AREA_HEIGHT-1
		For x = 0 To AREA_WIDTH-1
			If Bricks(x,y)<>0

				X_CHECK = (AREA_X+BRICK_WIDTH)+(x*BRICK_WIDTH)
				WIDTH_CHECK = X_CHECK+BRICK_WIDTH
				Y_CHECK = AREA_Y+(y*BRICK_HEIGHT)
				HEIGHT_CHECK = Y_CHECK+BRICK_HEIGHT
				
				ball_x = ball_x+ball_x_speed
				If RectsOverlap(ball_x,ball_y,BALL_WIDTH,BALL_HEIGHT,X_CHECK,Y_CHECK,BRICK_WIDTH,BRICK_HEIGHT) Then
					ball_x_dir = 1-ball_x_dir
					Bricks(x,y) = 0
					user_score = user_score+14
				EndIf
				
				ball_x = ball_x-ball_x_speed
				If RectsOverlap(ball_x,ball_y,BALL_WIDTH,BALL_HEIGHT,X_CHECK,Y_CHECK,BRICK_WIDTH,BRICK_HEIGHT) Then
					ball_x_dir = 1-ball_x_dir
					Bricks(x,y) = 0
					user_score = user_score+14
				EndIf

				ball_y = ball_y+ball_y_speed
				If RectsOverlap(ball_x,ball_y,BALL_WIDTH,BALL_HEIGHT,X_CHECK,Y_CHECK,BRICK_WIDTH,BRICK_HEIGHT) Then
					ball_y_dir = 1-ball_y_dir
					Bricks(x,y) = 0
					user_score = user_score+14
				EndIf
				
				ball_y = ball_y-ball_y_speed
				If RectsOverlap(ball_x,ball_y,BALL_WIDTH,BALL_HEIGHT,X_CHECK,Y_CHECK,BRICK_WIDTH,BRICK_HEIGHT) Then
					ball_y_dir = 1-ball_y_dir
					Bricks(x,y) = 0
					user_score = user_score+14
				EndIf

			EndIf
		Next
	Next

End Function




Function update_user()

	user_x = user_x+MouseXSpeed()
	If user_x>BOUNDARY_X+(BOUNDARY_WIDTH-USER_WIDTH) Then user_x = BOUNDARY_X+(BOUNDARY_WIDTH-USER_WIDTH)
	If user_x<BOUNDARY_X Then user_x = BOUNDARY_X
	
	ball_x = ball_x+ball_x_speed
	If RectsOverlap(ball_x,ball_y,BALL_WIDTH,BALL_HEIGHT,user_x,user_y,USER_WIDTH,USER_HEIGHT) Then 
		ball_x_dir = 1-ball_x_dir
	EndIf
	
	ball_x = ball_x-ball_x_speed
	If RectsOverlap(ball_x,ball_y,BALL_WIDTH,BALL_HEIGHT,user_x,user_y,USER_WIDTH,USER_HEIGHT) Then 
		ball_x_dir = 1-ball_x_dir
	EndIf
	
	ball_y = ball_y+ball_y_speed
	If RectsOverlap(ball_x,ball_y,BALL_WIDTH,BALL_HEIGHT,user_x,user_y,USER_WIDTH,USER_HEIGHT) Then 
		ball_y_dir = 1-ball_y_dir
	EndIf
	
	ball_y = ball_y-ball_y_speed
	If RectsOverlap(ball_x,ball_y,BALL_WIDTH,BALL_HEIGHT,user_x,user_y,USER_WIDTH,USER_HEIGHT) Then 
		ball_y_dir = 1-ball_y_dir
	EndIf

End Function




Function read_level()
	
	Restore level1
	
	For y=0 To AREA_HEIGHT-1
		For x=0 To AREA_WIDTH-1
			Read Bricks(x,y)
		Next
	Next

End Function





Function draw_level()

	For y = 0 To AREA_HEIGHT-1
		For x = 0 To AREA_WIDTH-1
			If Bricks(x,y)=1 Then 
				Color 55,55,Rand(0,135)
				Rect (AREA_X+BRICK_WIDTH)+x*BRICK_WIDTH,AREA_Y+y*BRICK_HEIGHT,BRICK_WIDTH,BRICK_HEIGHT,1
				Color 255,255,255
				Rect (AREA_X+BRICK_WIDTH)+x*BRICK_WIDTH,AREA_Y+y*BRICK_HEIGHT,BRICK_WIDTH,BRICK_HEIGHT,0
			EndIf
		Next
	Next
	
End Function







.level1
Data 1,1,1,1,1,1,1,1,1,1,1
Data 1,1,1,1,1,1,1,1,1,1,1
Data 1,1,1,1,1,1,1,1,1,1,1
Data 1,1,1,1,1,1,1,1,1,1,1
Data 1,1,1,1,1,1,1,1,1,1,1
Data 1,1,1,1,1,1,1,1,1,1,1
Data 1,1,1,1,1,1,1,1,1,1,1
Data 1,1,1,1,1,1,1,1,1,1,1



Thanks Again guys! :o)