Problem mit Dim-Level

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Ziggy

Betreff: Problem mit Dim-Level

BeitragSa, Dez 08, 2007 12:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe das Beispiel aus dem Buch "Spiele Programmieren Mit Blitz Basic" mal ausprobiert, wo ein Level per Dim erstellt wird.

Diesen Code habe ich original übernommen:
Code: [AUSKLAPPEN]

Graphics 640,480
SetBuffer BackBuffer()

timer = CreateTimer(10)
tiles = LoadImage("gfx/Blocks1.bmp")
figuren = LoadImage("gfx/invader2.bmp")

;Level von Festplatte lesen

Dim level(14,69)

leveldatei = ReadFile("Data/Level.dat")
For Spalte = 0 To 69
   A = ReadByte(leveldatei)
   For Zeile = 0 To A
      level(10-Zeile,Spalte) = A
   Next
Next
ende = 69

For Zeile = 10 To 14
   For Spalte = 0 To 69
      level(Zeile,Spalte) = 99 ;Boden
   Next
Next

ClsColor 127,127,255
Index = 0
SpielerZ = 9
SpielerS = 7

Repeat
Cls

If KeyDown(205) Then ;Rechts
   If (Index = Ende-19) And (SpielerS < 19) Then
      SpielerS = Spielers + 1
   EndIf
   
   If SpielerS < 15 Then
      SpielerS = SpielerS + 1
   Else
      Index = Index + 1
   EndIf
EndIf

If KeyDown(203) Then ;Links
   If (Index = 0) And (SpielerS > 0) Then
      SpielerS = Spielers - 1
   EndIf
   
   If SpielerS > 4 Then
      SpielerS = SpielerS - 1
   Else
      Index = Index - 1
   EndIf
EndIf

If Index = -1 Then Index = 0
If Index = Ende - 18 Then Index = Ende - 19

;Level zeichnen

For Spalte = Index To Index + 19
   For Zeile = 0 To 14
      A = level(Zeile,Spalte)
      Select A
         Case 99   DrawImageRect tiles,(Spalte-Index)*32,Zeile*32,172,342,32,32
         Case 1   DrawImageRect tiles,(Spalte-Index)*32,Zeile*32,2,342,32,32
         Case 2   DrawImageRect tiles,(Spalte-Index)*32,Zeile*32,444,308,32,32
         Case 3,4,5,6   DrawImageRect tiles,(Spalte-Index)*32,Zeile*32,444,172,32,32
      End Select
   Next
Next

DrawImageRect figuren,SpielerS*32,SpielerZ*32,481,142,32,26

WaitTimer timer
Flip
Until KeyHit(1)


Allerdings bekomme ich immer die Fehlermeldung "Array Index out of Bounds".
Warscheinlich hat sich ein kleiner Fehler in den Code geschlichen,den ich aber nicht finde.

Bitte schaut doch mal drüber.

Danke, Gruß.
"Es gibt 10 Arten von Menschen: Diejenigen die Binär verstehen, und jene die es nicht verstehen."

"Irren ist menschlich, gut dass ich ein Gott bin... xD"

letzte Informatik-Note : 1 ... 96% richtig, Thema: C++ switch/case

The_Nici

BeitragSa, Dez 08, 2007 12:45
Antworten mit Zitat
Benutzer-Profile anzeigen
In welcher Zeile?
Es könnte sein, dass du mehr als 15bytes pro Zeile hast.
 

Ziggy

BeitragSa, Dez 08, 2007 12:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Sry das wollte ich gerade noch nach-posten, der Fehler tritt bei folgender Zeile auf:

Code: [AUSKLAPPEN]

level(10-Zeile,Spalte) = A


meine Level.dat sieht einfach folgendermaßen aus:

66000220040022332200

genauso wie im Beispiel im Buch.
"Es gibt 10 Arten von Menschen: Diejenigen die Binär verstehen, und jene die es nicht verstehen."

"Irren ist menschlich, gut dass ich ein Gott bin... xD"

letzte Informatik-Note : 1 ... 96% richtig, Thema: C++ switch/case

BladeRunner

Moderator

BeitragSa, Dez 08, 2007 13:31
Antworten mit Zitat
Benutzer-Profile anzeigen
der ASCII-Code von 6 ist 54.
Du liesst a mit readbyte ein, deswegen wird da nicht die 6 gelesen sondern eben der Ascii-code.
Dann versucht Blitz 'Zeile' bis 54 hochzuzählen, und das kann natürlich nicht gutgehen.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

The_Nici

BeitragSa, Dez 08, 2007 13:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Bladerunner sagt es.
Programmiere einen Editor der mit Writebyte das Level speichert.
Am besten guckst du dir auf Robsite das Editor-Tutorial an. Smile
 

Ziggy

Betreff: funktioniert jetzt

BeitragSa, Dez 08, 2007 13:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:

der ASCII-Code von 6 ist 54.
Du liesst a mit readbyte ein, deswegen wird da nicht die 6 gelesen sondern eben der Ascii-code.
Dann versucht Blitz 'Zeile' bis 54 hochzuzählen, und das kann natürlich nicht gutgehen.


Davon hab ich NIX verstanden ausser "das kann nicht gutgehen" Very Happy Very Happy

Aber ich habe mir die Stelle mit "readbyte" nochmal angeschaut und gesehen dass ich mich beim abtippen vertan habe:

Code: [AUSKLAPPEN]


statt    A = ReadByte(leveldatei)

muss es    A = ReadByte(leveldatei)  - 48

heißen


warscheinlich sind diese -48 genau das was BladeRunner meinte.

Danke, Gruß.
"Es gibt 10 Arten von Menschen: Diejenigen die Binär verstehen, und jene die es nicht verstehen."

"Irren ist menschlich, gut dass ich ein Gott bin... xD"

letzte Informatik-Note : 1 ... 96% richtig, Thema: C++ switch/case

BladeRunner

Moderator

BeitragSa, Dez 08, 2007 13:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Um Verständnis zu erlangen empfehle ich Dir dich mal mit der Onlinehilfe, und zwar im speziellen mit der ASCII-Tabelle auseinanderzusetzen, dann verstehst du vielleicht was ich meine.
Es ist so, dass ein Zeichen was anderes ist als das was als Byte gespeichert wird.
Der Computer kann ja nur Zahlen, Buchstaben sind für den ohne Belang. Deswegen bekommt jedes Zeichen einen eigenen Zahlenwert zugeordnet. Auch Zahlen sind erstmal nur ein Zeichen und haben einen Zahlenwert.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group