Problem bei Zufallseditor

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Lars

Betreff: Problem bei Zufallseditor

BeitragDi, März 09, 2010 16:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey Allerseits!

Ich programmiere gerade ein zufallseditor für ein jump and run spiel.
allerdings habe ich ein problem bei diesem Codeausschnitt.

Code: [AUSKLAPPEN]
Dim wx(6)
Dim mapx%(2,220)


SeedRnd MilliSecs ()


For g=0 To 6

wx(g) = Rnd(1,6)

Next

For h=0 To 6

If wx(g)=1 Then mapx%(0) = 0
If wx(g)=2 Then mapx%(44) = 1
If wx(g)=3 Then mapx%(88) = 1
If wx(g)=4 Then mapx%(132) = 1
If wx(g)=5 Then mapx%(176) = 1
If wx(g)=6 Then mapx%(220) = 1

Next

 
WaitKey



Es wird eine fehlermeldung wiedergegeben: "Array index out of bounds"
Ich hoffe auf Hilfe!
Danke!

LG Lars
 

primero

BeitragDi, März 09, 2010 16:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Dim wx(6)
stellt dir die Variablen
wx(0) bis wx(5) zu verfügung, und nicht bis wx(6)

also bei dim einfach den wert höher setzen, mindestens auf 7 dann gehts

Edit: die hintere zahl bei dim gibt nicht an, bis zu welcher ziffer dim zählt, sondern wie viele Felder die Variable hat. Da 0 immer mitgezählt wird endet die Variable immer bei einer Nummer früher als bei Dim angegeben.
  • Zuletzt bearbeitet von primero am Di, März 09, 2010 16:22, insgesamt einmal bearbeitet

Goodjee

BeitragDi, März 09, 2010 16:20
Antworten mit Zitat
Benutzer-Profile anzeigen
stimmt nicht, dim(10) hat 11 elemente

das problem ist dass du auf ein zweidimensionales dim zugreifst aber nur eine dimension angibst, beim zugriff auf mapx


edit: jokerman, es muss wohl eher die 2. dimension 44 sein, bei nem dim 2,220
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/
  • Zuletzt bearbeitet von Goodjee am Di, März 09, 2010 16:22, insgesamt einmal bearbeitet

jokerman29

BeitragDi, März 09, 2010 16:22
Antworten mit Zitat
Benutzer-Profile anzeigen
wie ichs seh, liegts nicht am rnd sondern an dem 2. array: Dim mapx%(2,220)
du hast nämlich einen 2 dimensionalen dim gemacht, der fehler liegt hier:
Code: [AUSKLAPPEN]
If wx(g)=1 Then mapx%(0) = 0
If wx(g)=2 Then mapx%(44) = 1
If wx(g)=3 Then mapx%(88) = 1
If wx(g)=4 Then mapx%(132) = 1
If wx(g)=5 Then mapx%(176) = 1
If wx(g)=6 Then mapx%(220) = 1

das müsste so sein z.b.:
Code: [AUSKLAPPEN]

If wx(g)=1 Then mapx%(0,0) = 0
If wx(g)=2 Then mapx%(44,0) = 1
usw.

die null muss nicht sein, kanst auch jede andere zahl nehmen, aber du hast ihn 2 dimensional gemacht also musst du ihn immer 2 dimensional angeben!
mfg
jokerman29
EDIT:
zu larm gewesen ^^
WhY sO sErIoUs? LeT´s PuT a SmIlE oN tHaT fAcE!

Rechtschreibfehler sind special-effekts meiner Tastatur Wink

mpmxyz

BeitragDi, März 09, 2010 16:26
Antworten mit Zitat
Benutzer-Profile anzeigen
1. Fehler:
Deklaration mit 2 Dimensionen:
BlitzBasic: [AUSKLAPPEN]
Dim mapx%(2,220)

Nutzung mit einer Dimension:
BlitzBasic: [AUSKLAPPEN]
mapx%(176)

Die Anzahl an Dimensionen bleibt aber immer gleich.
->Fehler
2. Fehler:
Nach der Schleife hat die Variable g den Wert "7":
BlitzBasic: [AUSKLAPPEN]
For g=0 To 6

Und hier nutzt du sie für das Array mit 7 Einträgen:
BlitzBasic: [AUSKLAPPEN]
For h=0 To 6
wx(g)

->Fehler zur Laufzeit
mfG
mpmxyz
Edit: Extrem lahm, aber einen weiteren Fehler gefunden... Mir fällt gerade auf, dass die Frage im B3D-Teil gestellt wurde. Ist das nicht schon ein allgemeineres Problem?
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer
  • Zuletzt bearbeitet von mpmxyz am Di, März 09, 2010 16:44, insgesamt einmal bearbeitet
 

Lars

BeitragDi, März 09, 2010 16:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Das Problem existiert weiterhin auch wenn ich das ändere auf:
Code: [AUSKLAPPEN]
If wx(g)=2 Then mapx%(44,0) = 1

Lg Lars

Holzchopf

Meisterpacker

BeitragDi, März 09, 2010 20:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich verschieb das mal, geht ja nicht wirklich um 3D-spezifische Dinge Wink
~VERSCHOBEN~
Dieser Thread passte nicht in das Forum, in dem er ursprünglich gepostet wurde.

mfG
Holzchopf
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

Midimaster

BeitragDi, März 09, 2010 21:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Du hast einen Tipp übersehen, den schon mpmxyz gegeben hat:

Deine Schleife verwendet die Variable "H", Die Elemente in der Schleife aber die Variable "G"

Zitat:
...
For h=0 To 6
If wx( g)=1 Then...


Da "G" in der vorherigen Schleife bis 6 durchlaufen wurde, hat es danach den Wert 7 (Typisch: Der Wert der Laufvariablen nach einer For/Next-Schleife ist immer 1 höher als die Schleife dauerte)

Diese "7" führt dann in der ersten Zeile der For-H-Schleife zum "Array out of Bound". Da steht praktisch "wx(7)".
 

Lars

Betreff: Danke!!

BeitragDi, März 09, 2010 22:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke für die viele und schnelle Hilfe!
Jetzt habe ich das auch verstanden Embarassed

LG Lars

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group