Array Index out of Bounds

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

BigPingu

Betreff: Array Index out of Bounds

BeitragFr, Aug 04, 2006 0:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi
Leute ich bin hier grad mit dem Pacman Spiel beschäftig aber da will irgendwas nicht obwohl ich meiner meinung nach alles richtig gemacht habe Sad

Blitz sagt immer "Array Index out of Bounds" bei der 1. zeile der Steuerungs funktion

BlitzBasic: [AUSKLAPPEN]
Graphics 640,480,32,2
SetBuffer = BackBuffer()

Global tile1 = LoadImage ("gfx\tile1.png")
Global tile2 = LoadImage ("gfx\tile2.png")
Global player = LoadImage ("gfx\player.png")

;Leveldaten einlesen ----------------------------------------
Dim Level$(15,20)

leveldatei = ReadFile("level1.dat")

For Zeile=0 To 14
txt$ = ReadLine (leveldatei)
For spalte = 0 To 19
Level$ (Zeile,Spalte) = Mid$ (txt$, Spalte + 1, 1)
Next
Next
CloseFile leveldatei


; Hauptschleife --------------------------------------------
Repeat
Cls

DrawMap()
Steuerung()

Flip
Until KeyHit(1)


; Map Zeichnen -------------------------------------------
Function DrawMap()
For Zeile=0 To 14
For Spalte=0 To 19
Select Level$(Zeile,Spalte)
Case "1"
DrawImage tile2,Spalte*32,Zeile*32
Case " "
DrawImage tile1,Spalte*32,Zeile*32
Case "S"
DrawImage tile1,Spalte*32,Zeile*32
DrawImage player,Spalte*32,Zeile*32
playerSpalte = Splate
playerZeile = Zeile
End Select
Next
Next
End Function

;Steuerung ---------------------------------------------------------------
Function Steuerung()
If KeyDown(203) And (Level$ (playerZeile, playerSpalte - 1) <> "1") Then
Level$ (playerZeile, playerSpalte) = " "
playerSpalte = playerSpalte - 1
Level$ (playerZeile, playerSpalte) = "S"
EndIf

If KeyDown(205) And (Level$ (playerZeile, playerSpalte + 1) <> "1") Then
Level$ (playerZeile, playerSpalte) = " "
playerSpalte = playerSpalte + 1
Level $(playerZeile, playerSpalte) = "S"
EndIf

If KeyDown(200) And (Level$ (playerZeile - 1, playerSpalte) <> "1") Then
Level$ (playerZeile, playerSpalte) = " "
playerZeile = playerZeile - 1
Level$ (playerZeile, playerSpalte) = "S"
EndIf

If KeyDown(208) And (Level$ (playerZeileZ + 1, playerSpalte) <> "1") Then
Level$ (playerZeile, playerSpalte) = " "
playerZeile = playerZeile + 1
Level$ (playerZeile, playerSpalte) = "S"
EndIf

End Function

PSY

Betreff: Re: Array Index out of Bounds

BeitragFr, Aug 04, 2006 0:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
playerSpalte = Splate


Rolling Eyes

l8er,
psy

BigPingu

BeitragFr, Aug 04, 2006 0:57
Antworten mit Zitat
Benutzer-Profile anzeigen
THX ..... aber das war es anscheinend nicht Shocked

d-bug

BeitragFr, Aug 04, 2006 9:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Dank deiner For-Next Schleife fangen playerZeile und playerSpalte bei 0 an. In
deiner Steuerungsfunktion subtrahierst du dann noch 1 von dieser 0. Das
ergibt dann -1 ! ql:Dim kann allerdings keine negativen Zahlen verwalten.

Du solltest also zusehen, dass sowohl playerZeile als auch playerSpalte keine
negativen Werte bekommen.

cheers

BigPingu

BeitragFr, Aug 04, 2006 11:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Komisch also wenn ich keine Functionen benutze läuft es ohne Probleme wenn ich es jedoch wieder in functionen pake kommt Arry index out ouf bounds Shocked

garret

BeitragFr, Aug 04, 2006 12:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Meine Vermutung: playerSpalte und playerZeile sind nicht global und werden daher in den Funktionen auf 0 gesetzt. Dort wird 1 subtrahiert und das Array soll mit -1 arbeiten ->Indexgrenzen überschritten. Vielleicht playerSpalte und Zeile am Anfang einfach mal global machen?

Auf jeden Fall scheint's mit lokal/global zu tun zu haben, da es ohne Funktionen klappt.

MfG garret
>>nec aspera terrent<< (Auch Widerwärtigkeiten schrecken nicht)

BigPingu

BeitragFr, Aug 04, 2006 12:31
Antworten mit Zitat
Benutzer-Profile anzeigen
garret hat Folgendes geschrieben:
Meine Vermutung: playerSpalte und playerZeile sind nicht global und werden daher in den Funktionen auf 0 gesetzt. Dort wird 1 subtrahiert und das Array soll mit -1 arbeiten ->Indexgrenzen überschritten. Vielleicht playerSpalte und Zeile am Anfang einfach mal global machen?

Auf jeden Fall scheint's mit lokal/global zu tun zu haben, da es ohne Funktionen klappt.

MfG garret


THX daran lag es .... das hatte ich auch schonmal probiert aber da hatte ich noch Spalte und Zeile auf Global wodurch der Bildschirm schwarz wurde

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group