Erstes Progamm (need help)

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

tipfehler

Betreff: Erstes Progamm (need help)

BeitragDo, Mai 20, 2004 11:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Dies ist mein erster Beitrag und mein erster etwas umfassenderer Programmierversuch, also seid bitte nachsichtig Wink

Ok, ich hab folgendes Problem. Mein Programm sollte am linken Bildschirmrand zufällig Bilder erscheinen lassen, die dann von links nach rechts fliegen. Soweit so gut, wenn ich allerdings versuche die Bilder beim anklicken abstürtzen zu lassen, funktioniert das nur sehr unregelmäßig... Sad und ich hab keine Ahnung wieso. Kann mir jemand helfen? Hier ist der Code :

Code: [AUSKLAPPEN]


If GfxModeExists(1280,1024,16) = True                  ;Wenn die Aufloesung von der Grafikkarte unterstuetzt wird,
   Gfx_X = 1280                                 ;dann auf 1280x1024 setzen
   Gfx_Y = 1024
ElseIf GfxModeExists(1024,768,16) = True                ;auf 1024x768 setzen
   Gfx_X = 1024
   Gfx_Y = 768
ElseIf GfxModeExists(800,600,16) = True                ;auf 800x600 setzen
   Gfx_X = 800
   Gfx_Y = 600
ElseIf GfxModeExists(640,480,16) = True                ;auf 640x480
   Gfx_X = 640
   Gfx_Y = 480
EndIf

Gfx_Bit = 16                                    ;Farbtiefe
Global X = Gfx_X
Global Y = Gfx_Y


Graphics Gfx_X, Gfx_Y, Gfx_Bit, 1                     ;Grafik initialisieren und Bildmodus setzen
SetBuffer BackBuffer()

Dim Enemy(14,2)                                  ;0=Zustand , 1=X-Position, 2=Y-Position
                                             ;Zustand: 0 = Existiert nicht, 1 = existiert, 2 = Getroffen
                                             
ClsColor 255,200,51                                 ;Hintergrundfarbe setzen und
MoveMouse(Gfx_X/2,Gfx_Y/2)                           ;Maus in die Mitte bewegen


Global Ziel = LoadImage("Image1.bmp")                  ;Bilder Laden
MaskImage Ziel, 0,255,0                              ;und maskieren
Global Zk = LoadImage("Zielkreuz.bmp")
MaskImage Zk, 0,255,0

timer = CreateTimer(60)                              ;timer initialisieren

Repeat                                           ;Hauptschleife

   
   WaitTimer(timer)

   SeedRnd MilliSecs()

   Cls    
   
   Gegner()
   Draw()

   Flip

Until KeyHit(1)
End                                           ;Ende




Function Gegner()

For i = 0 To 14
   
   If Enemy(i,0) = 0 And Rand(1,1000) = 1000             ;Ueberprueft Zustand und wenn das Bild nicht existiert
         Enemy(i,2) = Rand(1,1000)                  ;wird es vielleicht erstellt und an einer zufälligen Stelle
         Enemy(i,0) = 1
         
   ElseIf Enemy(i, 0) = 1
         Enemy(i,1) = Enemy(i,1) + 1                  ;Ueberprueft Zustand und wenn das Bild bereits existiert, dann
                                             ;wird es bewegt oder wenn es das Bildschirm verlässt geloescht
         If Enemy(i,1) > X                         ;und die Position auf 0 zurueckgesetzt
            Enemy(i,1) = 0
            Enemy(i,0) = 0
         EndIf
         
   ElseIf Enemy(i,0) = 2                            ;Ueberprueft Zustand und wenn es getroffen wurde, stuertzt es ab,
         Enemy(i,2) = Enemy(i,2) + 10               ;wenn es den Bildschirm verlaesst wird es geloescht

         If Enemy(i,2) > Y
            Enemy(i,2) = 0
            Enemy(i,1) = 0
            Enemy(i,0) = 0
         EndIf   
   EndIf
   
Next

End Function




Function Draw()

   For i = 0 To 14
      If Enemy(i,0) = 1 Or Enemy(i,0) = 2               ;Wenn das Bild existiert,
         DrawImage Ziel,Enemy(i,1),Enemy(i,2)         ;wird es hier gezeichnet

         If ImagesCollide(zk,MouseX(),MouseY(),0,Ziel,Enemy(i,1),Enemy(i,2),0) And MouseHit(1) And Enemy(i,0) = 1 Then Enemy(i,0) = 2

         ;bei collide wird uberprueft ob die Bilder noch unveraendert von links nach rechts fliegen, und wenn die Maus zusaetzlich
         ;mit den Zielscheiben kollidiert soll der Zustand auf 2 also getroffen gesetzt werden
      EndIf
   Next
   
   DrawImage Zk,MouseX(), MouseY()
   
End Function



Ich wär euch auch sehr dankbar, wenn ihr mir sagen könntet, was man am Code besser machen könnte Smile

Hubsi

BeitragDo, Mai 20, 2004 12:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Willst Du mich mit 2 Tonnen Code totschlagen? Very Happy Poste mal den Fetzen in dem Du den Fehler vermutest, dann wirds sehr viel einfacher Wink
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...
 

René Meyer

BeitragDo, Mai 20, 2004 12:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Bin vor dem Morgenkaffee noch zu schläfrig - aber diese Zeile sieht mir doch komisch aus:

If Enemy(i,0) = 0 And Rand(1,1000) = 1000

Laß Sie Dir auf der Zunge zergehen und überlege, ob das tatsächlich so gewollt ist.
www.blitzbasic.de | Das Buch zu Blitz Basic: www.schreibfabrik.de/txt/bbb
 

tipfehler

BeitragDo, Mai 20, 2004 14:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Also in Enemy(i,0) hab ich den Zustand des Bildes, also 0 für nicht existent, 1= es exisiert, 2 es existiert und wurde getroffen. Wenn das Bild nicht existiert, soll er eine Zufallszahl ziehen, und wenn diese übereinstimmt soll das Bild links erscheinen. Damit wollte ich erreichen, dass links immer zu zufälligen Zeiten Bilder erscheinen. Müsste doch gehen oder?

@Hubsi: Sry Very Happy, der Fehler muss entweder hier sein

Code: [AUSKLAPPEN]

   For i = 0 To 14
      If Enemy(i,0) = 1 Or Enemy(i,0) = 2               ;Wenn das Bild existiert,
         DrawImage Ziel,Enemy(i,1),Enemy(i,2)         ;wird es hier gezeichnet
         If ImagesCollide(zk,MouseX(),MouseY(),0,Ziel,Enemy(i,1),Enemy(i,2),0) And MouseHit(1) And Enemy(i,0) = 1 Then Enemy(i,0) = 2
         ;bei collide wird uberprueft ob die Bilder noch unveraendert von links nach rechts fliegen, und wenn die Maus zusaetzlich
         ;mit den Zielscheiben kollidiert soll der Zustand auf 2 also getroffen gesetzt werden
      EndIf
   Next


oder hier:

Code: [AUSKLAPPEN]

For i = 0 To 14
   
   If Enemy(i,0) = 0 And Rand(1,1000) = 1000             ;Ueberprueft Zustand und wenn das Bild nicht existiert
         Enemy(i,2) = Rand(1,1000)                  ;wird es vielleicht erstellt und an einer zufälligen Stelle
         Enemy(i,0) = 1
         
   ElseIf Enemy(i, 0) = 1
         Enemy(i,1) = Enemy(i,1) + 1                  ;Ueberprueft Zustand und wenn das Bild bereits existiert, dann
                                             ;wird es bewegt oder wenn es das Bildschirm verlässt geloescht
         If Enemy(i,1) > X                         ;und die Position auf 0 zurueckgesetzt
            Enemy(i,1) = 0
            Enemy(i,0) = 0
         EndIf
         
   ElseIf Enemy(i,0) = 2                            ;Ueberprueft Zustand und wenn es getroffen wurde, stuertzt es ab,
         Enemy(i,2) = Enemy(i,2) + 10               ;wenn es den Bildschirm verlaesst wird es geloescht

         If Enemy(i,2) > Y
            Enemy(i,2) = 0
            Enemy(i,1) = 0
            Enemy(i,0) = 0
         EndIf   
   EndIf
   
Next


naja ist nicht wirklich weniger Sad
 

Blitzkrieg Bop

BeitragDo, Mai 20, 2004 14:58
Antworten mit Zitat
Benutzer-Profile anzeigen
irgendwie kommt mir der code, dafür das es dien erster ist, komisch vor Rolling Eyes
~ Hey Ho Let's Go ~

Suco-X

Betreff: .....

BeitragDo, Mai 20, 2004 16:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Wieso? Weißt doch so ziemlich alles unnütze auf was man so bei den ersten Codes verhaut. Ich tippe auf RM´s Buch
bye
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB
 

tipfehler

BeitragDo, Mai 20, 2004 16:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Nö, ich hab gar kein Buch zu BB. Ich hab mich aber durch einige tuts gearbeitet.

Edit: Wenn ich für MouseHit(1) , MouseDown(1) einsetze stürtzen die Bilder zwar immer ab, aber dann kann man die Maus einfach gedrückt halten und über die Bilder fahren. Sie sollten aber nur abstürzen wenn man klickt.

Flori-D

BeitragDo, Mai 20, 2004 18:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Werd mir den Code mal anschauen.Aber dafür das es dein erster ist muss ich sagen sieht er echt gut aus, sofern du nicht irgendwie aus irgendeinem Tut einfach kopiert hast. 8)
BB is Macht!

Homepage: www.flori-d.de

Holzchopf

Meisterpacker

BeitragDo, Mai 20, 2004 18:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Ändere diese Funktion so ab:

Code: [AUSKLAPPEN]

Function Draw()

  mHit = MouseHit(1)
 
   For i = 0 To 14
      If Enemy(i,0) = 1 Or Enemy(i,0) = 2               ;Wenn das Bild existiert,
         DrawImage Ziel,Enemy(i,1),Enemy(i,2)         ;wird es hier gezeichnet

         If ImagesCollide(zk,MouseX(),MouseY(),0,Ziel,Enemy(i,1),Enemy(i,2),0) And mHit And Enemy(i,0) = 1 Then Enemy(i,0) = 2

         ;bei collide wird uberprueft ob die Bilder noch unveraendert von links nach rechts fliegen, und wenn die Maus zusaetzlich
         ;mit den Zielscheiben kollidiert soll der Zustand auf 2 also getroffen gesetzt werden
      EndIf
   Next
   
   DrawImage Zk,MouseX(), MouseY()
   
End Function


Denn die Funktion MouseHit() liefert nur dann 1 zurück, wenn die Taste seit dem letzten Aufruf gedrückt wurde, wenn du also in dieser schleife dies 24 mal prüfst, brauchst du ein ziemliches Timing...
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm
 

tipfehler

BeitragDo, Mai 20, 2004 18:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke !!! So endlich kann ich weiter machen Very Happy
 

Omenaton_2

BeitragFr, Mai 21, 2004 12:05
Antworten mit Zitat
Benutzer-Profile anzeigen
If Enemy(i,0) = 0 And Rand(1,1000) = 1000

Du hast die Bedeutung dieser Zeile falsch verstanden.
Hier wird Folgendes gemacht:
Wenn Enemy(i,0) den Wert Null hat UND eine an Ort und Stelle erzeugte Zufallszahl 1000 ist, dann ist die Bedingung erfüllt.
Die Chance, daß dies eintrifft ist also theoritisch geringer als 1 : 1000.
 

tipfehler

BeitragSa, Mai 22, 2004 15:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Stimmt schon, da Enemy(i,0) = 0 aber 15 mal durchlaufen wird, steigt die Chance, dass die zufallszahl errechnet wird aber enorm. Die einzige Situation bei der die Chance unter 1000 ist, wäre, wenn alle 15 Bilder auf den Bildschirm gezeichnet werden, denn dann ist sie gleich Null.

Aber mehr wie 15 Bilder will ich gar nicht haben, da man sonst ja nicht mit wegklicken nach kommt Wink

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group