Erstes Progamm (need help)
Übersicht

tipfehlerBetreff: Erstes Progamm (need help) |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Dies ist mein erster Beitrag und mein erster etwas umfassenderer Programmierversuch, also seid bitte nachsichtig ![]() 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... ![]() 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 ![]() |
||
![]() |
Hubsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Willst Du mich mit 2 Tonnen Code totschlagen? ![]() ![]() |
||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
René Meyer |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ![]() 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 ![]() |
||
Blitzkrieg Bop |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
irgendwie kommt mir der code, dafür das es dien erster ist, komisch vor ![]() |
||
~ Hey Ho Let's Go ~ |
![]() |
Suco-XBetreff: ..... |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() |
HolzchopfMeisterpacker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ä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 BY ♫ BinaryBorn - Yogurt ♫ (31.10.2018) Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm |
tipfehler |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke !!! So endlich kann ich weiter machen ![]() |
||
Omenaton_2 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group