Ich habe mal begonnen eine Art Tetris-Klon zu programmieren bin aber gleich am Anfang auf ein Problem gestoßen.
Zuerst klappt alles ganz normal, der Klotz bewegt sich nach unten, bis er unten angekommen ist und bleibt dort stehen, wenn aber dann ein neuer Klotz entstehen soll entstehen statt einem gleich unendlich viele neue Klötze, jedenfalls entsteht ein roter "Batzen" der immer länger wird, je weiter er sich nach unten bewegt.
Hier ist der Code:
Code: Alles auswählen
Structure brick
PosX.l
PosY.l
Speed.l
Stuck.l
EndStructure
Global NewList Brick.brick()
Procedure NewBrick(PosX,PosY,Speed,Stuck)
AddElement(Brick())
Brick()\PosX = PosX
Brick()\PosY = PosY
Brick()\Speed = Speed
Brick()\Stuck = Stuck
EndProcedure
Global delay
InitSprite()
InitKeyboard()
OpenScreen(800,600,32,"Tetris")
Repeat
ExamineKeyboard()
ClearScreen(RGB(255,255,255))
If delay = 0
NewBrick(200,0,1,0)
delay = 1
EndIf
Gosub display
FlipBuffers()
If KeyboardPushed(1)
End
EndIf
Until KeyboardPushed(1)
display:
StartDrawing(ScreenOutput())
ResetList(Brick())
While NextElement(Brick())
;Display
Box(Brick()\PosX,Brick()\PosY,50,20,RGB(255,0,0))
;Movement down
If Brick()\Stuck = 0
Brick()\PosY + Brick()\Speed
EndIf
If Brick()\PosY = 580
Brick()\Stuck = 1
delay = 0
EndIf
;Movement Left\Right
If KeyboardPushed(#PB_Key_Right) And Brick()\Stuck = 0
Brick()\PosX + 2
ElseIf KeyboardPushed(#PB_Key_Left) And Brick()\Stuck = 0
Brick()\PosX - 2
EndIf
Wend
StopDrawing()
Return