ImagesCollide und delete...Hilfe...SOS

Übersicht BlitzBasic Beginners-Corner

Gehe zu Seite Zurück  1, 2, 3

Neue Antwort erstellen

Midimaster

BeitragSo, Jan 03, 2010 16:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Also, einer deiner Fehler ist, dass sich in der WHILE/WEND des Spiels eine Funktion befindet. Die muss ans Ende Deines Spiel-Codes. Funktionen müssen imer an das Ende des Codes.


So zerschneidest Du den Spielteil in drei Teile:


Alles was vor WHILE steht, kommt vor die neue Entscheidungs-WHILE/WEND

In die neue Funktion GAME() kommt nur, was bei dir zwischen WHILE und WEND steht.

Die Stelle "FUNCTTION bis ENDFUNCTION" kommt ganz an das Ende des Codes (sogar noch nach "END")
  • Zuletzt bearbeitet von Midimaster am So, Jan 03, 2010 16:34, insgesamt einmal bearbeitet
 

MarieBube

BeitragSo, Jan 03, 2010 16:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Chester, wenn ich deinen Code starten möchte erscheint "Image does not exist"

Ich hab schon versucht, das Tutorial zu lesen, aber das ist ungefähr so, als ob man mir einen griechischen Text vor die Nase legen würde und ich davon eine Zusammenfassung schreiben soll...

Midimaster

BeitragSo, Jan 03, 2010 16:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Werf mal den gesamten Code in einem Stück hier rein, ich werd ihn dir umsortieren....
 

MarieBube

BeitragSo, Jan 03, 2010 16:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Also ich hab ja zwei Codes.

1. Startseite
Code: [AUSKLAPPEN]
Graphics  1000,600
SetBuffer BackBuffer ()


landschaft2=LoadImage("landschaft2.bmp")
ScaleImage landschaft2,1.2,1;

hungry=LoadImage("hungry.bmp")
ScaleImage hungry,1,1;
MaskImage hungry,255,255,255;

mammoth1=LoadImage("Mammoth1.bmp")
ScaleImage mammoth1,1,1;
MaskImage mammoth1,255,255,255;


While Not KeyDown (1)
Cls;


DrawImage landschaft2,x,y;
DrawImage hungry,120,5;
DrawImage mammoth1,400,250;


If Blink Then Text 20,200 , "Bewege Mammuth mit der linken und der rechten Pfeiltaste und fang die Cookies auf."
   font = LoadFont("Comic Sans MS",25,15)
   SetFont Font
   Color 237,126,218
   If Blinktimer < MilliSecs () Then
        Blink = 1 - Blink
        Blinktimer = MilliSecs () + 600
End If


Flip

Wend


2. das eigenltiche Spiel
Code: [AUSKLAPPEN]
AppTitle "Mammuth hat Hunger!"

PlayMusic("ice.wav")

SeedRnd MilliSecs()

Const width=10,height=10,depth=1
Global points=0,mx=100,my=550

Graphics 1024,768
SetBuffer BackBuffer()

landschaft=LoadImage("Landschaft.bmp")

i=MilliSecs()
zeit=i-m

;bilder hochladen
mammoth=LoadImage("Mammoth3.bmp")
ScaleImage mammoth,0.75,0.75
MaskImage mammoth,255,255,255

cookie=LoadImage("cookie2.bmp")
ScaleImage cookie,0.04,0.04
MaskImage cookie,255,255,255

;type erstellen
Type cookie
   Field x
   Field y
   Field gfx
   Field punkte
   Field speed
End Type

;counter
counter = 1
fontno=LoadFont("verdana",50)
SetFont fontno


While Not KeyDown(1)
   Color Rnd(256),Rnd(256),Rnd(256)

     counter = counter + 1

   If counter>45 Then
      c.cookie = New cookie
      c\x = Rnd(1,950)
      c\y = 0
      c\gfx = cookie
      c\speed = Rnd(1.5,6)
      c\punkte = z
      counter = 0
   EndIf

      ;steuerung
   If KeyDown(205)
      mx=mx+10
   EndIf
   If KeyDown(203)
      mx=mx-10
   EndIf
 
  Cls

   DrawImage landschaft,x,y
   DrawImage Mammoth,mx,my

  If mx>820 Then
      mx=820
   EndIf
   
   If mx<0 Then
      mx=0
   EndIf
   
   For c.cookie=Each cookie
      DrawImage c\gfx,c\x,c\y
      c\y = c\y + c\speed
      If ImagesCollide(Mammoth,mx,my,0,c\gfx,c\x,c\y,0) Then
         Delete c.Cookie
         points = points+10
      EndIf
   Next
   
   ;anzeige
   Text 10,0,"Zeit: "
   Text 10,40,"Leben: "
   Text 10,80,"Punkte: "+points
   
   ;counter
   ;Text 960,720,counter



Flip
Wend
End

Midimaster

BeitragSo, Jan 03, 2010 16:54
Antworten mit Zitat
Benutzer-Profile anzeigen
hier kommt das Gemisch, hebe bitte vorsichtshalber die Originale auf und nenne diesen Code hier anders beim Speichern:

BlitzBasic: [AUSKLAPPEN]
AppTitle "Mammuth hat Hunger!"

PlayMusic("ice.wav")

SeedRnd MilliSecs()

Const width=10,height=10,depth=1
Global points=0,mx=100,my=550

Graphics 1024,768
SetBuffer BackBuffer()

landschaft=LoadImage("Landschaft.bmp")
landschaft2=LoadImage("landschaft2.bmp")
ScaleImage landschaft2,1.2,1;

hungry=LoadImage("hungry.bmp")
ScaleImage hungry,1,1;
MaskImage hungry,255,255,255;

mammoth1=LoadImage("Mammoth1.bmp")
ScaleImage mammoth1,1,1;
MaskImage mammoth1,255,255,255;





i=MilliSecs()
zeit=i-m

;bilder hochladen
mammoth=LoadImage("Mammoth3.bmp")
ScaleImage mammoth,0.75,0.75
MaskImage mammoth,255,255,255

cookie=LoadImage("cookie2.bmp")
ScaleImage cookie,0.04,0.04
MaskImage cookie,255,255,255

;type erstellen
Type cookie
Field x
Field y
Field gfx
Field punkte
Field speed
End Type

;counter
counter = 1
fontno=LoadFont("verdana",50)
SetFont fontno


;neue Entscheidungsschleife
While Not KeyDown(1)
If Game_State=0 Then
DerTitel
ElseIf Game_State=1 Then
DasSpiel
EndIf
Wend

End


Function DasSpiel()

While Not KeyDown(1)
Color Rnd(256),Rnd(256),Rnd(256)

counter = counter + 1

If counter>45 Then
c.cookie = New cookie
c\x = Rnd(1,950)
c\y = 0
c\gfx = cookie
c\speed = Rnd(1.5,6)
c\punkte = z
counter = 0
EndIf

;steuerung
If KeyDown(205)
mx=mx+10
EndIf
If KeyDown(203)
mx=mx-10
EndIf

Cls

DrawImage landschaft,x,y
DrawImage Mammoth,mx,my

If mx>820 Then
mx=820
EndIf

If mx<0 Then
mx=0
EndIf

For c.cookie=Each cookie
DrawImage c\gfx,c\x,c\y
c\y = c\y + c\speed
If ImagesCollide(Mammoth,mx,my,0,c\gfx,c\x,c\y,0) Then
Delete c.Cookie
points = points+10
EndIf
Next

;anzeige
Text 10,0,"Zeit: "
Text 10,40,"Leben: "
Text 10,80,"Punkte: "+points

;counter
;Text 960,720,counter



Flip
Wend
End Function


Function DerTitel()
While Not KeyDown (1)
Cls;


DrawImage landschaft2,x,y;
DrawImage hungry,120,5;
DrawImage mammoth1,400,250;


If Blink Then Text 20,200 , "Bewege Mammuth mit der linken und der rechten Pfeiltaste und fang die Cookies auf."
font = LoadFont("Comic Sans MS",25,15)
SetFont Font
Color 237,126,218
If Blinktimer < MilliSecs () Then
Blink = 1 - Blink
Blinktimer = MilliSecs () + 600
End If


Flip

Wend
End Function


ich hab noch gar nix geändert. Dehalb wirds auch noch nicht gleich loslaufen. Aber die Umsortierung ist schon mal richtig.

Jetzt können wieder alle über den Gesamt-Code diskutieren. Zunächst muss die Abfrage nach dem Game_State rein. Dazu setzt du ans Ende der "DerTitel"-Funktion:


BlitzBasic: [AUSKLAPPEN]
...
Flip
Wend
Game_State=1
End Function


und an das Ende der Spiel-Funktion

BlitzBasic: [AUSKLAPPEN]
...
Flip
Wend
Game_State=0
End Function


Wenn Du auf die Enter reagieren willst dann in der "DerTitel" so:

BlitzBasic: [AUSKLAPPEN]
...
Flip
If KeyDown(28) Then
Game_State=1
Return
EndIf
Wend
End
End Function
  • Zuletzt bearbeitet von Midimaster am Mo, Jan 04, 2010 0:08, insgesamt einmal bearbeitet

Chester

BeitragSo, Jan 03, 2010 17:17
Antworten mit Zitat
Benutzer-Profile anzeigen
@Midimaster: Du hast den selben Fehler wie ich gemacht, da jetzt die Bilder in den Funktionen benutzt werden, müssen die Images zu Beginn als Global geladen werden:


BlitzBasic: [AUSKLAPPEN]
AppTitle "Mammuth hat Hunger!"

PlayMusic("ice.wav")

SeedRnd MilliSecs()

Const width=10,height=10,depth=1
Global points=0,mx=100,my=550

Graphics 1024,768
SetBuffer BackBuffer()

Global landschaft=LoadImage("Landschaft.bmp")

Global i=MilliSecs()
zeit=i-m

;bilder hochladen
Global mammoth=LoadImage("Mammoth3.bmp")
ScaleImage mammoth,0.75,0.75
MaskImage mammoth,255,255,255

Global cookie=LoadImage("cookie2.bmp")
ScaleImage cookie,0.04,0.04
MaskImage cookie,255,255,255


;type erstellen
Type cookie
Field x
Field y
Field gfx
Field punkte
Field speed
End Type

;counter
Global counter = 1
Global fontno=LoadFont("verdana",50)
SetFont fontno


Global landschaft2=LoadImage("landschaft2.bmp")
ScaleImage landschaft2,1.2,1;

Global hungry=LoadImage("hungry.bmp")
ScaleImage hungry,1,1;
MaskImage hungry,255,255,255;

Global mammoth1=LoadImage("Mammoth1.bmp")
ScaleImage mammoth1,1,1;
MaskImage mammoth1,255,255,255;

Global Game_State
While Not KeyDown(1)
Cls
If Game_State = 0 Then
Menue()
Else
Game()
EndIf
Flip
Wend
End


Function Menue()

DrawImage landschaft2,x,y;
DrawImage hungry,120,5;
DrawImage mammoth1,400,250;


If Blink Then Text 20,200 , "Bewege Mammuth mit der linken und der rechten Pfeiltaste und fang die Cookies auf."
font = LoadFont("Comic Sans MS",25,15)
SetFont Font
Color 237,126,218
If Blinktimer < MilliSecs () Then
Blink = 1 - Blink
Blinktimer = MilliSecs () + 600
End If

;funktion

If KeyHit(28) Then Game_State = 1

End Function



Function Game()
Color Rnd(256),Rnd(256),Rnd(256)

counter = counter + 1

If counter>45 Then
c.cookie = New cookie
c\x = Rnd(1,950)
c\y = 0
c\gfx = cookie
c\speed = Rnd(1.5,6)
c\punkte = z
counter = 0
EndIf

;steuerung
If KeyDown(205)
mx=mx+10
EndIf
If KeyDown(203)
mx=mx-10
EndIf



;funktion

DrawImage landschaft,x,y
DrawImage Mammoth,mx,my

If mx>820 Then
mx=820
EndIf

If mx<0 Then
mx=0
EndIf

For c.cookie=Each cookie
DrawImage c\gfx,c\x,c\y
c\y = c\y + c\speed
If ImagesCollide(Mammoth,mx,my,0,c\gfx,c\x,c\y,0) Then
Delete c.Cookie
points = points+10
EndIf
Next

;anzeige
Text 10,0,"Zeit: "
Text 10,40,"Leben: "
Text 10,80,"Punkte: "+points

;counter
;Text 960,720,counter

;funktion
End Function


@Marie:

Wenn du darin etwas nicht verstehst, dann schreib es doch einfach in seinen Kritikthread. Ich bin mir sicher, dass er es so schreiben kann, dass auch du es verstehst Wink
  • Zuletzt bearbeitet von Chester am So, Jan 03, 2010 23:43, insgesamt einmal bearbeitet

Midimaster

BeitragSo, Jan 03, 2010 17:22
Antworten mit Zitat
Benutzer-Profile anzeigen
@ chester

ja, stimmt da gäbe es auch noch einige andere Variablen, die jetzt zu überdenken wären. Aber MarieBube meldet sich gar nicht und ich wollte nicht zu viel ohne sie umstellen. Am Ende erkennt sie ihren eigenen Code nicht mehr !
Ich ändere das gleich noch und werfe eine zweite korrigierte Version rein.

p.s. denkst Du die Tutorials sind wirklich noch zu kompliziert?

@mariebube

Hier nun die korrigierte Version:

folgende Änderungen habe ich vorgenommen:

1.
alle Bilder und Fonts sind GLOBAL, damit Du sie auch in Unterprogrammen butzen kannst.

2.
Der LOADFONT im "DerTitel" muss nur 1x geladen werden.

3.
Die für das Spiel nötigen Startwerte werden zu Beginn der DasSpiel jedesmal neue auf Ihren Anfangswert gesetzt.

BlitzBasic: [AUSKLAPPEN]
AppTitle "Mammuth hat Hunger!"

PlayMusic("ice.wav")

SeedRnd MilliSecs()

Graphics 1024,768
SetBuffer BackBuffer()



;bilder hochladen
Global Mammoth=LoadImage("Mammoth3.bmp")
ScaleImage mammoth,0.75,0.75
MaskImage mammoth,255,255,255

Global Cookie=LoadImage("cookie2.bmp")
ScaleImage cookie,0.04,0.04
MaskImage cookie,255,255,255

Global Landschaft=LoadImage("Landschaft.bmp")
Global Landschaft2=LoadImage("landschaft2.bmp")
ScaleImage landschaft2,1.2,1;

Global Hungry=LoadImage("hungry.bmp")
ScaleImage hungry,1,1;
MaskImage hungry,255,255,255;

Global Mammoth1=LoadImage("Mammoth1.bmp")
ScaleImage mammoth1,1,1;
MaskImage mammoth1,255,255,255;




;type erstellen
Type cookie
Field x
Field y
Field gfx
Field punkte
Field speed
End Type

;sonst Variable
Global Counter = 1
Const width=10,height=10,depth=1
Global points=0,mx=100,my=550

;????
i=MilliSecs()
zeit=i-m

;Fonts
Global Fontno=LoadFont("verdana",50)
Global Font = LoadFont("Comic Sans MS",25,15)


;neue Entscheidungsschleife
While Not KeyDown(1)
If Game_State=0 Then
DerTitel
ElseIf Game_State=1 Then
DasSpiel
EndIf
Wend

End


Function DasSpiel()
Counter=1
SetFont Fontno
Points=0
mx=100
my=550

While Not KeyDown(1)
Color Rnd(256),Rnd(256),Rnd(256)

counter = counter + 1

If counter>45 Then
c.cookie = New cookie
c\x = Rnd(1,950)
c\y = 0
c\gfx = cookie
c\speed = Rnd(1.5,6)
c\punkte = z
counter = 0
EndIf

;steuerung
If KeyDown(205)
mx=mx+10
EndIf
If KeyDown(203)
mx=mx-10
EndIf

Cls

DrawImage landschaft,x,y
DrawImage Mammoth,mx,my

If mx>820 Then
mx=820
EndIf

If mx<0 Then
mx=0
EndIf

For c.cookie=Each cookie
DrawImage c\gfx,c\x,c\y
c\y = c\y + c\speed
If ImagesCollide(Mammoth,mx,my,0,c\gfx,c\x,c\y,0) Then
Delete c.Cookie
points = points+10
EndIf
Next

;anzeige
Text 10,0,"Zeit: "
Text 10,40,"Leben: "
Text 10,80,"Punkte: "+points

;counter
;Text 960,720,counter



Flip
Wend
End Function


Function DerTitel()
While Not KeyDown (1)
Cls

DrawImage landschaft2,x,y;
DrawImage hungry,120,5;
DrawImage mammoth1,400,250;


If Blink Then Text 20,200 , "Bewege Mammuth mit der linken und der rechten Pfeiltaste und fang die Cookies auf."
SetFont Font
Color 237,126,218
If Blinktimer < MilliSecs () Then
Blink = 1 - Blink
Blinktimer = MilliSecs () + 600
End If

Flip
Wend
End Function
 

MarieBube

BeitragSo, Jan 03, 2010 21:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Es tut mir sehr leid, dass ich mich nicht gemeldet habe, aber ich musste etwas sehr dringendes erledigen.
Ich find das so super, dass ihr euch hier die ganze Mühe macht. Nochmal DANKE. Ich muss mir das jetzt erstmal angucken Very Happy
Unf von mir aus, Midimaster, kannst du mir den Code auch so umschreiben, dass ich ihn gar nicht mehr erkennen würde Razz. Ich wünsch mir nur noch, dass das klappt...

Also bei dem letzten Code, den Chester gepostet hat klappt das mit dem Wechseln der Seiten beim Drücken von Enter reibungslos Smile Aber dann fallen die Cookies nicht mehr runter. Sonst super.

Beim letzten Code, den Midimaster gepostet hat, wird die Startseite gezeigt, aber beim Drücken von Enter wechselt es nicht zum Spiel.

Midimaster

BeitragSo, Jan 03, 2010 22:59
Antworten mit Zitat
Benutzer-Profile anzeigen
zu dem ENTER hab ich dir aber noch was zusätzliches geschrieben. siehe letzte post von mir.

Momentan kommst Du aus den Startbild mit ESC raus.

war übrigens auch die ganze zeit weg und komme jetzt erst wieder...bin jetzt die ganze Zeit da. Wann muss das fertig sein?
 

Lion

BeitragSo, Jan 03, 2010 23:04
Antworten mit Zitat
Benutzer-Profile anzeigen
tschuldige, aber sind solche schulaufgaben nicht dazu da, dass man was selbst macht und auch was lernt?

Zitat:
Unf von mir aus, Midimaster, kannst du mir den Code auch so umschreiben, dass ich ihn gar nicht mehr erkennen würde Razz. Ich wünsch mir nur noch, dass das klappt...

>.<
Intel Core 2 Quad 4x2.66 ghz - 4gb ddr2 - nvidia GeForce GTX660 2gb
Intel Atom 1x1.83 ghz - 2gb ddr2 - intel GMA 3150 256mb
AMD A10-5750M 4x2.5 ghz - 8 gb ddr4 - AMD R9 M290x

Midimaster

BeitragSo, Jan 03, 2010 23:12
Antworten mit Zitat
Benutzer-Profile anzeigen
@Lion
das kannste jetzt aber so nicht mehr sagen...das Mädel hängt seit Samstag an dem Code und hat hier echt viel interesse gezeigt und auch was gelernt. Irgendwann hat sie jetzt die Belohung verdient, dass das ganze mal anläuft....

wir haben ihr heute abend den ganzen code noch mal umstrukturiert, obwohl fast alles fertig war (alles von ihr gemacht!) und nun war es mehr recht als billig ihr anzubieten, alle aus der Umstrukturierungg nötig werdenden Änderungen auch noch gleich durchzuführen.

was sie da sagt, klingt auch nicht unbedingt nach mangeldem arbeitseifer, sondern nach Frustration und Ermüdung.

und ich muss ihn auch gar nicht mehr umschreiben, weil sie sooo nah dran ist.

@mariebube

du hast es gleich....!!!!

Chester

BeitragSo, Jan 03, 2010 23:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Nimm Midimaster's Code und schau in dir mal genauer an. Vergleiche dabei am Besten mit dem was er zu der Enter Taste geschrieben hat.

Bevor du dich aber beschwerst, dass es nicht geht: Midimaster hat 26 geschrieben, richtig wäre 28 Wink


Die andere Variante wäre in meinem Code Counter global zu machen, aber besser du liest dir vorher erst mal das Kapitel durch.


Edit: @Midimaster: Also ich finde deine Tutorial eigentlich überhaupt nicht zu schwer, sofern ich dies nach neun Jahren BB richtig einschätzen kann, im Gegenteil soger besser und ausführlicher erklärt, als in den Rob Tutorials, mit denen ich es damals lernte. Nur Marie schrieb, dass sie nur Bahnhof versteht.

Midimaster

BeitragMo, Jan 04, 2010 0:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke Chester,


habs gleich korrigiert.
 

MarieBube

BeitragMo, Jan 04, 2010 10:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Heeey, wisst ihr was??? DAS KLAPPT Very Happy Very Happy Very Happy Very Happy Very Happy Very Happy juhuuuuuuuuuu!!!
Ihr könnt euch nicht vorstellen, wie glücklich ich grad bin Very Happy

Vielen Dank Midimaster und Chester! Ohne euch wäre ich verloren...
Very Happy Very Happy

Dice of Darkness

BeitragMo, Jan 04, 2010 14:02
Antworten mit Zitat
Benutzer-Profile anzeigen
1.) Nimm mal bitte in Zukunft nicht so übertrieben viele Smileys.

2.) Ich hab dir mal über PN eine Nachricht geschickt, vielleicht hilft dir das weiter (das öffnest du, indem du oben rechts unter "Eingeloggt als ..." auf "Private Nachrichten" klickst).

MfG Dice of Darkness
Gratis Spiele, Musik, Tools
 

MarieBube

BeitragDi, Jan 05, 2010 21:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey, irgendwie muss ich meine Freude doch zum Ausdruck bringen -.-
Ohne Smiley wirkt das nicht so gut, weißt du.

Aber danke für deine Nachricht!

BladeRunner

Moderator

BeitragDi, Jan 05, 2010 21:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Mit smilies ist das wie mit Satzzeichen: Es sind keine Herdentiere. Ein lachender Smily reicht vollkommen um Freude zu zeigen.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Gehe zu Seite Zurück  1, 2, 3

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group