Probleme beim Frosch-Frisst-Fliege-Spiel

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

1989Moni1989

Betreff: Probleme beim Frosch-Frisst-Fliege-Spiel

BeitragSo, Mai 28, 2006 14:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!
Jetzt arbeite ich gerade an einem Frosch-frisst-Fliege-Spiel. Also unten der Frosch, oben die Fliege (oder in meinem Fall Schmetterling) und er schießt etwas in die Höhe und wenn er die Fliege getroffen hat, dann bekommt man einen Punkt. Perfekt, geht alles soweit.

1. Problem:
Nur ist die Fliege so eingestellt, dass sie von den Begrenzungen Abprallt und das tut sie auch, aber nicht immer. Auf den Seiten klappt alles, weil da ich nur programmiert hab, dass sie nicht weiter hinaus darf. Aber oben hab ich die Begrenzung mit einem Bild gemacht. Und manchmal fliegt die fliege einfach durch und manchmal prallt sie richtig ab, was könnte da nicht stimmen?

2. Problem:
Ich hab versucht die Zeit auf eine Minute einzustellen und in der Hauptschleife mit delay gearbeitet, sodass die Zeit immer um eine Sekunde weniger wird. Aber bei delay wartet der Computer ja immer diese Sekunde, erst dann macht er auch mit dem übrigen weiter. Also das kann man nicht verwenden. Wie könnte man sonst einen Countdown erstellen? Er sollte im oberen rechten Eck angebracht sein.
Lg Moni


So, hier ist noch der Code:

Code: [AUSKLAPPEN]

Graphics 1024, 768, 16, 1
SetBuffer BackBuffer()

;Globale Daten

SeedRnd(MilliSecs())
Global time = 61
Global punkte = 0
Global yfrog = 768 - 84
Global xfrog = 1024/2
Global xschme = Rand(0, 1024)
Global yschme = Rand(0, 600)
Global winkel
Global yzunge = 680
Global abweichung
Global schmetterlinge = 0

Global Frosch = LoadImage("images\Frosch.bmp")
MidHandle Frosch

Global Schmetterling = LoadImage("images\Schmetterlinge.bmp")
MidHandle Schmetterling
MaskImage Schmetterling, 255, 255, 255

Global Zunge = LoadImage("images\Zunge.bmp")
MaskImage Zunge, 255, 255, 255

Global Wando = LoadImage("images\oben.bmp")
MidHandle Wando

Global Wandu = LoadImage("images\unten.bmp")
MidHandle Wandu

Flip

neuerschmetterling

;Hauptschleife

Repeat
Cls

If KeyHit(57) Then
yzunge = 680
EndIf

If KeyDown(57) Then
DrawImage Zunge, xfrog, yzunge
yzunge = yzunge - 5
EndIf

DrawBlock Frosch, xfrog, yfrog
DrawImage Wando, 512, 23
DrawImage Wandu, 512, 745
If KeyDown(203) Then xfrog = xfrog - 2
If KeyDown(205) Then xfrog = xfrog + 2

xschme = xschme + Cos(winkel)*5
yschme = yschme - Sin(winkel)*5

If xschme < 30 Then
winkel = 180 - winkel
EndIf

If xschme > 1024 - 30 Then
winkel = 180 - winkel
EndIf

If ImagesCollide(Wando, 512, 23, 0, Schmetterling, xschme, yschme, 0) Then
winkel = 360 - winkel
abweichung = 2 * (0 - xschme)
winkel = winkel + abweichung
EndIf

If yschme > 500 Then
winkel = 360 - winkel
EndIf

If KeyHit(157) Then
neuerschmetterling
EndIf

If winkel > 360 Then winkel = winkel - 360
If winkel < 0 Then winkel = winkel + 360
DrawImage Schmetterling, xschme, yschme

If ImagesCollide(Schmetterling, xschme, yschme, 0, Zunge, xfrog, yzunge, 0) Then
punkte = punkte + 1
Delay(1000)
WaitKey
neuerschmetterling
EndIf

Color 0, 0, 0
Text 30, 742, (punkte + " Punkte!")


Flip
Forever

;Ende des Spiels

Color 0, 0, 0
Print "Sorry, die Zeit ist um! Du hast " + punkte + " Punkt(e)!"

Delay (2000)
WaitKey
End

; Funktionen
Function neuerschmetterling()
xschme=1024/2:yschme=768/2
If Rand(0,1) = 1 Then winkel = Rand(105,45) Else winkel = Rand(315, 255)
End Function

Goodjee

BeitragSo, Mai 28, 2006 14:48
Antworten mit Zitat
Benutzer-Profile anzeigen
statt delay benutze einen milisecs timer
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/
 

1989Moni1989

BeitragSo, Mai 28, 2006 14:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Goodjee hat Folgendes geschrieben:
statt delay benutze einen milisecs timer

Wie mach ich denn einen Milisecs timer???

Goodjee

BeitragSo, Mai 28, 2006 14:52
Antworten mit Zitat
Benutzer-Profile anzeigen
benutze mal die suche, aber so ungefähr funzts: einmal die zeit mit milisecs nehmen, dann jedes mal testen ob die jetzige zeit z.B 100 mehr ist als die erste...wenn ja diese zeit wieder speichern
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/
 

1989Moni1989

BeitragSo, Mai 28, 2006 14:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Goodjee hat Folgendes geschrieben:
benutze mal die suche, aber so ungefähr funzts: einmal die zeit mit milisecs nehmen, dann jedes mal testen ob die jetzige zeit z.B 100 mehr ist als die erste...wenn ja diese zeit wieder speichern


Danke, ich werds gleich mal probieren!!!!!! Wink

Kabelbinder

Sieger des WM-Contest 2006

BeitragSo, Mai 28, 2006 18:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi

Wegen dem 'durchdasbildfliegen'

Wenn ein Objekt zu schnell (und/oder zu klein) ist, kann es sein, dass es durch ein ganzes Hindernis hindurch fliegt. In Diesem Fall berührt es das Hindernis auch überhaupt nicht und so wird keine Kollision festgestellt.

Da kann man sich mit einer Line-Kollision helfen:

Du überprüfst statt dem Punkt , an dem die Fliege gerade ist allein, eine ganze Linie zwischen dem Punkt, an dem die Fliege zuvor war und dem Punkt, an dem sie jetzt ist. Wenn diese Line durch die Wand geht, gab es eine Kollision.

Kannst du damit was anfangen?


Wenn du es gern einfacher hättest, kannst du auch einfach die Wand oder die Fliege dicker zeichnen, oder die Fliege verlangsamen. Dann müsste es auch gehen...
<Wing Avenger Download> ◊◊◊ <Macrophage Download>

x-pressive

BeitragMo, Mai 29, 2006 9:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Iwo, das geht auch viel simpler (wenn deine "Bregrenzungen" quasi rechteckig sind und z.B. den Bildschirmrand markieren). Um abzufragen, ob die Fliege den oberen Rand überschritten hat (ganz egal, wie schnell sie ist), musst du nur ihre Geschwindigkeit mit einbeziehen, z.B. so:

Code: [AUSKLAPPEN]
Global flySpeedY# = 5.0 ; Y-Geschwindigkeit der Fliege
Global flyY%            ; Aktuelle Y-Position der Fliege
Global flyMinY%         ; Oberer Rand, an dem die Fliege umkehren soll


Abfrage (vereinfacht):

Code: [AUSKLAPPEN]
; Fliege hat den Rand überschritten?
If (flyY- flySpeed) < flyMinY Then flyY = flyMinY : flySpeed = flySpeed * (-1)
• BLITZ SHOWCASE:
PARTICLE CANDY • PARTICLE CANDY FOR iPHONE • SPRITE CANDY • DON'T GET ANGRY! 2-3 • CLICK CLACK XL

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group