Problem mit Dim-Level
Übersicht

ZiggyBetreff: Problem mit Dim-Level |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
In welcher Zeile?
Es könnte sein, dass du mehr als 15bytes pro Zeile hast. |
||
Ziggy |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() |
BladeRunnerModerator |
![]() Antworten mit 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. |
||
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Bladerunner sagt es.
Programmiere einen Editor der mit Writebyte das Level speichert. Am besten guckst du dir auf Robsite das Editor-Tutorial an. ![]() |
||
ZiggyBetreff: funktioniert jetzt |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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" ![]() ![]() 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 |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group