Bumerang
Übersicht

![]() |
garretBetreff: Bumerang |
![]() Antworten mit Zitat ![]() |
---|---|---|
Dieses Mal stelle ich meinen Bumerang vor, den es in 3 unterschiedlichen Varianten gibt. Ich erlaube mir mal, keine Screenshots zu zeigen, da man nur die Spielerfigur und den Bumerang sieht.
Das Paket (5,8 KB) enthält die Quelltexte und Grafiken: https://www.blitzforum.de/upload/file.php?id=2752 Variante 1 (gerade Flugbahn): Code: [AUSKLAPPEN] ; ###################################################################################### ; ; Bumerangvariante 1 by garret ; ; Bumerang fliegt gerade aus und kehrt schräg zum Spieler zurück ; ; ; ###################################################################################### Graphics 640, 480, 32, 2 : SetBuffer BackBuffer() : AppTitle "Bumerangvariante 1" ; Grafiken laden IMG_Spieler = LoadAnimImage("Spieler.png",24,32,0,4) IMG_Bumerang= LoadAnimImage("Bumerang.png",16,16,0,4) ; Spielerkoordinaten festlegen SpielerX = 308 SpielerY = 224 ; Geschwindigkeit des Bumerangs BumerangSpeed = 5 ; Timer erzeugen Timer = CreateTimer(40) ; Hauptschleife Repeat : Cls ; Spieler bewegen If KeyDown(200) SpielerRichtung = 0 SpielerY = SpielerY - 2 EndIf If KeyDown(208) SpielerRichtung = 2 SpielerY = SpielerY + 2 EndIf If KeyDown(203) SpielerRichtung = 3 SpielerX = SpielerX - 2 EndIf If KeyDown(205) SpielerRichtung = 1 SpielerX = SpielerX + 2 EndIf ; Bumerang einsetzen If KeyHit(57); Leertaste If BumerangGeworfen = 0 BumerangX = SpielerX + 12; Bumerangkoordinaten werden an die Spielergrafik angepasst BumerangY = SpielerY + 16 BumerangRichtung = SpielerRichtung BumerangGeworfen = 1 EndIf EndIf ; Bumerang bewegen If BumerangGeworfen = 1; Bumerang auf Hinweg Select BumerangRichtung Case 0 BumerangY = BumerangY - BumerangSpeed Case 2 BumerangY = BumerangY + BumerangSpeed Case 1 BumerangX = BumerangX + BumerangSpeed Case 3 BumerangX = BumerangX - BumerangSpeed End Select ; Entfernungsprobe: Bumerang hat maximale Reichweite erreicht und kommt nun zurück If (Abs(SpielerX - BumerangX) + Abs(SpielerY - BumerangY)) > 300 BumerangGeworfen = 2 ; Bumerang auf dem Rückweg ElseIf BumerangGeworfen = 2 If BumerangX < SpielerX + 12 BumerangX = BumerangX + BumerangSpeed If BumerangX > SpielerX + 12 BumerangX = BumerangX - BumerangSpeed If BumerangY < SpielerY + 16 BumerangY = BumerangY + BumerangSpeed If BumerangY > SpielerY + 16 BumerangY = BumerangY - BumerangSpeed ; Bumerang wieder beim Spieler If RectsOverlap(SpielerX,SpielerY, 24,32, BumerangX,BumerangY, 16,16) BumerangGeworfen = 0 EndIf ; Bumerang zeichnen If BumerangGeworfen DrawImage IMG_Bumerang, BumerangX, BumerangY, BumerangFrame BumerangFrame = BumerangFrame + 1 If BumerangFrame = 4 BumerangFrame = 0 EndIf ; Spieler zeichnen DrawImage IMG_Spieler, SpielerX, SpielerY, SpielerRichtung ; Anleitung If BumerangGeworfen Text 0,0, "Bumerang geworfen" Else Text 0,0, "Bumerang mit Leertaste werfen" EndIf WaitTimer Timer Flip : Until KeyHit(1) : End Variante 2 (mit Maus Wegpunkte bestimmen): Code: [AUSKLAPPEN] ; ###################################################################################### ; ; Bumerang by garret ; ; Bumerang folgt Pfad, der von der Maus vorgegeben wurde ; ; ; 1. Leertaste drücken ; 2. mit Maus Wegpunkte festlegen ; 3. Leertaste loslassen ; ; ###################################################################################### Graphics 640, 480, 32, 2 : SetBuffer BackBuffer() : AppTitle "Bumerangvariante 2" ; Grafiken laden IMG_Spieler = LoadAnimImage("Spieler.png",24,32,0,4) IMG_Bumerang= LoadAnimImage("Bumerang.png",16,16,0,4) ; Spielerkoordinaten festlegen SpielerX = 308 SpielerY = 224 ; Geschwindigkeit des Bumerangs BumerangSpeed = 5 ; Bumerang erhält Wegpunkte Type BumerangWegpunkt Field Nr Field X, Y End Type ; Timer erzeugen Timer = CreateTimer(40) ; Hauptschleife Repeat : Cls ; Spieler bewegen If KeyDown(200) SpielerRichtung = 0 SpielerY = SpielerY - 2 EndIf If KeyDown(208) SpielerRichtung = 2 SpielerY = SpielerY + 2 EndIf If KeyDown(203) SpielerRichtung = 3 SpielerX = SpielerX - 2 EndIf If KeyDown(205) SpielerRichtung = 1 SpielerX = SpielerX + 2 EndIf ; mit dem Bumerang wird "anvisiert" If KeyDown(57) If BumerangBereit = 0 BumerangBereit = 1 AlterWegpunktX = SpielerX + 12; Bumerangkoordinaten werden an Spielergraik angepasst AlterWegpunktY = SpielerY + 16 BumerangX = SpielerX + 12 BumerangY = SpielerY + 16 AnzahlWegpunkte = AnzahlWegpunkte + 1 EndIf EndIf If BumerangBereit = 1 If AnzahlWegpunkte < 30; Maximale Anzahl der Wegpunkte ist auf 30 gesetzt ; neuer Wegpunkt ist weit genug vom alten weg, darum wird ein neuer erstellt If Sqr((MouseX() - AlterWegpunktX)^2 + (MouseY() - AlterWegpunktY)^2) > 20; Schrittweite der Wegpunkte = 20 BWp.BumerangWegpunkt = New BumerangWegpunkt BWp\Nr = AnzahlWegpunkte ; Wegpunktkoordinaten BWp\X = MouseX() BWp\Y = MouseY() AlterWegpunktX = BWp\X; Anfangswegpunkt wird zugewiesen AlterWegpunktY = BWp\Y AnzahlWegpunkte = AnzahlWegpunkte + 1 EndIf EndIf ; Leertaste wird losgelassen, Bumerang wird geworfen If Not KeyDown(57) BumerangGeworfen = 1; Bumerang auf Hinweg BumerangBereit = 2 ; Bereitschaft nicht vorhanden, aber nicht 0 (sonst könnte man zwischendurch neu werfen) EndIf EndIf ; Bumerang bewegen If BumerangGeworfen = 1 ; Bumerang läuft die erstellten Wegpunkte ab For BWp.BumerangWegpunkt = Each BumerangWegpunkt If BWp\Nr = AktuelleWegpunktNummer + 1 If BumerangX < BWp\X BumerangX = BumerangX + BumerangSpeed If BumerangX > BWp\X BumerangX = BumerangX - BumerangSpeed If BumerangY < BWp\Y BumerangY = BumerangY + BumerangSpeed If BumerangY > BWp\Y BumerangY = BumerangY - BumerangSpeed ; befindet sich der Bumerang in der Nähe des Wegpunktes, gilt dieser als abgearbeitet If Sqr((BumerangX - BWp\X)^2 + (BumerangY - BWp\Y)^2) < (BumerangSpeed + 1) AktuelleWegpunktNummer = AktuelleWegpunktNummer + 1 Delete BWp; und wird gelöscht EndIf EndIf Next ; Bumerang hat alle Wegpunkte gefunden und kehrt nun zurück If (AktuelleWegpunktNummer + 1) = AnzahlWegpunkte BumerangGeworfen = 2 ; Bumerang kehrt zum Spieler zurück ElseIf BumerangGeworfen = 2 If BumerangX < SpielerX + 12 BumerangX = BumerangX + BumerangSpeed If BumerangX > SpielerX + 12 BumerangX = BumerangX - BumerangSpeed If BumerangY < SpielerY + 16 BumerangY = BumerangY + BumerangSpeed If BumerangY > SpielerY + 16 BumerangY = BumerangY - BumerangSpeed ; Bumerang wieder beim Spieler If RectsOverlap(SpielerX,SpielerY,24,32, BumerangX,BumerangY,16,16) ; Ausgangszustand wieder herstellen BumerangGeworfen = 0 BumerangBereit = 0 AnzahlWegpunkte = 0 AktuelleWegpunktnummer = 0 EndIf EndIf ; Wegpunkte zeichnen For BWp.BumerangWegpunkt = Each BumerangWegpunkt Oval BWp\X - 2,BWp\Y - 2, 4,4, 0 Next ; Bumerang zeichnen If BumerangGeworfen DrawImage IMG_Bumerang, BumerangX, BumerangY, BumerangFrame BumerangFrame = BumerangFrame + 1 If BumerangFrame = 4 BumerangFrame = 0 EndIf ; Spieler zeichnen DrawImage IMG_Spieler, SpielerX, SpielerY, SpielerRichtung ; Anleitung If BumerangBereit = 1 Text 0,0, "Bumerang bereit zum Werfen, Wegpunkte festlegen!" ElseIf BumerangGeworfen Text 0,0, "Bumerang geworfen" ElseIf BumerangGeworfen = 0 Text 0,0, "Bumerang mit Leertaste aktivieren" EndIf WaitTimer Timer Flip : Until KeyHit(1) : End Variante 3 ("echte" Flugkurve): Code: [AUSKLAPPEN] ; ###################################################################################### ; ; Bumerangvariante 3 by garret ; ; Bumerang fliegt echten Kreis ; ; ; ###################################################################################### Graphics 640, 480, 32, 2 : SetBuffer BackBuffer() : AppTitle "Bumerangvariante 3" ; Grafiken laden IMG_Spieler = LoadAnimImage("Spieler.png",24,32,0,4) IMG_Bumerang= LoadAnimImage("Bumerang.png",16,16,0,4) ; Spielerkoordinaten festlegen SpielerX = 308 SpielerY = 224 ; Geschwindigkeit des Bumerangs BumerangSpeed = 5; je größer, desto weniger Zwischenschritte ; Timer erzeugen Timer = CreateTimer(40) ; Hauptschleife Repeat : Cls ; Spieler bewegen If BumerangBereit <> 1 If KeyDown(200) SpielerRichtung = 0 SpielerY = SpielerY - 2 EndIf If KeyDown(208) SpielerRichtung = 2 SpielerY = SpielerY + 2 EndIf If KeyDown(203) SpielerRichtung = 3 SpielerX = SpielerX - 2 EndIf If KeyDown(205) SpielerRichtung = 1 SpielerX = SpielerX + 2 EndIf EndIf ; mit dem Bumerang wird "anvisiert" If KeyDown(57) If BumerangBereit = 0 BumerangBereit = 1 BumerangX = SpielerX + 12; Bumerangkoordinaten werden an Spielergraik angepasst BumerangY = SpielerY + 16 BumerangRadius# = 50 ; Mindestradius des Bumerangs RadiusErweiterung# = 1.05 ; Der Wachstumsfaktor des Radius' EndIf EndIf If BumerangBereit = 1 ; Der Radius des Wurfkreises wird bestimmt durch die Dauer des Tastendrucks If BumerangRadius > 500 RadiusErweiterung = (1 / 1.05) If BumerangRadius < 50 RadiusErweiterung = 1.05 BumerangRadius = BumerangRadius * RadiusErweiterung ; Die Wurfkreise müssen an die Blickrichtung angepasst werden Select SpielerRichtung Case 0; hoch Oval (SpielerX + 12) - BumerangRadius, (SpielerY + 16) - (BumerangRadius/2), BumerangRadius,BumerangRadius,0 Case 1; rechts Oval (SpielerX + 12) - (BumerangRadius/2), (SpielerY + 16) - BumerangRadius, BumerangRadius,BumerangRadius,0 Case 2; runter Oval (SpielerX + 12), (SpielerY + 16) - (BumerangRadius/2), BumerangRadius,BumerangRadius,0 Case 3; links Oval (SpielerX + 12) - (BumerangRadius/2), (SpielerY + 16), BumerangRadius,BumerangRadius,0 End Select ; Leertaste wird losgelassen, Bumerang wird geworfen If Not KeyDown(57) BumerangGeworfen = 1; Bumerang auf Hinweg BumerangBereit = 2 ; Bereitschaft nicht vorhanden, aber nicht 0 (sonst könnte man zwischendurch neu werfen) BumerangRichtung = SpielerRichtung Select BumerangRichtung ; Mittelkoordinaten des Kreises und Anfangswinkel werden festgelegt Case 0; hoch BumerangMitteX = SpielerX + 12 - (BumerangRadius/2) BumerangMitteY = SpielerY + 16 StartWinkel = 0 Case 1; rechts BumerangMitteX = SpielerX + 12 BumerangMitteY = SpielerY + 16 - (BumerangRadius/2) StartWinkel = 90 Case 2; runter BumerangMitteX = SpielerX + 12 + (BumerangRadius/2) BumerangMitteY = SpielerY + 16 StartWinkel = 180 Case 3; rechts BumerangMitteX = SpielerX + 12 BumerangMitteY = SpielerY + 16 + (BumerangRadius/2) StartWinkel = 270 End Select Winkel = Startwinkel EndIf EndIf If BumerangGeworfen = 1 ; Winkel erhöhen Winkel = Winkel - BumerangSpeed ; Bumerang positionieren BumerangX = BumerangMitteX + Cos(Winkel) * (BumerangRadius/2) BumerangY = BumerangMitteY + Sin(Winkel) * (BumerangRadius/2) ; Bumerang kann erst nach bestimmter Strecke gefangen werden, sonst ist er sofort zurück beim Spieler (RectsOverlap) If Abs(StartWinkel - Winkel) > 90 BumerangFangen = True If BumerangFangen = True ; Bumerang wieder beim Spieler If RectsOverlap(SpielerX,SpielerY,24,32, BumerangX,BumerangY,16,16) ; Ausgangszustand wieder herstellen BumerangGeworfen = 0 BumerangBereit = 0 BumerangFangen = False Winkel = 0 EndIf EndIf EndIf ; Bumerang zeichnen If BumerangGeworfen DrawImage IMG_Bumerang, BumerangX, BumerangY, BumerangFrame BumerangFrame = BumerangFrame + 1 If BumerangFrame = 4 BumerangFrame = 0 EndIf ; Spieler zeichnen DrawImage IMG_Spieler, SpielerX, SpielerY, SpielerRichtung ; Anleitung If BumerangGeworfen Text 0,0, "Bumerang geworfen" ElseIf BumerangBereit = 1 Text 0,0, "Bumerangradius bestimmen" ElseIf BumerangGeworfen = 0 Text 0,0, "Bumerang mit Leertaste werfen" EndIf WaitTimer Timer Flip : Until KeyHit(1) : End Viel Spaß damit! MfG, garret |
||
>>nec aspera terrent<< (Auch Widerwärtigkeiten schrecken nicht) |
![]() |
Dottakopf |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hey lustige sache!
Vorallem Varriante 2 hat mich ziemlich an "Zelda twilight princess" erinnert, da konnte man auch mit seinem Bumemrang verschiedene wegpunkte angeben. mfg Dottakopf |
||
Rechtschreibfehler gelten der allgemeinen Belustigung! |
- Zuletzt bearbeitet von Dottakopf am Fr, März 07, 2008 15:59, insgesamt einmal bearbeitet
![]() |
garret |
![]() Antworten mit Zitat ![]() |
---|---|---|
Bis auf Variante 3 kommen die so auch alle in Zelda-Teilen vor ![]() Variante 2 war aber viel mehr von Phantom Hourglass inspiriert, denn da gibt man eine Strecke mit dem Touchpen vor, die der Bumerang dann entlangfliegt. MfG garret |
||
>>nec aspera terrent<< (Auch Widerwärtigkeiten schrecken nicht) |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group