Anfängerproblem

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

YoAsakura

Betreff: Anfängerproblem

BeitragMi, Jan 26, 2005 15:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi
Ich habe erst neulich begonnen mich mit dem programmieren zu beschäftigen daher freue ich mich über jede Antwort die aufbauende Kritik für meine stümperhaften Versuche liefert.

Also folgendes Problem:
Ich habe versucht einen stinknormalen 2D Shooter frei nach Bow & Arrow zu programmieren. Bisher klappte alles prima, und ich war schon wesentlich weiter als die Stelle auf die mich mein Problemchen zurückwirft.
Und zwar kommt jedes mal an der Stelle, an der der Pfeil abgeschossen werden sollte die Fehlermeldung: Array index out of bounds

zum Überblick:
Code: [AUSKLAPPEN]

Graphics 800,600
SetBuffer BackBuffer()
ClsColor 0,100,25
biff = LoadImage("biff.bmp")
balloon = LoadImage("balloon.bmp")
bal = LoadAnimImage("ball.bmp", 32,64, 0,6)
pfeil = LoadImage("pfeil.bmp")
Dim pfei(100,2)
Dim ball(18,2)
Dim baf(18,1)
HidePointer
Y = 200
Repeat
 Cls
 If KeyDown(200) = 1 Then y = y - 3
 If KeyDown(208) = 1 Then y = y + 3
 If y < -38 Then y = -38
 If y > 548 Then y = 548
 DrawImageRect biff,0,y,0+bereit,0,80,140
 If ball(J,0) <> -1 Then
  For I = 1 To 18
   DrawImage balloon,ball(I,1),ball(I,2)
   ball(I,1) = 135 + (35*I)
   ball(I,2) = ball(I,2) - 1
   If ball(I,2) < -64 Then ball(I,2) = 600
  Next
 EndIf
 If KeyDown(203) = 1 Then
  bereit = 320
 EndIf
 If KeyHit(205) And bereit = 320 Then
  flieg = flieg + 1
  If flieg = 101 Then flieg = 1         ;irgendwo in diesem Bereich müsste 
  pfei(flieg,0) = 1                          ;das Problem liegen
  pfei(flieg,1) = 55
  pfei(flieg,2) = Y+40
  bereit = 0
 EndIf
 For S = 1 To 100
  If pfei(S,0) = 1 Then
   DrawImage pfeil, pfei(S,1), pfei(S,2)
   pfei(S,1) = pfei(S,1) + 3
   If pfei(S,1) = 1000 Then pfei(S,0) = 0
  EndIf
 Next
 For S = 1 To 100
  If pfei(S,0) <> 0 Then
  For J = 1 To 18
   If ImagesOverlap(balloon,ball(J,1),ball(J,2),pfeil,pfei(S,1),pfei(S,2)) Then ball(J,0) = -1
  Next
  EndIf
 Next
 For I=1 To 18
  If ball(I,0) = -1 Then
   If baf(I,1) + 200 < MilliSecs() Then
    baf(I,0) = baf(I,0) + 1
    baf(I,1) = MilliSecs()
   
    If baf(I,0) = 6 Then
     baf(I,0) = 0
     baf(I,1) = 0
     ball(I,0) = 0
    EndIf
   EndIf
   DrawImage bal,ball(I,1),ball(I,2),baf(I,0)
  EndIf
 Next
 Flip
Forever
WaitKey
End

Kann mir jemand helfen Question
Danke im Vorraus

simi

BeitragMi, Jan 26, 2005 15:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:

....
Repeat
Cls
If KeyDown(200) = 1 Then y = y - 3
If KeyDown(208) = 1 Then y = y + 3
If y < -38 Then y = -38
If y > 548 Then y = 548
DrawImageRect biff,0,y,0+bereit,0,80,140
If ball(J,0) <> -1 Then
For I = 1 To 18
DrawImage balloon,ball(I,1),ball(I,2)
......

Dort muss der Fehler sein, denn J wird unten erhöht auf 19....

cu simi

Spikespine

BeitragMi, Jan 26, 2005 15:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Also, auf den ersten Blick: wenn du die Variable flieg immer um eins erhöhst, kommst du irgendwann an die Grenze des Arrays, das ja nur 100 senkrechte einträge kennt. Edit: ach so, du setzt sie ja immer auf eins. sorry.
 

YoAsakura

BeitragMi, Jan 26, 2005 19:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke simi
Wenn ich das wieder raus nehme wird der Pfeil wieder geschossen.
Allerdings weiß ich im Moment gerade nicht wie ich es dann hinkriege, dass die Ballons die abgeschossen wurden nicht mehr auftauchen Confused
 

ke^kx

BeitragMi, Jan 26, 2005 19:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Du fügst einfach noch ein Eintrag pro Ballon hinzu in dem du festlegst, ob ein Ballon "lebt" oder nicht. Und dann fügst du in die Ballonschleife einfach noch ein "if Ball(i,...) = 1 then" um den rest herum.

Jiriki
http://i3u8.blogspot.com
Asus Striker II
Intel Core2Quad Q9300 @ 2,5 GHz (aber nur zwei Kerne aktiv aufgrund der Instabilität -.-)
Geforce 9800 GTX
2GB RAM
 

noir

BeitragMi, Jan 26, 2005 19:09
Antworten mit Zitat
Benutzer-Profile anzeigen
das machst du am besten so:
du speicherst jeden ball in einem array (kannst es auch mit types machen)
Dim Bild(100,1)
so da hätten 101 ballons platz (0-101,0) , mit (0-101,1) überprüfst du ob der ballon noch da ist.

if Bild(i,1) = 0 then Drawimage Bild(i,0)
....

if Bild(i,0) ..... (bild getroffen) then
bild(i,1) = 1
endif

so ich hoffe du hast das prinzip verstanden Wink

edit: 25s langsamer aber mehr text Mr. Green
Fragt und man wird euch helfen

Das Alternativ BlitzBasic-Forum: FreeCoder
Einfach chatten: BlitzChat
Code&Text schnell und einfach pasten: FreePasting
  • Zuletzt bearbeitet von noir am So, März 06, 2005 13:08, insgesamt einmal bearbeitet
 

YoAsakura

BeitragMi, Jan 26, 2005 19:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke ihr seid einfach klasse!!!!
Very Happy Very Happy Very Happy

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group