'Breakout'-Klon
Übersicht

![]() |
sheldonBetreff: 'Breakout'-Klon |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi,
ich habe hier auch mal so ein 'Breakout'-Klon gebastelt und wollte ihn euch vorstellen. Er ist fast so wie jeder andere 'Breakout'-Klon. "Features" : - Damit es nicht zu langweilig wird, verändert der Ball alle 10 Sekunden seinen Winkel. - Bei jeder Kollision des Balles mit dem Schläger oder einem Stein, erhöht sich die Geschwindigkeit um 0.05. Bugs : - Der Schläger kann den Ball 'aufsaugen', indem man ihn mit der rechten o. linken Seite berührt. Code : Code: [AUSKLAPPEN] Graphics 800,600
SetBuffer BackBuffer() SeedRnd MilliSecs() Type Stein Field X#, Y# Field Image End Type Type Kugel Field X#, Y#, Speed#, Winkel Field Image End Type Global S.Stein, K.Kugel Global PlayerX, PlayerY, PlayerSpeed Global PlayerImage Global GameOver = 0 Global Timer Global BackGround Global MNUAuswahl, AWLineY Const NewGame = 1 Const Ende = 2 PlayerImage = CreateImage(30,5) SetBuffer ImageBuffer(PlayerImage) Color 170,170,170 Rect 0,0,50,50,0 Color 200,200,200 Rect 1,1,30,10 SetBuffer BackBuffer() ScaleImage PlayerImage,3,3 BackGround = CreateImage(800,600) SetBuffer ImageBuffer(BackGround) Color 255,255,255 For Stars = 1 To 500 Plot Rand(800),Rand(600) Next SetBuffer BackBuffer() Repeat MNUAuswahl = NewGame Repeat DrawImage BackGround,0,0 Color 0,0,160 Rect 250,100,300,400 AWLineY = 207 + (MNUAuswahl - 1) * 150 Color 0,255,0 Line 275,AWLineY,525,AWLineY Color 255,255,255 Text 400,200," - - - Spiel starten - - - ",1,0 Text 400,350," - - - Beenden - - - ",1,0 Flip Cls If KeyHit(1) Then End If KeyHit(200) Then MNUAuswahl = MNUAuswahl - 1 If KeyHit(208) Then MNUAuswahl = MNUAuswahl + 1 If MNUAuswahl < 1 Then MNUAuswahl = 2 If MNUAuswahl > 2 Then MNUAuswahl = 1 Until KeyHit(28) If MNUAuswahl = Ende Then End For K = Each Kugel Delete K Next For S = Each Stein Delete S Next PlayerX = 355 PlayerY = 580 PlayerSpeed = 4 GameOver = 0 K = New Kugel K\X = 390 K\Y = 290 K\Speed# = 1.8 If Rand(1,2) = 1 Then K\Winkel = Rand(30,70) + 180 : Else K\Winkel = Rand(90,150) + 180 K\Image = CreateImage(10,10) SetBuffer ImageBuffer(K\Image) Color 200,200,200 Oval 0,0,10,10 Color 150,150,150 Oval 0,0,10,10,0 Color 170,170,170 Oval 1,1,8,8,0 SetBuffer BackBuffer() ScaleImage K\Image,2,2 For X = 0 To 760 Step 40 For Y = 0 To 100 Step 20 S = New Stein S\X = X S\Y = Y S\Image = CreateImage(20,10) SetBuffer ImageBuffer(S\Image) Farbe = Rand(1,4) If Farbe = 1 Then Color 0,0,200 If Farbe = 2 Then Color 0,200,0 If Farbe = 3 Then Color 200,0,0 If Farbe = 4 Then Color 200,200,0 Rect 1,1,50,50,0 If Farbe = 1 Then Color 0,0,170 If Farbe = 2 Then Color 0,170,0 If Farbe = 3 Then Color 170,0,0 If Farbe = 4 Then Color 170,170,0 Rect 0,0,20,10,0 If Farbe = 1 Then Color 0,0,230 If Farbe = 2 Then Color 0,230,0 If Farbe = 3 Then Color 230,0,0 If Farbe = 4 Then Color 230,230,0 Rect 2,2,17,7,1 SetBuffer BackBuffer() ScaleImage S\Image,2,2 Next Next Timer1 = MilliSecs() Timer2 = MilliSecs() Repeat DrawAll MoveAll Controls DetectCollisions Timer Flip Cls Until KeyHit(1) Or GameOver = 1 Until KeyHit(1) End Function DrawAll() DrawImage BackGround,0,0 DrawImage PlayerImage, PlayerX, PlayerY For s = Each stein DrawImage S\Image, S\X, S\Y Next For k = Each kugel DrawImage K\Image, k\X, k\Y Next End Function Function MoveAll() For k = Each kugel k\x = k\x + Cos(k\winkel) * k\speed k\y = k\y - Sin(k\winkel) * k\speed If k\winkel >= 360 Then k\winkel = k\winkel - 360 If k\winkel <= -360 Then k\winkel = k\winkel + 360 Next End Function Function Controls() If KeyDown(203) Then playerX = playerX - playerSpeed If KeyDown(205) Then playerX = playerX + playerSpeed End Function Function DetectCollisions() For k = Each kugel If ImagesCollide(k\image,k\x,k\y,0,playerImage,playerX,playerY,0) Then k\winkel = k\winkel * (-1) k\speed# = k\speed# + .05 End If For s = Each stein If ImagesCollide(k\image,k\x,k\y,0,s\image,s\x,s\y,0) Then If k\y <= s\y + 20 Or k\y >= s\y - 20 Then k\winkel = k\winkel * (-1) Goto marke1 ElseIf k\x <= s\x + 40 Or k\x >= s\y - 20 Then k\winkel = k\winkel + (90 - k\winkel) * 2 End If .marke1 k\speed = k\speed + .05 Delete s End If Next If k\x <= 0 Then k\winkel = k\winkel + (90 - k\winkel) * 2 If k\x >= 780 Then k\winkel = k\winkel + (90 - k\winkel) * 2 If k\y <= 0 Then k\winkel = k\winkel * (-1) If k\y >= 600 Then gameover = 1 Next If playerX <= 0 Then playerX = playerX + playerSpeed If playerX >= 710 Then playerX = playerX - playerSpeed End Function Function Timer() If MilliSecs() >= Timer + 10000 Then For k = Each kugel k\winkel = k\winkel + Rand(150) Next Timer = MilliSecs() End If End Function Viel Spaß beim Spielen ![]() MfG, sheldon |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ist ja nicht schlecht. Es gibt aber noch ein paar Dinge die ich gerne kritisieren würde:
- Die Winkeländerung sollte nicht genau nach 10 Sekunden passieren, sondern von mir aus, nach 10 Sekunden und nach einer Steinkollision, damit ein anfliegender Ball nicht kurz vor dem Abschlagen seine Richtung ändert. - Man sollte den Abprallwinkel auch abhängig vom Auftreffpunkt des Schlägers machen. - Einmal hatte ich ein so flachen Abprallwinkel, dass der Ball einmal hin und ker gesprungen ist, und dabei lediglich etwa 1,5 Ballhöhen Höhe erreichte. Gleich danach hatte ich ein absolut senkrechten Ballverlauf am rechten Bildschirmrand. Anscheinend bereits außerhalb der Bildschirmgrenze, da der Ball auch nach mehreren 10 Sekundentakten da nicht mehr raus wollte. - Es kommt vor, dass der Ball manchmal mehrere Steine in der Reihe abschlägt. Da müsste also die Kollisionskontrolle noch etwas optimiert werden. |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
![]() |
sheldon |
![]() Antworten mit Zitat ![]() |
---|---|---|
hectic hat Folgendes geschrieben: - Die Winkeländerung sollte nicht genau nach 10 Sekunden passieren, sondern von mir aus, nach 10 Sekunden und nach einer Steinkollision, damit ein anfliegender Ball nicht kurz vor dem Abschlagen seine Richtung ändert.
Wenn der Ball einen ziemlich flachen Winkel hat, dann braucht das ja ewig. Zitat: - Man sollte den Abprallwinkel auch abhängig vom Auftreffpunkt des Schlägers machen.
Und wie? Je weiter links, desto flacher, je weiter rechts, desto steiler? Oder wie meinst du ? Ansonsten werde ich mal schauen, wie ich es noch verbessern kann ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group