Post by Adam on Sept 10, 2008 21:47:59 GMT -5
Breakout like Game:
EDIT:/ wow today isnt my day, i 4got this
basic4gl.wikispaces.com/space/showimage/Textbox_Font.png
Struc SBlock
Dim Handle
Dim Active
End Struc
Struc SPaddle
Dim Handle
Dim Pos#(1)
Dim Size#(1)
Dim Rot#(1)(1)
Dim Way
End Struc
Struc SBall
Dim Handle
Dim Active
Dim Speed#(1)
Dim Size#(1)
End Struc
Struc SCount
Dim Balls
Dim YBlocks
Dim XBlocks
Dim Blocks
End Struc
Struc SScore
Dim Score
Dim Multiplier
Dim Lost
End Struc
Struc STXT
Dim Last_Text$
Dim Text$
Dim Sprites(100)
End Struc
Dim SBlock Blocks(100)(100)
Dim SPaddle Paddle
Dim SBall Balls(100)
Dim SCount Count
Dim SBall &B
Dim SScore Score
Dim STXT Score_Params(3)
Dim STXT &Handle
Dim TXT_SPR_FONT(255) = LoadImageStrip("Data\Textbox_font.png",32)
Dim Ball_Texture = LoadTexture("Data/0.png")
Dim Distance#(1)
Dim Daylight#(3) = Vec4(0.9,0.9,1,1)
Dim Tiles(0)(0)
Dim X, Y, I
Dim BackGround
Dim Back_Timer
Dim Dark
Sub Swap(A,B)
Dim Temp
Temp = A: A = B: B = Temp
End Sub
Sub Paddle_Handling()
Dim Mouse# = Mouse_XD()
BindSprite(Paddle.Handle)
SprSetSize(Paddle.Size#)
SprSetPos(Paddle.Pos#)
SprSetColor(0,0,0,.5)
IF Mouse# < .0 Or ScanKeyDown(VK_Left) Then Paddle.Rot#(0)(0) = Paddle.Rot#(0)(0)-.75 Endif
IF Mouse# > .0 Or ScanKeyDown(VK_Right)Then Paddle.Rot#(0)(1) = Paddle.Rot#(0)(1)+.75 Endif
For I = 0 To 1
Paddle.Rot#(I)(0) = Paddle.Rot#(I)(0) + 0.25
Paddle.Rot#(I)(1) = Paddle.Rot#(I)(1) - 0.25
IF Paddle.Rot#(I)(0) > 0 Then Paddle.Rot#(I)(0) = 0 Endif
IF Paddle.Rot#(I)(1) < 0 Then Paddle.Rot#(I)(1) = 0 Endif
Next
Paddle.Pos# = Vec2(Paddle.Pos#(0) + Paddle.Rot#(0)(0) + Paddle.Rot#(0)(1),Paddle.Pos#(1) + Paddle.Rot#(1)(0) + Paddle.Rot#(1)(1))
IF SprLeft() < 0 Then Paddle.Pos#(0) = SprXSize()/2: Paddle.Rot#(0)(1) = (-Paddle.Rot#(0)(0)*.5): Paddle.Rot#(0)(0) = 0 Endif
IF SprRight() > 640 Then Paddle.Pos#(0) = 640-(SprXSize()/2): Paddle.Rot#(0)(0) = (-Paddle.Rot#(0)(1)*.5): Paddle.Rot#(0)(1) = 0 Endif
End Sub
Sub Paddle_Handling2()
BindSprite(Paddle.Handle)
SprSetSize(Paddle.Size#)
SprSetPos(Paddle.Pos#)
SprSetColor(0,0,0,.5)
Paddle.Pos#(0) = Mouse_X()*SpriteAreaWidth()
End Sub
Sub _Color(Alpha#)
I = Rnd()%3 + 1
IF I = 1 Then
SprSetColor(1,0,0,Alpha#)
Elseif I = 2 Then
SprSetColor(0,1,0,Alpha#)
Elseif I = 3 Then
SprSetColor(0,0,1,Alpha#)
Endif
End Sub
Sub Build_Blocks(XMax,YMax)
For Y = 0 To YMax
For X = 0 To XMax
IF Blocks(X)(Y).Handle = 0 Then Blocks(X)(Y).Handle = NewSprite(0) Else BindSprite(Blocks(X)(Y).Handle) Endif
Blocks(X)(Y).Active = True
SprSetVisible(True)
SprSetPos(X*26+18,Y*18+12)
SprSetSize(24,16)
_Color(.5)
Next
Next
Count.XBlocks = XMax
Count.YBlocks = YMax
End Sub
Sub Build_Ball()
B.Handle = NewSprite(Ball_Texture)
SprSetPos(320,320)
B.Size# = Vec2(12,12)
B.Speed# = Vec2(1,1)
_Color(.5)
End Sub
Sub Block_Collision()
For Y = 0 To Count.YBlocks
For X = 0 To Count.XBlocks
IF SprLeft() < SprRight(Blocks(X)(Y).Handle) Then
IF SprRight() > SprLeft(Blocks(X)(Y).Handle) Then
IF SprTop() < SprBottom(Blocks(X)(Y).Handle) Then
IF SprBottom() > SprTop(Blocks(X)(Y).Handle) Then
IF Abs(SprLeft(Blocks(X)(Y).Handle - SprRight())) > Abs(SprRight(Blocks(X)(Y).Handle - SprLeft())) Then
Distance#(0) = Abs(SprRight(Blocks(X)(Y).Handle - SprLeft()))
Else Distance#(0) = Abs(SprLeft(Blocks(X)(Y).Handle - SprRight())) Endif
IF Abs(SprTop(Blocks(X)(Y).Handle - SprBottom())) > Abs(SprBottom(Blocks(X)(Y).Handle - SprTop())) Then
Distance#(1) = Abs(SprBottom(Blocks(X)(Y).Handle - SprTop()))
Else Distance#(1) = Abs(SprTop(Blocks(X)(Y).Handle - SprBottom())) Endif
IF Distance#(0) > Distance#(1) Then B.Speed#(0) = -SprXVel() Else B.Speed#(1) = -SpryVel() Endif
DeleteSprite(Blocks(X)(Y).Handle)
Blocks(X)(Y).Handle = 0
Score.Score = Score.Score + 1
Count.Blocks = Count.Blocks - 1
Endif
Endif
Endif
Endif
Next
Next
End Sub
Sub Block_Collision2()
For Y = 0 To Count.YBlocks
For X = 0 To Count.XBlocks
if Blocks(X)(Y).Active then
BindSprite (Blocks(X)(Y).Handle)
Distance#(0) = SprXSize () - Abs (SprX () - SprX (B.Handle))
Distance#(1) = SprYSize () - Abs (SprY () - SprY (B.Handle))
if Distance#(0) >= 0 and Distance#(1) >= 0 then
SprSetVisible(False)
Blocks(X)(Y).Active = False
BindSprite (B.Handle)
if Distance#(0) <= Abs (SprXVel ()) then B.Speed#(0) = (-SprXVel ()) endif
if Distance#(1) <= Abs (SprYVel ()) then B.Speed#(1) = (-SprYVel ()) endif
Score.Score = Score.Score + 1
Count.Blocks = Count.Blocks - 1
endif
endif
Next
Next
BindSprite (B.Handle)
End Sub
Sub Paddle_Collision()
IF SprLeft() < SprRight(Paddle.Handle) Then
IF SprRight() > SprLeft(Paddle.Handle) Then
IF SprTop() < SprBottom(Paddle.Handle) Then
IF SprBottom() > SprTop(Paddle.Handle) Then
B.Speed#(1) = -SprYVel()
Endif
Endif
Endif
Endif
End Sub
Sub Paddle_Collision2()
BindSprite (Paddle.Handle)
Distance#(0) = SprXSize () - Abs (SprX () - SprX (B.Handle))
Distance#(1) = SprYSize () - Abs (SprY () - SprY (B.Handle))
if Distance#(0) >= 0 and Distance#(1) >= 0 then
BindSprite (B.Handle)
if Distance#(0) <= Abs (SprXVel ()) then B.Speed#(0) = (-SprXVel ()) endif
if Distance#(1) <= Abs (SprYVel ()) then B.Speed#(1) = (-SprYVel ()) endif
endif
BindSprite (B.Handle)
End Sub
Sub Border_Collision()
IF SprBottom() > SpriteAreaHeight()+(SprYSize()*2) Then Score.Lost = Score.Lost+1 Endif
IF SprTop() < 0 Or SprBottom() > SpriteAreaHeight()+(SprYSize()*2) Then B.Speed#(1) = -SprYVel() Endif
IF SprLeft() < 0 Or SprRight() > SpriteAreaWidth() Then B.Speed#(0) = -SprXVel() Endif
End Sub
Sub Ball_Handling()
For I = 0 To Count.Balls
&B = &Balls(I)
IF B.Handle = 0 Then Build_Ball() Else BindSprite(B.Handle) Endif
Block_Collision2()
Paddle_Collision()
Border_Collision()
SprSetVel(B.Speed#)
SprSetSize(B.Size#)
IF B.Speed#(0) < 0 Then B.Speed#(0) = B.Speed#(0) -0.001 Else B.Speed#(0) = B.Speed#(0)+0.001 Endif
IF B.Speed#(1) < 0 Then B.Speed#(1) = B.Speed#(1) -0.001 Else B.Speed#(1) = B.Speed#(1)+0.001 Endif
IF B.Speed#(0) < -5 Then B.Speed#(0) = -5 Endif
IF B.Speed#(0) > 5 Then B.speed#(0) = 5 Endif
IF B.Speed#(1) < -5 Then B.Speed#(1) = -5 Endif
IF B.Speed#(1) > 5 Then B.speed#(1) = 5 Endif
Next
End Sub
Sub BindTXT(STXT &Han)
&Handle = &Han
End Sub
Sub _BuildSprite()
Handle.Sprites(I) = NewSprite()
SprSetXCentre(0)
SprSetYCentre(0)
SprSetSize(10,14)
SprSetColor(0,0,0,.75)
SprSetZorder(-10)
End Sub
Sub Change(Text$)
Handle.Last_Text$ = Handle.Text$
Handle.Text$ = Text$
End Sub
Sub TXT(X,Y)
For I = 0 To Len(Handle.Last_Text$) -1: BindSprite(Handle.Sprites(I)): SprSetVisible(False): Next
For i = 0 to len(Handle.Text$) - 1
IF Not Handle.Sprites(I) Then _BuildSprite() Else BindSprite(Handle.Sprites(I)): SprSetVisible(True) Endif
SprSetTexture(TXT_SPR_FONT(Asc(mid$(Handle.Text$, i+1, 1))))
SprsetPos(i*10+x,15+Y)
Next
End Sub
Sub Score_Handling()
Count.Balls = Score.Multiplier
IF Score.Score > Score.Multiplier * 100 Then Score.Multiplier = Score.Multiplier + 1 Endif
BindTXT(Score_Params(0))
Change("Score: "+Score.Score)
TXT(0,-10)
BindTXT(Score_Params(1))
Change("Multiplier: "+Score.Multiplier)
Txt(0,2)
BindTxt(Score_Params(2))
Change("Blocks Left:"+Count.Blocks)
TXT(0,14)
BindTXT(Score_Params(3))
Change("Balls Lost: "+Score.Lost)
Txt(0,26)
End Sub
Sub Light_Handling()
IF PerFormanceCounter() > Back_Timer + 10000 Then
Back_Timer = PerFormanceCounter()
IF Daylight#(0) <= 0 Then Dark = True Endif
IF DayLight#(0) >= .9 Then Dark = False Endif
IF Dark Then
DayLight# = DayLight# + Vec4(0.01,0.01,0.01,0)
Else
DayLight# = DayLight# - Vec4(0.01,0.01,0.01,0)
Endif
BindSprite(Background)
SprSetColor(DayLight#)
Endif
End Sub
TextMode(Text_Buffered)
ResizeText(60,40)
Color(1,1,1)
Paddle.Handle = NewSprite(0)
Paddle.Pos# = Vec2(320,460)
Paddle.Size# = Vec2(64,8)
BackGround = NewTileMap(LoadTexture("textures/00004.jpg"))
SprSetTiles(Tiles)
SprSetSize(64,64)
SprSetZOrder(100)
SprSetColor(.7,.7,.8,1)
Build_Blocks(23,10)
Count.Blocks = (Count.XBlocks+1) * (Count.YBlocks+1)
Do
Score_Handling()
Light_Handling()
Paddle_Handling()
Ball_Handling()
AnimateSprites()
DrawText()
Loop
EDIT:/ wow today isnt my day, i 4got this
basic4gl.wikispaces.com/space/showimage/Textbox_Font.png