Probleme mit Types, Catchem Klon

Übersicht BlitzBasic BlitzPlus

Neue Antwort erstellen

 

D@NieL

Betreff: Probleme mit Types, Catchem Klon

BeitragDo, Apr 20, 2006 20:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi alle!!!

Sorry erstmal, dass ich, wie viele andere, wieder mit Type Problem komme...

Ich habe gerade meinen Ping Pong Klon fertiggestellt und wollte jetzt einen Catchem Klon machen. Kennt das jemand? Das ist ein Spiel in dem man verschiedene Bilder mit einem balken auffangen musst. Ich wusste dass ich die Types brauche und habs zuerst alleine versucht aber irgendwie kapier ich das net...

Jetzt mein Problem: Ich will das in jedem Level (levelübergang muss ich auch noch schauen wie das geht Razz) ca. 10 gleiche bilder hinunterfallen.
Jetzt muss ich das mit types machen um sie dann unten wenn man sie fängt wieder deleten zu können. Jedes bild hat verschiedene x koordinaten.

Code: [AUSKLAPPEN]
Graphics 1400,1050,36,1
SetBuffer BackBuffer()

Global player = LoadAnimImage("player.bmp",200,180,0,3)
MaskImage player,255,0,255

Global ball1 = LoadImage ("level1_testfigure.bmp")
MaskImage ball1,255,0,255

Global player_pos_x = 0
Global player_pos_y = 860

Global ball1_pos_x = Rnd(0,1200) ; Für die Zwei soll ja son Type entstehen
Global ball1_pos_y = 0

; so ungefähr oder?
Type images
 Field x = Rnd(0,1200)
 Field y = 0
 Field image = ;was kommt hier hin?
End Type

Global frame = 0

; Hauptschleife
Repeat
Cls

   Moveplayer()
   Drawplayer()
   Drawthings_level1()
   Drop()

Flip

Until KeyHit (1)
End

Function Moveplayer()
   player_pos_x = MouseX()
   If player_pos_x >1200 Then player_pos_x = 1200
End Function

Function Drawplayer()
   DrawImage player,player_pos_x,player_pos_y,frame
End Function

Function drawthings_level1()
   DrawImage ball1,ball1_pos_x, ball1_pos_y ; bis jetzt hab ich nur einen ball der nach unten fliegt - Kollisionen kann ich ja erst nachdem ich types gemacht habe wenn ich deleten kann
End Function

Function Drop()
If MouseHit(1) Then
Start = 1
   ElseIf Start = 1 Then
      ElseIf ball1_pos_y < 1000 Then
      ball1_pos_y = ball1_pos_y + 1
EndIf
End Function


Hoffe das ihr mir mit dem Each + New + etc. helfen könnt. Bitte auch erklären nicht nur Code Smile will ja was lernen

Lg D@niel

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragDo, Apr 20, 2006 21:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

Ich habe deine Code durchgesehen und ein paar Bemerkungen reingeschrieben, ob das jetzt so ist wie du dir das vorgestellt hast, weiß ich nicht!
Types hab ich dir eingebaut, damit du siehst wie man damit arbeitet

Code: [AUSKLAPPEN]
;Diese krumme Auflösung wird von den meißten Graka´s nicht unterstüzt
; besser 1024x768; 800x600; 1280x1024; usw..
Graphics 1400,1050,36,1
SetBuffer BackBuffer()

Global player = LoadAnimImage("player.bmp",200,180,0,3)
MaskImage player,255,0,255

Global ball1 = LoadImage ("level1_testfigure.bmp")
MaskImage ball1,255,0,255

Global player_pos_x = 0
Global player_pos_y = 860
Global Start
;das ist auch über , da du ja types benutzt
;Global ball1_pos_x = Rnd(0,1200) ; Für die Zwei soll ja son Type entstehen
;Global ball1_pos_y = 0

; so ungefähr oder?
Type images
 Field x = Rnd(0,1200)
 Field y = 0

 ;Braucht du wenn es mehr bilder werden
 ;denn dann kannst du das Handle des Bildes kopieren
 Field image = ;was kommt hier hin?
 ;
End Type

;neue Bälle erstellen 10 Stück
For t= 1 To 10
   TypeHandle.images = New images ; Hier wird ein neues Type erstellt
   ; und hier die Werte eingegeben
   TypeHandle\x =  Rand(0,1200) ; Rnd normal nur für Floats(Kommazahlen)
   TypeHandle\y =  0 ; ich denke das hier ein auch ein Zufallswert im Minus Bereich rein soll
   TypeHandle\Image = ball1
Next


Global frame = 0

; Hauptschleife
Repeat
Cls

   Moveplayer()
   Drawplayer()
   Drawthings_level1()
   Drop()
   If First images = Null Then End ; keine mehr da dann ende
Flip

Until KeyHit (1)
End

Function Moveplayer()
   player_pos_x = MouseX()
   ;
 
   If player_pos_x >1200 Then player_pos_x = 1200
End Function

Function Drawplayer()
   DrawImage player,player_pos_x,player_pos_y,frame
End Function

Function drawthings_level1()
   For TypeHandle.images = Each images ; alle durchgehen und zeichnen
      DrawImage TypeHandle\image,TypeHandle\x,TypeHandle\y
   Next
   ;DrawImage ball1,ball1_pos_x, ball1_pos_y ; bis jetzt hab ich nur einen ball der nach unten fliegt - Kollisionen kann ich ja erst nachdem ich types gemacht habe wenn ich deleten kann
End Function

Function Drop() ; das hier ist etwas komplex ????
   If MouseHit (1) Then START = 1

   If START = 1 Then ; erst weitersetzt wenn gestartet wurde
      For TypeHandle.images = Each images ; auch alle durchgehen und weitersetzten
         TypeHandle\y = TypeHandle\y +1
         If TypeHandle\y > 1000 Then Delete TypeHandle ; ggf löschen
      Next
   End If
End Function
[BB2D | BB3D | BB+]
 

D@NieL

BeitragFr, Apr 21, 2006 8:15
Antworten mit Zitat
Benutzer-Profile anzeigen
hmmmm..... danke!
Ist ne gute erklärung Smile

Ne frage: muss ich jetzt das image machn oder net?
Weil bei mir stimmt der code jetzt irgendwie net!!

Code: [AUSKLAPPEN]
Graphics 1400,1050,36,1
SetBuffer BackBuffer()

Global player = LoadAnimImage("player.bmp",200,180,0,4)
MaskImage player,255,0,255

Global ball1 = LoadImage ("level1_testfigure.bmp")
MaskImage ball1,255,0,255

Global player_pos_x = 0
Global player_pos_y = 860

Global player_frame = 0

Global score = 0

Global start = 0

Global fallen = ball1_pos_y = ball1_pos_y + 1

Type images
   Field x = Rnd(0,1200)
   Field y = 0
End Type

For t = 1 To 10
   TypeHandle.images = New images
   TypeHandle\x# = Rnd(0,1200)
   TypeHandle\y# = 0
Next

; hauptschleife
Repeat
Cls

If start = 0 Then
Text 0,0, "Drücken Sie die linke Maustaste um das Spiel zu starten!"
EndIf

If MouseHit(1) Then
start = 1
EndIf

If start = 1 Then
frame = 0
DrawImage player,player_pos_x,player_pos_y,player_frame

   Moveplayer()
   Drawplayer()
   Drawthings_level1()
   Drop()
   Kollision()
   Checkpoints()
   
EndIf

Flip

Until KeyHit (1)
End

Function Moveplayer()
   player_pos_x = MouseX()
   If player_pos_x >1200 Then player_pos_x = 1200
End Function

Function Drawplayer()
   DrawImage player,player_pos_x,player_pos_y,player_frame
End Function

Function drawthings_level1()
   For TypeHandle.images = Each images
      DrawImage ball1,Typehandle\x,typehandle\y
   Next
End Function

Function Drop()
If fallen = 1 Then
   ball1_pos_y = ball1_pos_y + 1
EndIf
   If ball1_pos_y < 1010 Then
   For TypeHandle.images = Each images
      Typehandle\y = Typehandle\y + 1
      If Typehandle\y > 1010 Then Delete Typehandle
   Next
   EndIf
   If ball1_pos_y = 1010 Then
      DrawImage player,player_pos_x,player_pos_y,player_frame
      player_frame = player_frame + 1
      ball1_pos_x = Rnd(0,1200)
      ball1_pos_y = 0
   EndIf
      If player_frame = 3 Then
      Text 400,400, "Achtung - Neues Spiel"
      player_frame = 0
      score = 0
      EndIf
End Function

Function Kollision()
If ImagesCollide(ball1,ball1_pos_x, ball1_pos_y,0, player,player_pos_x,player_pos_y,frame) Then
   ball1_pos_x = Rnd(0,1200)
   ball1_pos_y = 0
   score = score + 10
EndIf
End Function

Function Checkpoints()
   Text 10,10,"Punkte: "
   Text 70,10, score
End Function


Sry für den langen Code!!!!

Lg
 

D@NieL

BeitragFr, Apr 21, 2006 8:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Ups noch vergessen was jetzt mein problem ist:

die kollision funtzt irgendwie net
egal wies ich mit delete etc. umstell... kannst du mir das auch noch erklären? bittä! Smile

(Vorher waren noch # falsch - hab ich selbst wieder weggemacht)

Thanks for helping me Smile

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragFr, Apr 21, 2006 8:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo, hab das nochmal abgeändert um es auch so lauffähig zu machen!
Es werde jetzt keine Bilder geladen , sondern im Code Standart Bilder erstellt!
BlitzBasic: [AUSKLAPPEN]

;Diese krumme Auflösung wird von den meißten Graka´s nicht unterstüzt
; besser 1024x768; 800x600; 1280x1024; usw..
Graphics 1280 ,1024,32,1
SetBuffer BackBuffer ()
Global player = Image (100 ,20, $ff0000) ; Aternatives Bild erstellen
;Global player = LoadAnimImage("player.bmp",200,180,0,3)
;MaskImage player,255,0,255
Global ball1 = Image (20 ,20, $00ff00) ; Aternatives Bild erstellen
;Global ball1 = LoadImage ("level1_testfigure.bmp")
;MaskImage ball1,255,0,255
Global player_pos_x = 0
Global player_pos_y = 860
Global Start
Global score
;das ist auch über , da du ja types benutzt
;Global ball1_pos_x = Rnd(0,1200) ; Für die Zwei soll ja son Type entstehen
;Global ball1_pos_y = 0
; so ungefähr oder?
Type images
Field x
Field y#
;Braucht du wenn es mehr bilder werden
;denn dann kannst du das Handle des Bildes kopieren
Field image; = ;was kommt hier hin?
Field Speed
;
End Type
MakeBall () ;neue Bälle erstellen 10 Stück
Global frame = 0
; Hauptschleife
Repeat
Cls
Moveplayer ()
Drawplayer ()
Drawthings_level1 ()
Drop ()
Kollision()
Checkpoints()
If First images = Null Then Makeball ; keine mehr da dann neue
Flip
Until KeyHit (1)
End

Function Moveplayer ()
player_pos_x = MouseX ()
;
If player_pos_x > 1200 Then player_pos_x = 1200
End Function

Function Drawplayer ()
DrawImage player,player_pos_x,player_pos_y,frame
End Function

Function drawthings_level1 ()
For TypeHandle.images = Each images ; alle durchgehen und zeichnen
DrawImage TypeHandle\image,TypeHandle\x,TypeHandle\y
Next
;DrawImage ball1,ball1_pos_x, ball1_pos_y ; bis jetzt hab ich nur einen ball der nach unten fliegt - Kollisionen kann ich ja erst nachdem ich types gemacht habe wenn ich deleten kann
End Function

Function Drop () ; das hier ist etwas komplex ????
If MouseHit (1) Then START = 1
If START = 1 Then ; erst weitersetzt wenn gestartet wurde
For TypeHandle.images = Each images ; auch alle durchgehen und weitersetzten
TypeHandle\y = TypeHandle\y + TypeHandle\Speed
If TypeHandle\y > 1000 Then Delete TypeHandle ; ggf löschen
Next
End If
End Function

;neue Bälle erstellen 10 Stück

Function MakeBall ()
For t = 1 To 10
TypeHandle.images = New images ; Hier wird ein neues Type erstellt
; und hier die Werte eingegeben
TypeHandle\x = Rand (0 ,1200) ; Rnd normal nur für Floats(Kommazahlen)
TypeHandle\y = 0 ; ich denke das hier ein auch ein Zufallswert im Minus Bereich rein soll
TypeHandle\Image = ball1
TypeHandle\Speed = Rnd (1 ,2)
Next
End Function

Function Kollision ()
For TypeHandle.images = Each images
If ImagesCollide (TypeHandle\image,TypeHandle\x, TypeHandle\y,0, player,player_pos_x,player_pos_y,frame) Then
Delete TypeHandle
score= score +10
End If
Next
End Function
Function Checkpoints()
Text 10,10,"Punkte: "
Text 70,10, score
End Function

; damit keine Bilder geladen werden müssen
Function Image (x,y,f) ; Erstellt Pseudo grafiken
img = CreateImage (x,y)
SetBuffer ImageBuffer (img)
Color 0 ,0,f
Rect 0 ,0,x,y,1
SetBuffer BackBuffer ()
Color 255 ,255,255
Return img
End Function

Neue Antwort erstellen


Übersicht BlitzBasic BlitzPlus

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group