Enterhaken
Übersicht

![]() |
garretBetreff: Enterhaken |
![]() Antworten mit Zitat ![]() |
---|---|---|
Im Rahmen eines Projektes ist dieser Enterhaken bzw. Greifhaken-Code entstanden. Die Spielfigur kann auf Tastendruck einen Enterhaken verschießen und sich so an große Kisten heranziehen oder kleine Kisten zu sich ziehen. Bewegung über Pfeiltasten.
Der Link zum gesamten Paket (gigantische 5 KB): https://www.blitzforum.de/upload/file.php?id=2735 Enthalten sind der frei verwendbare Quelltext und die "geborgten" Beispielgrafiken. Der Quelltext: Code: [AUSKLAPPEN] ; ###################################################################################### ; ; Enterhaken by garret ; ; Der Enterhaken wird vom Spieler abgeschossen. Trifft er eine Kiste, zieht sich der Spieler an diese heran. ; ; Zustände des Enterhakens (Variable EnterhakenAbgeschossen) ; ; 0 = Enterhaken momentan nicht eingesetzt ; 1 = Enterhaken auf dem Hinweg ; 2 = Enterhaken auf dem Rückweg ; 3 = Enterhaken erwischt Kiste und der Spieler zieht sich zu dieser ; 4 = Enterhaken erwischt kleine Kiste und der Spieler zieht diese zu sich ; ; ###################################################################################### Graphics 640, 480, 32, 2 : SetBuffer BackBuffer() : AppTitle "Enterhaken" SeedRnd MilliSecs() ; IMG_Spielerer laden IMG_Spieler = LoadAnimImage("Spieler.png",24,32,0,4) IMG_Kiste = LoadImage("Kiste.png") IMG_Kiste_klein = LoadImage("Kiste_klein.png") ; Spielerkoordinaten festlegen SpielerX = 308 SpielerY = 224 ; Kisten werden als Types gespeichert Type T_Kiste Field Typ Field x, y Field Breite, Hoehe; Breite und Höhe End Type ; zufällige große Kisten erstellen For i = 1 To 7 k.T_Kiste = New T_Kiste k\Typ = 1 k\x = Rand(0, 600) k\y = Rand(0, 440) k\Breite = 32 k\Hoehe = 32 Next ; zufällige kleine Kisten erstellen For i = 1 To 7 k.T_Kiste = New T_Kiste k\Typ = 2 k\x = Rand(0, 600) k\y = Rand(0, 440) k\Breite = 24 k\Hoehe = 24 Next ; Timer erzeugen Timer = CreateTimer(60) ; Hauptschleife Repeat : Cls ; Spieler bewegen If EnterhakenAbgeschossen = False If KeyDown(200) SpielerRichtung = 0 SpielerY = SpielerY - 1 EndIf If KeyDown(208) SpielerRichtung = 2 SpielerY = SpielerY + 1 EndIf If KeyDown(203) SpielerRichtung = 3 SpielerX = SpielerX - 1 EndIf If KeyDown(205) SpielerRichtung = 1 SpielerX = SpielerX + 1 EndIf EndIf ; Enterhaken einsetzen If KeyHit(57); Leertaste If EnterhakenAbgeschossen = 0 EnterhakenX = SpielerX + 12; Enterhakenkoordinaten werden an die Spielergrafik angepasst EnterhakenY = SpielerY + 16 EnterhakenAbgeschossen = 1 EndIf EndIf ; Enterhaken bewegen If EnterhakenAbgeschossen = 1; Enterhaken auf Hinweg Select SpielerRichtung Case 0 EnterhakenY = EnterhakenY - 5 Case 2 EnterhakenY = EnterhakenY + 5 Case 1 EnterhakenX = EnterhakenX + 5 Case 3 EnterhakenX = EnterhakenX - 5 End Select ; Entfernungsprobe If (Abs(SpielerX - EnterhakenX) + Abs(SpielerY - EnterhakenY)) > 300 EnterhakenAbgeschossen = 2; Enterhaken maximal ausgerollt und kommt nun zurück EndIf ElseIf EnterhakenAbgeschossen = 2; Enterhaken auf Rückweg Select SpielerRichtung Case 0 EnterhakenY = EnterhakenY + 5 Case 2 EnterhakenY = EnterhakenY - 5 Case 1 EnterhakenX = EnterhakenX - 5 Case 3 EnterhakenX = EnterhakenX + 5 End Select ; Enterhaken wieder beim Spieler If (SpielerX+12 = EnterhakenX) And (SpielerY+16 = EnterhakenY) EnterhakenAbgeschossen = 0 EndIf ElseIf EnterhakenAbgeschossen = 3; Enterhaken hat Kiste erwischt und Spieler zieht sich ran Select SpielerRichtung Case 0 SpielerY = SpielerY - 5 Case 2 SpielerY = SpielerY + 5 Case 1 SpielerX = SpielerX + 5 Case 3 SpielerX = SpielerX - 5 End Select ; sobald der Spieler eine Kiste berührt, wird der Enterhaken deaktiviert For k.T_Kiste = Each T_Kiste If ImagesCollide(IMG_Spieler,SpielerX,SpielerY,SpielerRichtung, IMG_Kiste, k\x,k\y,0) EnterhakenAbgeschossen = 0 Next EndIf ; Enterhaken zeichnen If EnterhakenAbgeschossen Oval EnterhakenX - 2, EnterhakenY - 2, 4, 4, 0 Line SpielerX + 12, SpielerY + 16, EnterhakenX, EnterhakenY EndIf ; Kisten verwalten For k.T_Kiste = Each T_Kiste ; Enterhaken erwischt Kiste If EnterhakenAbgeschossen = 1 Select k\Typ Case 1; große Kiste, Spieler zieht sich ran If RectsOverlap(EnterhakenX,EnterhakenY,1,1, k\x,k\y,32,32) EnterhakenAbgeschossen = 3 EndIf Case 2; kleine Kiste, diese wird herangezogen If RectsOverlap(EnterhakenX,EnterhakenY,1,1, k\x,k\y,24,24) EnterhakenAbgeschossen = 4 EndIf End Select EndIf ; Enterhaken hat Kiste erwischt und diese wird herangezogen If EnterhakenAbgeschossen = 4 If RectsOverlap(EnterhakenX,EnterhakenY,1,1, k\x,k\y,24,24) Select SpielerRichtung Case 0 EnterhakenY = EnterhakenY + 5 k\y = k\y + 5 Case 2 EnterhakenY = EnterhakenY - 5 k\y = k\y - 5 Case 1 EnterhakenX = EnterhakenX - 5 k\x = k\x - 5 Case 3 EnterhakenX = EnterhakenX + 5 k\x = k\x + 5 End Select EndIf ; trifft die Kiste den Spieler, wird der Enterhaken deaktiviert If ImagesCollide(IMG_Spieler,SpielerX,SpielerY,SpielerRichtung, IMG_Kiste_klein, k\x,k\y,0) EnterhakenAbgeschossen = 0 EndIf ; Kisten zeichnen Select k\Typ Case 1; große Kiste DrawBlock IMG_Kiste, k\x, k\y Case 2; kleine Kiste DrawBlock IMG_Kiste_klein, k\x, k\y End Select Next ; Spieler zeichnen DrawImage IMG_Spieler, SpielerX, SpielerY, SpielerRichtung WaitTimer Timer Flip : Until KeyHit(1) : End Der einzige mir bekannte Bug, begründet durch die Verwendung von Collide-Befehlen (die ich eigentlich meide, aber hier waren sie praktisch), entsteht, wenn man sich an eine Kiste heranziehen will und dabei bereits eine andere berührt. Dann berührt die Spielfigur schon eine Kiste und zieht sich nicht weiter. Durch geeignetes Leveldesign oder Codeoptimierung kann man das aber umgehen. MfG garret |
||
- Zuletzt bearbeitet von garret am Di, März 04, 2008 20:21, insgesamt 2-mal bearbeitet
![]() |
mabox |
![]() Antworten mit Zitat ![]() |
---|---|---|
nur blöd das der Upload nicht existiert... | ||
Fujitsu-Siemens Laptop, 2Ghz Intel Core2Duo Prozessor, 2GB Ram, 120GB Festplatte, ATI Mobility Radeon X1400, Windows Vista Ultimate
www.mausoft.de.tl Dönerfresser Homepage |
![]() |
Thorsten |
![]() Antworten mit Zitat ![]() |
---|---|---|
https://www.blitzforum.de/upload/file.php?id=2735 | ||
![]() |
garret |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich hatte es ein zweites Mal hochgeladen. | ||
>>nec aspera terrent<< (Auch Widerwärtigkeiten schrecken nicht) |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group