Code: Select all
Dim diff_Kollision.w(3)
Global BallX.w : BallX = 10
Global BallY.w : BallY = 10
Global BallRateY.w : BallRateY = 2 ; Ball-Geschwindigkeit in Y-Richtung
Global BallRateX.w : BallRateX = 3 ; Ball-Geschwindigkeit in X-Richtung
Global BallDirY.w : BallDirY = -1 ; Y-Richtung
Global BallDirX.w : BallDirX = 1 ; X-Richtung
Global BallRadius.w : BallRadius = 10 ; Ball-Radius ist in Wirklichkeit ein Rechteck ;)
Global BlockXL.w ; Linke X-Kante des Blocks
Global BlockXR.w ; Rechte X-Kante des Blocks
Global BlockYT.w ; Obere Y-Kante des Blocks
Global BlockYB.w ; Untere Y-Kante des Blocks
Procedure Ball_Block_Collision()
Shared BlockXL , BlockXR , BlockYT , BlockYB
Shared BallX , BallY , BallDirX , BallDirY
If BallX >= BlockXL-BallRadius And BallX <= BlockXR+BallRadius And BallY >= BlockYT-BallRadius And BallY <= BlockYB+BallRadius
diff_XL=BallX-BlockXL : diff_XR=BlockXR-BallX : diff_YT=BallY-BlockYT : diff_YB=BlockYB-BallY
diff_Kollision(0)=diff_XL : diff_Kollision(1)=diff_XR : diff_Kollision(2)=diff_YT : diff_Kollision(3)=diff_YB
SortArray(diff_Kollision(),0)
If diff_XL = diff_Kollision(0)
BallDirX = -1
ElseIf diff_XR = diff_Kollision(0)
BallDirX = 1
ElseIf diff_YT = diff_Kollision(0)
BallDirY = -1
ElseIf diff_YB = diff_Kollision(0)
BallDirY = 1
EndIf
EndIf
EndProcedure
Procedure GamePlay(Val.l)
BallX = Int(BallX + BallRateX * BallDirX)
BallY = Int(BallY + BallRateY * BallDirY)
If BallY <= 16
BallDirY = 1
EndIf
If BallY >= 224
BallDirY = -1
EndIf
If BallX <= 20
BallDirX = 1
EndIf
If BallX >= 294
BallDirX = -1
EndIf
If KeyboardPushed(#PB_Key_Down)
BlockYT=BlockYT+Val
BlockYB = BlockYT+56
ElseIf KeyboardPushed(#PB_Key_Up)
BlockYT=BlockYT-Val
BlockYB = BlockYT+56
EndIf
Ball_Block_Collision()
ClearScreen(100,100,100)
DisplaySprite(0,0,0)
DisplayTransparentSprite(1,BallX-BallRadius,BallY-BallRadius)
DisplaySprite(2,BlockXL,BlockYT)
FlipBuffers()
EndProcedure
Val.l=4
If OpenWindow(0,5,5,330,250,#PB_Window_SystemMenu,"Breakout")
InitSprite()
InitKeyboard()
OpenWindowedScreen(WindowID(0),5,5,320,240,0,0,0)
SetFrameRate(100)
UsePNGImageDecoder()
LoadSprite(0,"Background.PNG")
LoadSprite(1,"Ball.PNG")
TransparentSpriteColor(1,255,0,255)
LoadSprite(2,"Bar.PNG")
BlockXL = 272
BlockXR = BlockXL+12
BlockYT = 94
BlockYB = BlockYT+56
Event=WaitWindowEvent()
Repeat
Select Event
Case #PB_Event_CloseWindow
quit=1
EndSelect
ExamineKeyboard()
If KeyboardPushed(1)
quit=1
EndIf
CreateThread(@GamePlay(),4)
Until quit=1
CloseScreen()
EndIf



