prob mit pacman beispiel

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Randall Flagg

Betreff: prob mit pacman beispiel

BeitragMi, Okt 26, 2005 17:55
Antworten mit Zitat
Benutzer-Profile anzeigen
hi

ich hab mir mal den code von dem pacman beispiel in rene meyers buch abgetippt und ihn mal ausprobiert.
Immer wenn ich starten will kommt eine Fehlermeldung Array Index out of Bounds, und als Fehlerquelle wird mir der Steuerungspart angezeigt. Hab den Code schon zichmal überflogen was da falsch sein könnte. Könnt ihr mir helfen? BlitzBasic: [AUSKLAPPEN]

;PacMan

Graphics 640,480
SetBuffer BackBuffer()
timer=CreateTimer(15)
block=LoadImage(\"block.bmp\")
boden=LoadImage(\"boden.bmp\")
herz=LoadImage(\"herz.bmp\")
spieler=LoadImage(\"pac.bmp\")
gegner=LoadImage(\"gegner.bmp\")


;level laden

Dim Level$(15,20)
leveldatei=ReadFile(\"level.txt\")
For zeile=0 To 14
a$=ReadLine(leveldatei)
For spalte=0 To 19
level$(zeile,spalte)=Mid$(a$,spalte+1)

If level$(zeile,spalte)= \"S\" Then
spielerstartS=Spalte
SpielerstartZ=Zeile
EndIf

If level$(zeile,spalte)= \"G\" Then
Gegnerstars=Spalte
Gegnerstartz=Zeile
EndIf

Next
Next
CloseFile leveldatei
leben=5

Repeat

;level zeichnen

For zeile=0 To 14
For spalte= 0 To 19
Select level$(zeile,spalte)
Case \" \"
DrawImage boden,spalte*32,zeile*32
Case \"1\"
DrawImage block,spalte*32,zeile*32
Case \"S\"
DrawImage boden,spalte*32,zeile*32
DrawImage spieler,spalte*32,zeile*32
spielerS=Spalte
spielerZ=Zeile
Case \"G\"
DrawImage boden,spalte*32,zeile*32
DrawImage gegner,spalte*32,zeile*32
gegners=spalte
gegnerz=zeile
End Select
Next
Next

;lebensherzen

For i=0 To leben-1
DrawImage herz,i*25,0
Next

;Kolli

If (GegnerZ=SpielerZ) And (GegnerS=SpielerS) Then
DrawImage herz,spielers*32,spielerz*32
Flip

leben=leben-1
If leben=0 Then leben=5
level$(GegnerZ,GegnerS)=\" \"
GegnerZ=Gegnerstartz
Gegners=gegnerstarts
level$(Gegnerz,gegners)=\"G\"
spielerZ=spielerstartz
spielers=spielerstarts
level$(SpielerZ,SpielerS)=\"S\"
EndIf

;movement

If KeyDown(203) And (level$(SpielerZ, SpielerS-1) <> \"1\" )Then ;hier kommt die Meldung
level$(SpielerZ,SpielerS)=\" \"
SpielerS=Spielers-1
level$(SpielerZ,SpielerS)=\"S\"
EndIf

If KeyDown(205) And (level$(SpielerZ,SpielerS+1) <> \"1\")Then
level$(SpielerZ,SpielerS)=\" \"
SpielerS=Spielers+1
level$(SpielerZ,SpielerS)=\"S\"
EndIf

If KeyDown(200) And (level$(SpielerZ-1,SpielerS) <> \"1\")Then
level$(SpielerZ,SpielerS)=\" \"
Spielerz=Spielerz-1
level$(SpielerZ,SpielerS)=\"S\"
EndIf

If KeyDown(208) And (level$(SpielerZ+1,SpielerS) <> \"1\")Then
level$(SpielerZ,SpielerS)=\" \"
Spielerz=Spielerz+1
level$(SpielerZ,SpielerS)=\"S\"
EndIf


;gegner movement

wahl=0
If level$(gegnerZ,gegnerS-1)= \" \" Then wahl=wahl +1
If level$(gegnerZ,gegnerS+1)= \" \" Then wahl=wahl +1
If level$(gegnerZ-1,gegnerS)= \" \" Then wahl=wahl +1
If level$(gegnerZ+1,gegnerS)= \" \" Then wahl=wahl +1
If (wahl > 2) Or (richtung=0) Then richtung= Rand(4)

Select Richtung
Case 1 ;links
If level$(gegnerZ,GegnerS-1) <> \"1\" Then
level$(Gegnerz,gegnerS)=\" \"
Gegners=GegnerS-1
level$(GegnerZ,GegnerS)=\"G\"
Else
richtung=0
EndIf
Case 2 ;rechts
If level$(gegnerZ,GegnerS+1) <> \"1\" Then
level$(Gegnerz,gegnerS)=\" \"
Gegners=GegnerS+1
level$(GegnerZ,GegnerS)=\"G\"
Else
richtung=0
EndIf
Case 3 ;hoch
If level$(gegnerZ-1,GegnerS) <> \"1\" Then
level$(Gegnerz,gegnerS)=\" \"
Gegnerz=Gegnerz-1
level$(GegnerZ,GegnerS)=\"G\"
Else
richtung=0
EndIf
Case 4 ;runter
If level$(gegnerZ+1,GegnerS) <> \"1\" Then
level$(Gegnerz,gegnerS)=\" \"
Gegnerz=Gegnerz+1
level$(GegnerZ,GegnerS)=\"G\"
Else
richtung=0
EndIf
End Select

WaitTimer timer
Flip
Until KeyHit(1)
Meine Parodien & Geschichten

Spikespine

BeitragMi, Okt 26, 2005 18:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe mir den Code nicht angeschaut, gebe dir aber den Tipp, immer zuerst mit dem Debugger drüberzufahren.

Array index out of bounds kommt, wenn du einen Feldeintrag ansprichst der nicht existiert, z.B.
Dim Feld(1)
Print Feld(2)

Also, schau wo du über den Maßen des Feldes bist, mit hilfe des Debuggers.

Übrigens brauchst du die Codes im Buch nicht abtippen, die sind glaub alle auf der CD...
Athlon 64 3700+ | 1024 MB RAM | GeForce 7900 GT | Blitz2D, Blitz3D, BlitzPlus, BlitzMax

Randall Flagg

BeitragMi, Okt 26, 2005 18:54
Antworten mit Zitat
Benutzer-Profile anzeigen
danke

hab die codes auf cd aber noch net gefunden Crying or Very sad
muss mich mal genauer umsehen ^^
Meine Parodien & Geschichten

Spikespine

BeitragMi, Okt 26, 2005 19:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Buch-Listings\Spiele-Gerüste\pac4.bb Smile
Athlon 64 3700+ | 1024 MB RAM | GeForce 7900 GT | Blitz2D, Blitz3D, BlitzPlus, BlitzMax
 

Gerhard

BeitragMi, Okt 26, 2005 20:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Muss zwar nichts mit deinem Problem zu tun haben, aber in der 22. Textzeile steht

Gegnerstars = Spalte
anstelle von
GegenerstartS = Spalte

Ansonsten musst du dir mal SpielerS und SpielerZ anzeigen lassen. Möglicherweise ist SpielerS-1 < 0?

Randall Flagg

BeitragMi, Okt 26, 2005 20:48
Antworten mit Zitat
Benutzer-Profile anzeigen
also ersma danke.
Hab den Fehler zwar net gefunden aber das beispiel, werd mal guckn woran der fehler lag Wink
Meine Parodien & Geschichten

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group