Mein Programm klappt nicht:(

Übersicht BlitzBasic Beginners-Corner

Gehe zu Seite Zurück  1, 2, 3  Weiter

Neue Antwort erstellen

Kleiner satan

BeitragSa, Jul 08, 2006 21:57
Antworten mit Zitat
Benutzer-Profile anzeigen
jo mch ich!
achja...zu dem code...die vögel beamen sich immernoch an den anfang!

d-bug

BeitragSa, Jul 08, 2006 22:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, dann lad mal deine Bilder hoch, damit man das besser testen kann. Aber bitte als Zip. Wink Weil so trocken kann man sich schlecht da rein denken!

cheers

Kleiner satan

BeitragSa, Jul 08, 2006 22:05
Antworten mit Zitat
Benutzer-Profile anzeigen
ok hab ich gemacht!

http://kleinersatan.kl.funpic.de/bilder.zip

d-bug

BeitragSa, Jul 08, 2006 22:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Also, hilft dir wahrscheinlich nicht viel weiter, aber so funktionierts.

Code: [AUSKLAPPEN]
Graphics 1024,768,16,1
SetBuffer BackBuffer()
SeedRnd MilliSecs()

Global v1 =LoadImage("vogel1.bmp")
Global v2 =LoadImage("vogel2.bmp")
Global kreuz=LoadImage("kreuz.bmp")
Global hintergrund=LoadImage("hintergrund.bmp")

Dim vogel(20,3)

;---------------------------------------------------------------------------------------
; erstmal einen Haufen Vögeln die Koordianten zuweisen
; und vorrallem eine Grundrichtung setzen, das hattest du vergessen.
; Grundkoordinaten sind extra weit auseinander
; (-1024 links und +1024 rechts) gesetzt damit die Vögel
; auch zufällig erscheinen, und nicht alle an der gleichen stelle.
;---------------------------------------------------------------------------------------
For i = 0 To 20
 vogel(i,0) = Rand(1,2)
 If vogel(i,0) = 1 Then
   vogel(i,1) = Rand(-ImageWidth(v1),-1024) ;Zeile korrigiert...
 Else
   vogel(i,1) = Rand(1024,2048)
 EndIf
 vogel(i,2) = Rand(0,500)
Next

Repeat

  TileImage hintergrund, 1, 1


  For i = 0 To 20

    ;---------------------------------------------------------------------------------------
    ; Vogel fliegt von links nach rechts. Wenn er den rechten
    ; Rand erreicht hat wird seine Koordinate neu berechnetet
    ; und die Richtung umgekehrt.
    ;---------------------------------------------------------------------------------------
    If vogel(i,0) = 1
        vogel(i,1) = vogel(i,1) + 1
        If vogel(i,1) > 1024 Then
           vogel(i,0) = 2
           vogel(i,2) = Rand(0,500)
        EndIf
        DrawImage v1, vogel(i,1), vogel(i,2)

    ;------------------------------------------------------------------------------------------
    ; Vogel fliegt von rechts nach links. Wenn er den linken Rand um seine
    ; eigene Breite überschritten hat wird seine Koordinate neu berechnetet
    ; und die Richtung umgekehrt.
    ;------------------------------------------------------------------------------------------
    ElseIf vogel(i,0) = 2
        vogel(i,1) = vogel(i,1) - 1
        If vogel(i,1) < -ImageWidth(v1) Then
           vogel(i,0) = 1
           vogel(i,2) = Rand(0,500)
        EndIf
        DrawImage v2, vogel(i,1), vogel(i,2)
    EndIf
  Next

  DrawImage kreuz, MouseX(), MouseY()

  Flip : Cls

Until KeyHit(1)
End


Du must eben noch ein bisschen mit den Rand-Werten spielen (außer an vogel(i,0) ), damit die Lücken nicht zu groß sind.

Viel Spaß noch damit
  • Zuletzt bearbeitet von d-bug am Sa, Jul 08, 2006 23:36, insgesamt einmal bearbeitet

Kleiner satan

BeitragSa, Jul 08, 2006 23:20
Antworten mit Zitat
Benutzer-Profile anzeigen
vogel(i,1) = Rand(-ImageWidth(v1),1024)

die zeile raff ich noch nit!
da zeigt der auch wieder ne meldung an das das bild nit existiert

d-bug

BeitragSa, Jul 08, 2006 23:33
Antworten mit Zitat
Benutzer-Profile anzeigen
oops, mach mal aus:
Code: [AUSKLAPPEN]
vogel(i,1) = Rand(-ImageWidth(v1),1024)

ein:
Code: [AUSKLAPPEN]
vogel(i,1) = Rand(-ImageWidth(v1),-1024)


Also, die Zeile sagt nur der X-Koordinate, dass sie einen Zufallwert
zwischen '0- der Breite des Images' und -1024 haben soll, damit
die Vögel nicht innerhalb des Screens erscheinen. -1024 kann man
ruhig anpassen, ist nur dazu gedacht, dass die Vögel nicht so dicht
aufeinander hängen. '0- der Breite des Images', weil die Image-Koordinate
immer oben links ist. Es sei denn du benutzt ql:Midhandle, was du übrigens
mal mit dem Fadenkreuz machen solltest, denn es ist nicht mittig auf den
Mauskoordinaten!

Das das Bild nicht existiert, kann nicht sein, weil der code
bei mir anstandslos alles geladen hat und ohne Fehlermeldung
funktionierte.

Kleiner satan

BeitragSo, Jul 09, 2006 12:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Klappen tut es aber trotzdem nit:(

so sieht MEIN script zur zeit aus:

Code: [AUSKLAPPEN]
Graphics 1024,768,16,1
SetBuffer BackBuffer()

Global v1 = LoadImage("vogel1.bmp")
Global v2 = LoadImage("vogel2.bmp")
Global kreuz = LoadImage("kreuz.bmp")
Global hintergrund = LoadImage("hintergrund.bmp")
Global shot = LoadSound("shot.wav")

Dim vogel(20)
Dim vogelx(20)
Dim vogely(20)

For n=1 To 20
 vogel(n) = 3
Next

Repeat
Cls
TileImage hintergrund, 1,1

;setzen
Rand1 = Rnd(1,50)
If Rand1 = 1 Then
 For i=1 To 20
  If vogel(i) = 3 Then
   i = 20
   rand2 = Rnd(1,2)
   vogel(i) = rand2
   If vogel(i) = 1 Then vogelx(i) = 1
   If vogel(i) = 2 Then vogelx(i) = 1024
   rand3 = Rnd(1,500)
   vogely(i) = 1
  EndIf
 Next
EndIf

;erneuern
For z=1 To 20
 Select vogel(z)
  Case 1: vogelx(z) = vogelx(z) + 1
  Case 2: vogelx(z) = vogelx(z) - 1
  Case 3:
 End Select
Next

;ausgeben
For f=1 To 20
 Locate vogelx(f),vogely(f)
 Print"vogel"
Next

Flip
Until KeyHit(1)
End


aber diese dummen vögel verschwinden immer wieder!

Kabelbinder

Sieger des WM-Contest 2006

BeitragSo, Jul 09, 2006 13:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich weis, warum du die Bilder nicht reinladen kannst. das ist eindeutig ein jpeg-Format.

Mich anzulügen bringt dir hier garnichts.
Egal, so musste ich's halt selber rausfinden.

offne die Bilder mal mit Paint und speicher sie dann nochmal vernünftig als .bmp ab.


So und jetzt zu dem anderen Problem:

Die Vögel fliegen alle auf einem Haufen, weil du sie ALLE mit einer For-Schleife GLEICHZEITIG setzt.
Deshalb Tauchen die Vögel alle gleichzeitg auf und verschwinden
auch alle gleichzeitig wieder.

Die Lögung Benutzt keine For-Schleife, sondern eine Zähl-Variable, die nach jedem setzen um eins erhöht wird, und wenn sie bei 20 angekommen ist, wieder auf 0 gesetzt wird.

etwa so:
Code: [AUSKLAPPEN]
Graphics 1024,768,16,2
SetBuffer BackBuffer()

Global v1 = LoadImage("vogel1.bmp")
Global v2 = LoadImage("vogel2.bmp")
Global kreuz = LoadImage("kreuz.bmp")
Global hintergrund = LoadImage("hintergrund.bmp")
Global shot = LoadSound("shot.wav")

Dim vogel(20)
Dim vogelx(20)
Dim vogely(20)

For n=1 To 20
vogel(n) = 3
Next

Repeat
Cls
TileImage hintergrund, 1,1

;setzen
Rand1 = Rnd(1,50)
If Rand1 = 1 Then

rand2 = Rnd(1,2)
vogel(nr) = rand2
If vogel(nr) = 1 Then vogelx(nr) = 1
If vogel(nr) = 2 Then vogelx(nr) = 1024
rand3 = Rnd(1,500)
vogely(nr) = 1
EndIf

If nr = 20 Then ;(maximaler Dim-wert)
nr = 0
Else
nr = nr + 1
EndIf

;erneuern
For z=1 To 20
Select vogel(z)
Case 1: vogelx(z) = vogelx(z) + 1
Case 2: vogelx(z) = vogelx(z) - 1
Case 3:
End Select
Next

;ausgeben
For f=1 To 20
Select vogel(f)
Case 1
DrawImage v1,vogelx(f),vogely(f)
Case 2
DrawImage v2,vogelx(f),vogely(f)
End Select
Next

Flip
Cls
Until KeyHit(1)
End



Was ich verändert hab:

-Cls eingefügt, das hast du vergessen.
-die Bilder Konvertiert
-Die For-Scheife durch eine Zähl-Variable ersetzt (nr)
-Zeile 25 und 26 gelöscht, weil ich nicht erkenne, wofür die gut sein sollen

Das Funktioniert wirklich!
Außerdem möchte ich dir noch den Tipp geben, keine .jpg-Datein in Spielen zu verwenden. Die sehen wirklich nicht schön aus.


@D-bug: Das mit den 2dimensionalen Dims ist glaube ich zu schwierig für Noobs.
<Wing Avenger Download> ◊◊◊ <Macrophage Download>

Kleiner satan

BeitragSo, Jul 09, 2006 13:36
Antworten mit Zitat
Benutzer-Profile anzeigen
häää?
ich hab die doch als bmp abgespeichert!
ich brauch nit zu lügen!!!

aber trotzdem vielen dank!

EDIT: hey du hast recht! das war echt nur als name bmp, aber war irgentwie als jpg gespeichert! ka warum!
aber klappt jetzt (fast)!
  • Zuletzt bearbeitet von Kleiner satan am So, Jul 09, 2006 13:42, insgesamt einmal bearbeitet

Kabelbinder

Sieger des WM-Contest 2006

BeitragSo, Jul 09, 2006 13:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Das ist jpeg, ganz ehrlich.
Nur weil die Endung .bmp lautet, heist das nicht, dass es auch eine Bitmap-Datei ist.

Edit: ok Smile
<Wing Avenger Download> ◊◊◊ <Macrophage Download>

d-bug

BeitragSo, Jul 09, 2006 14:32
Antworten mit Zitat
Benutzer-Profile anzeigen
@Kabelbinder
Die zweidimensionalen Dims stammen von BlindGuy. Viel irritierender
finde ich, dass 'Kleiner satan' nichts aus meinem Code gelernt hat, denn
der funkionierte wenigsten... Wink
Naja, egal, ich weiß nun, dass ich wohl zu weit gedacht habe, als ich davon
ausging er würde das verstehen und auch umsetzen können. Da frag ich mich
doch, warum ich gestern nochmal, nach langer Zeit, B3D startete... Rolling Eyes

cheers

Kabelbinder

Sieger des WM-Contest 2006

BeitragSo, Jul 09, 2006 16:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, ja. Die Noobs lassen einen immer im Stich.
<Wing Avenger Download> ◊◊◊ <Macrophage Download>

Thorsten

BeitragSo, Jul 09, 2006 16:16
Antworten mit Zitat
Benutzer-Profile anzeigen
hab ich wegen den dims was falsch gemacht ?? Sad

cya,
BlindGuy

Kleiner satan

BeitragSo, Jul 09, 2006 16:22
Antworten mit Zitat
Benutzer-Profile anzeigen
[quote="d-bug. Viel irritierender
finde ich, dass 'Kleiner satan' nichts aus meinem Code gelernt hat, denn
der funkionierte wenigsten... Wink
cheers[/quote]
ich hab nix draus gelenrt weil du ihn zu kompliziert gemacht hast!
den den ich jetzt hab klappt super!!!
und er ist vile verständlocher für noobs!

d-bug

BeitragSo, Jul 09, 2006 16:48
Antworten mit Zitat
Benutzer-Profile anzeigen
@BlindGuy
Nein, war wohl nur zu kompliziert, genau wie die Erweiterung die ich aus deinem Code ableitete...

@Kleiner satan
Naja, dann muss ich wohl mal darüber nachdenken, ob ich noch dazu geeignet
bin im Noob-Kummerkasten Mod zu sein Wink ... War nur Spaß.
Mal im Ernst, ich hatte wirklich gedacht, dass du es verstanden hast, weil du keine Fragen
dazu stelltest. Die eine die du stelltest hab ich dir ja auch beantwortet...

cheers

Kleiner satan

BeitragSo, Jul 09, 2006 17:23
Antworten mit Zitat
Benutzer-Profile anzeigen
So Jetztr hab ch ein neues Problem!!!

sieht jetzt so aus:

Code: [AUSKLAPPEN]

Graphics 1024,768,16,1
SetBuffer BackBuffer()
Global pkt = 0

Global v1 = LoadImage("vogel1.bmp")
Global v2 = LoadImage("vogel2.bmp")
Global kreuz = LoadImage("kreuz.bmp")
Global pat = LoadImage("patrone.bmp")
Global hintergrund = LoadImage("hintergrund.bmp")
Global shot = LoadSound("shot.wav")

Global patrone = 5
Dim vogel(40)
Dim vogelx(40)
Dim vogely(40)

For n=1 To 20
 vogel(n) = 3
Next

Repeat
Cls
TileImage hintergrund, 1,1
;setzen
Rand1 = Rnd(1,40)
If Rand1 = 1 Then
  rand2 = Rnd(1,2)
  vogel(nr) = rand2
   If vogel(nr) = 1 Then vogelx(nr) = 1
   If vogel(nr) = 2 Then vogelx(nr) = 1024
  rand3 = Rnd(1,500)
  vogely(nr) = rand3
EndIf
 If nr = 40 Then ;(maximaler Dim-wert)
   nr = 0
 Else
   nr = nr + 1
 EndIf

;erneuern
For z=1 To 40
Select vogel(z)
Case 1: vogelx(z) = vogelx(z) + 1
Case 2: vogelx(z) = vogelx(z) - 1
Case 3:
End Select
Next

;ausgeben
For f=1 To 40
 Select vogel(f)
  Case 1
    DrawImage v1,vogelx(f),vogely(f)
  Case 2
    DrawImage v2,vogelx(f),vogely(f)
 End Select
Next

;kreuz
x = MouseX()
y = MouseY()
DrawImage kreuz,x,y

;schießen
If MouseHit(1) Then
If patrone = 0 Then
Else
 PlaySound(shot)
 patrone = patrone - 1
 For s=1 To 40
  If vogel(s) = 1 Or vogel(s) = 2 Then
   If ImagesCollide(kreuz, x, y,0, v1, vogelx(s), vogely(s), 0) Then vogel(s) = 3: pkt = pkt+20
   If ImagesCollide(kreuz, x, y,0, v2, vogelx(s), vogely(s), 0) Then vogel(s) = 3  pkt = pkt+20
  EndIf
 Next
EndIf
EndIf
;ende
For e=1 To 40
 If vogel(e) = 1 Then
  If vogelx(e) = 1024 Then vogel(e) = 3
 EndIf
 If vogel(e) = 2 Then
  If vogelx(e) = 1 Then vogel(e) = 3
 EndIf
Next

;patrone
If patrone = 5 Then DrawImage pat, 500, 500: DrawImage pat, 600, 500: DrawImage pat, 700, 500: DrawImage pat, 800, 500: DrawImage pat, 900, 500
If patrone = 4 Then DrawImage pat, 600, 500: DrawImage pat, 700, 500: DrawImage pat, 800, 500: DrawImage pat, 900, 500
If patrone = 3 Then DrawImage pat, 700, 500: DrawImage pat, 800, 500: DrawImage pat, 900, 500
If patrone = 2 Then DrawImage pat, 800, 500: DrawImage pat, 900, 500
If patrone = 1 Then DrawImage pat, 900, 500

If MouseHit(2) Then
 patrone = 5
 pkt = pkt - 10
EndIf

;infos
Locate 800,20
Print "punkte:" + pkt

Flip

Until KeyHit(1)
End


Ich hab unten den bereich infos hinzugefügt!
da sollte eigentlich stehen wieviele punkte man hat!
tut es aber nicht!

kann mir einer helfen???
 

Brillux

BeitragSo, Jul 09, 2006 17:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Ersetze das

Zitat:

;infos
Locate 800,20
Print "punkte:" + pkt


durch das, dann müsste es gehen

Code: [AUSKLAPPEN]

;infos
Text  800,20,"punkte: " + pkt

Kleiner satan

BeitragSo, Jul 09, 2006 17:36
Antworten mit Zitat
Benutzer-Profile anzeigen
häää???
das hatte ich zwar schon vorher versucht klappte aber nit!
jetzzt klappts aber!
danke!

PSY

BeitragSo, Jul 09, 2006 17:47
Antworten mit Zitat
Benutzer-Profile anzeigen
hoi,

die hilfe sagt bei print:

Code: [AUSKLAPPEN]
Achtung! Der aktuelle Grafikbuffer wird ignoriert. Die Ausgabe erfolgt immer auf FRONTBUFFER. Ab BlitzPlus erfolgt die Eingabe in einer Konsole (DOS-Box).


deswegen ging das nicht Wink

l8er,
psy

Kleiner satan

BeitragSo, Jul 09, 2006 17:48
Antworten mit Zitat
Benutzer-Profile anzeigen
oh...na dann

Gehe zu Seite Zurück  1, 2, 3  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group