For...Each freezes game. A newbie needs help
BlitzPlus Forums/BlitzPlus Beginners Area/For...Each freezes game. A newbie needs help| 
 | ||
| Hey everyone! Thanks for helping :). I'm a newbie at this and just need some help. My code is below. Graphics 800,600,0,2
SetBuffer BackBuffer()
Dim array(10,10)
Data 1,1,1,1,1,1,1,1,1,1
Data 1,1,1,1,1,1,1,1,1,1
Data 1,1,1,1,1,1,1,1,1,1
Data 1,1,1,0,0,0,0,1,1,1
Data 1,1,1,0,0,0,0,1,1,1
Data 1,1,1,0,0,0,0,1,1,1
Data 1,1,1,0,0,0,0,1,1,1
Data 1,1,1,1,1,1,1,1,1,1
Data 1,1,1,1,1,1,1,1,1,1
Data 1,1,1,1,1,1,1,1,1,1
;###########################################
;#            Type Definitions             #
;###########################################
Type brick
	Field x,y
	Field image
	Field hitpoints
End Type
Type player
	Field lives
	Field x,y
	Field image
End Type
Type ball
	Field x,y
	Field vX, vY
	Field image
End Type
;###########################################
;#        Variable and New Types           #
;###########################################
Global weakbrick.brick = New brick
weakbrick\x = 150
weakbrick\y = 150
weakbrick\image = LoadImage("brick.bmp")
weakbrick\hitpoints = 1
Global ball.ball = New ball
ball\x = 400
ball\y = 300
ball\vX = 4
ball\vY = 4
ball\image = LoadImage("ball.bmp")
Global player.player = New player
player\lives = 3
player\x = 350
player\y = 580
player\image = LoadImage("player.bmp")
Global background1 = LoadImage("background1.bmp")
Global readinfo = 1
;###########################################
;#               Main Loop                 #
;###########################################
While Not KeyHit(1)
	Cls
	drawImages()
	drawlevel()
	movement()
	collisions()
	Flip
Wend
;###########################################
;#    Performs all Collision Detection     #
;###########################################
Function collisions()
	;Tests to see whether ball collides with sides
	If ball\y > 595 Then ball\vY = -ball\vY
	If ball\x > 796 Then ball\vX = -ball\vX
	If ball\y < 0 Then ball\vY = -ball\vY
	If ball\x < 0 Then ball\vX = -ball\vX
	
	;If the ball hits the player paddle	
	If ImagesCollide(player\image, player\x, player\y, 0, ball\image, ball\x,ball\y, 0) Then
		ball\vY = -ball\vY
	EndIf
	
	If ImagesCollide(weakbrick\image, weakbrick\x, weakbrick\y, 0, ball\image, ball\x,ball\y, 0) Then
		ball\vY = -ball\vY
	EndIf
	
	;If the player paddle hits the edges
	If player\x < 0 Then player\x = 0
	If player\x > 721 Then player\x = 721		
	
End Function
;###########################################
;#           Draws all images              #
;###########################################
Function drawImages()
	DrawImage(background1,0,0)
	DrawImage(player\image,player\x,player\y)
	DrawImage(ball\image,ball\x,ball\y)
End Function
Function drawlevel()
	For y = 1 To 10
		For x = 1 To 10
			If readinfo = 1 Then Read array(x,y)
			If array(x,y) = 1 Then
				DrawImage(weakbrick\image, x * 50, y * 20)
			EndIf
		Next
	Next
	readinfo = 0
End Function
;###########################################
;#            Movement Inputs              #
;###########################################
Function movement()
	;ball movement
	ball\x = ball\x + ball\vX
	ball\y = ball\y + ball\vY
	
	;player movement
	If KeyDown(203) Then
		player\x = player\x - 5
	Else If KeyDown(205) Then
		player\x = player\x + 5
	EndIf
End Function
EndI'm trying to create a breakout game and I have multiple bricks drawn to the screen. However, each time I use the FOR EACH method to try to add behaviors to the bricks it freezes the game. Why does it do this? Everyone in advance. -- Matt | 
| 
 | ||
| i would sort out the array sizes first Dim array(10,10) creates an array 11 x 11 as arrays start at 0 so an array with 10 elements would be Dim array(9,9) then use for x = 0 to 9 At the moment it's just creating an empty element at the beginning What was the for each code that was being used ? | 
| 
 | ||
| In your code, you have defined only 1 instance of the Brick type. here is how i would do it: Then you can use collision detection like this: | 
| 
 | ||
| A small game, for Blitz3d - click on maximize box ;) (edit #xxl) |