|
Moderator, Games Team
Join Date: Jan 2009
Location: Near Washington, D.C.
Posts: 2,329
OS: Windows XP Home Edition Service Pack 3
|
Brickwall Game [Help]
Hi all,
Last week I followed a guide online to write a Brickwall game. The problem is, the ball will not knock out the bricks, but it should. I did not import the program, but wrote out each line as I saw it, with what I think the only changes being the actual message when the game is over, whether the user wins or not. The game starts off with red bricks, and that is where the problem is, although I don't know if the problem is with yellow/and/or green bricks, since I can't get to that point in the game itself. I have attached the code for it to be looked over to see any things with the code that looks out of place for this problem to occur.
Thanks, Jason
Code:
'paddle = GraphicsWindow.AddRectangle(120, 12) 'v0.2
paddle = Shapes.AddRectangle(120, 12) 'v0.3.1
'ball = GraphicsWindow.AddEllipse(16, 16) 'v0.2
ball = Shapes.AddEllipse(16, 16) 'v.0.3.1
bricksLeft = 48
brickStartY = 35
hitcount = 0
GraphicsWindow.FontSize = 14
GraphicsWindow.MouseMove = OnMouseMove
GraphicsWindow.Title = "Brickwall Game"
For idx = 0 To 15
Array.SetValue("Green Bricks", idx, 1)
Array.SetValue("Yellow Bricks", idx, 1)
Array.SetValue("Red Bricks", idx, 1)
EndFor
DrawBricks()
score = 0
PrintScore()
gw = GraphicsWindow.Width
gh = GraphicsWindow.Height
y = gh - 28
'GraphicsWindow.MoveShape(ball, x, y) 'v0.2
Shapes.Move(ball,x,y) 'v0.3.1
deltaX = 1
deltaY = -2
Sound.PlayBellRingAndWait()
RunLoop:
x = x + deltaX
y = y + deltaY
gw = GraphicsWindow.Width
gh = GraphicsWindow.Height
If (x >= gw - 16 Or x <= 0) Then
deltaX = -deltaX
EndIf
If (y <= 0) Then
deltaY = -deltaY
EndIf
'padX = GraphicsWindow.GetLeftOfShape(paddle) 'v0.2
padX = Shapes.GetLeft(paddle) 'v.0.3.1
If ((y >= gh - 28 + 2) And x >= padX And x <= padX + 120) Then
y = gh - 28 + 2
'Sound.PlayClick()
hitcount = hitcount + 1
If Math.Remainder(hitcount, 3) = 0 Then 'Move brick downwards
For idx = 0 To 15
RemoveGreenBrick()
RemoveYellowBrick()
RemoveRedBrick()
Endfor
brickStartY = brickStartY + 20
DrawBricks()
EndIf
TestRed:
For idx = 0 To 15
If Array.GetValue("RedBricks", idx) = 1 Then
If brickStartY > gh - 160 Then
Goto EndGame
EndIf
EndIf
EndFor
TestYellow:
For idx = 0 To 15
If Array.GetValue("YellowBricks", idx) = 1 Then
If brickStartY > gh - 100 Then
Goto EndGame
EndIf
EndIf
EndFor
TestGreen:
For idx = 0 To 15
If Array.GetValue("GreenBricks", idx) = 1 Then
If brickStartY > gh - 40 Then
Goto EndGame
EndIf
EndIf
EndFor
EndTest:
deltaX = deltaX - 2 + (x -padX) / 30 ' Add some skill
If score = oldScore Then 'No bricks hit
score = score - 1
EndIf
oldScore = score
PrintScore()
deltaY = -deltaY 'Change the ball direction
EndIf
'GraphicsWindow.MoveShape(ball, x, y) 'v0.2
Shapes.Move(ball,x,y) 'v0.3.1
Program.Delay(5)
'Green Bricks
If y > brickStartY - 16 And y < brickstartY + 20 Then 'y position of brick - diameter of ball
idx = (x+8) / 40 ' Radius of ball / length of brick
idx = Math.Floor(idx) 'take integer part
If Array.GetValue("GreenBricks", idx) = 1 Then
Array.SetValue("GreenBricks", idx, 0)
RemoveGreenBrick()
Sound.PlayChime()
bricksLeft = bricksLeft - 1
deltaY = -deltaY 'Change ball direction
score = score + 15
PrintScore()
CheckEnd()
EndIf
EndIf
'Yellow Bricks
If y > brickStartY + 44 And y < brickStartY + 80 Then ' y position of brick - diameter of ball = 19
idx = (x+8) / 40 'Radius of ball / length of brick
idx = Math.Floor(idx) 'take integer part
If Array.GetValue("YellowBricks", idx) = 1 Then
Array.SetValue("YellowBricks", idx, 0)
RemoveYellowBrick()
Sound.PlayChime()
bricksLeft = bricksLeft - 1
deltaY = -deltaY 'Change ball direction
score = score + 10
PrintScore()
CheckEnd()
EndIf
EndIf
'Red Bricks
If y > brickStartY + 104 And y < brickStartY + 140 Then 'y position of brick - diameter of ball = 19
idx = (x+8) / 40 'Radius of ball / length of brick
idx = Math.Floor(idx) 'take integer part
If Array.GetValue("RedBricks", idx) = 1 Then
Array.SetValue("RedBricks", idx, 0)
RemoveRedBrick()
Sound.PlayChime()
bricksLeft = bricksLeft - 1
deltaY = -deltaY ' Change ball direction
score = score + 5
PrintScore()
CheckEnd()
EndIf
EndIf
If (y < gh) Then 'Ball not reached bottom of window
Goto RunLoop
EndIf
EndGame:
GraphicsWindow.ShowMessage("Thanks, for playing Brickwall, and your score is : " + score, "Brickwall Game")
Program.End()
Sub OnMouseMove
paddleX = GraphicsWindow.MouseX
'GraphicsWindow.MoveShape(paddle, paddleX - 60, GraphicsWindow.Height - 12) 'v0.2
Shapes.Move(paddle, paddleX - 60, GraphicsWindow.Height - 12) 'v0.3.1
EndSub
Sub PrintScore
' Clear the score first and then draw the real score text
GraphicsWindow.BrushColor = "White"
GraphicsWindow.FillRectangle(10, 10, 200, 20)
GraphicsWindow.BrushColor = "Black"
GraphicsWindow.DrawText(10, 10, "Your score is: " + score)
EndSub
Sub DrawBricks
For idx = 0 To 15 'Draw bricks
'Program.Delay(100)
If Array.GetValue("GreenBricks", idx) = 1 Then
GraphicsWindow.PenColor = "Black"
GraphicsWindow.BrushColor = "Green"
Else
GraphicsWindow.PenColor = "White"
GraphicsWindow.BrushColor = "White"
EndIf
GraphicsWindow.FillRectangle(idx * 40, brickStartY, 40, 20)
GraphicsWindow.DrawRectangle(idx * 40, brickStartY, 40, 20)
GraphicsWindow.BrushColor = "Yellow"
If Array.GetValue("YellowBricks", idx) = 1 Then
GraphicsWindow.PenColor = "Black"
GraphicsWindow.BrushColor = "Yellow"
Else
GraphicsWindow.PenColor = "White"
GraphicsWindow.BrushColor = "White"
EndIf
GraphicsWindow.FillRectangle(idx * 40, brickStartY + 60, 40, 20)
GraphicsWindow.DrawRectangle(idx * 40, brickStartY + 60, 40, 20)
GraphicsWindow.BrushColor = "Red"
If Array.GetValue("RedBricks", idx) = 1 Then
GraphicsWindow.PenColor = "Black"
GraphicsWindow.BrushColor = "Red"
Else
GraphicsWindow.PenColor = "White"
GraphicsWindow.PenColor = "White"
EndIf
GraphicsWindow.FillRectangle(idx * 40, brickStartY + 120, 40, 20)
GraphicsWindow.DrawRectangle(idx * 40, brickStartY + 120, 40, 20)
EndFor
EndSub
|