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) |