i have an old Sourecode of my earlier PureBasic Days, which i began several years ago on Windows. Now i want to continue it using OS X. I'm using the newest 4.70 Beta 1 x64 on OS X 10.8.
I got an Error when i try to compile the code:
Code: Select all
Invalid memory accesssHere is my code:
Code: Select all
; Project : Dungeon
; Filename : dungeon.pb
; Comment : A tile-based 2-D Adventure-Game
; Copyright : 2007-2009 Michael Bzdega
Enumeration
; Sprites
#Rasen
#Wasser
#Spieler1
#Spieler2
; Sounds
#Musik1
EndEnumeration
#ScreenWidth = 1024
#ScreenHeight = 768
#MapWidth= 15
#MapHeight = 20
; Unterstützung für Bildformat PNG
UsePNGImageDecoder()
; Unterstützung für Soundformat OGG
UseOGGSoundDecoder()
; Sprite und Tastatur initialisieren
If InitSprite() = 0 : MessageRequester("Fehler", "Sprite konnte nicht initialisiert werden!") : End : EndIf
If InitKeyboard() = 0 : MessageRequester("Fehler", "Tastatur konnte nicht initialisiert werden!") : End : EndIf
; Geschwindigkeitskonstante
#SPEED = 2
; Diese Funktion prüft ob eine Kollision vorliegt
Procedure Collision(x.f, y.f)
Result = 0
; Gehe alle Tiles durch
Restore Map
For my = 0 To #MapWidth - 1
For mx = 0 To #MapHeight - 1
a.b
Read a
; Wenn der Tile-Typ 1(#Rasen) ist, so prüfe auf eine Kollision mit diesem Tile...
If a = 1
; ... mit den entsprechenden Tile-Koordinaten(IndexX * TileBreite, IndexY * TileBreite)...
; ... und den entsprechenden Spieler-Koordinaten(SpielerX, SpielerY)...
If SpriteCollision(#Rasen, Int(x), Int(y), #Spieler1, mx * 50, my * 50)
; Wenn ja: gib 1(True) zurück
Result = 1
; und springe aus beiden Schleifen(Anzahl: 2) raus
Break 2
EndIf
EndIf
Next
Next
ProcedureReturn Result
EndProcedure
; Screen öffnen
If OpenScreen(#ScreenWidth, #ScreenHeight, 32, "Dungeon") = 0 : MessageRequester("Fehler", "Bildschirm konnte nicht geöffnet werden!") : End : EndIf
; Sprites laden
LoadSprite(#Rasen,"res/rasen.png")
LoadSprite(#Wasser,"res/wasser.png")
LoadSprite(#Spieler1,"res/michael_kopf.png")
LoadSprite(#Spieler2,"res/alexandra_kopf.png")
; Spielerposition in der Mitte des Bildschirms
X.f = #ScreenWidth / 2
Y.f = #ScreenHeight / 2
; Framerate auf 30 setzen
SetFrameRate(30)
; Hintergrundmusik laden und endlos abspielen
If InitSound() = 0 : MessageRequester("Fehler", "Soundwiedergabe konnte nicht initialisiert werden!") : End : EndIf
LoadSound(#Musik1, "res/background.ogg")
PlaySound(#Musik1, 1)
; Hauptschleife
Repeat
; Keyboardstatus erneuern und abfragen
ExamineKeyboard()
If KeyboardPushed(#PB_Key_Up) ; laufe hoch
If Collision(X, Y - #SPEED) = 0
Y - #SPEED
EndIf
EndIf
If KeyboardPushed(#PB_Key_Down) ; laufe runter
If Collision(X, Y + #SPEED) = 0
Y + #SPEED
EndIf
EndIf
If KeyboardPushed(#PB_Key_Left) ; laufe links
If Collision(X - #SPEED, Y) = 0
X - #SPEED
EndIf
EndIf
If KeyboardPushed(#PB_Key_Right) ; laufe rechts
If Collision(X + #SPEED, Y) = 0
X + #SPEED
EndIf
EndIf
; Beenden?
If KeyboardPushed(#PB_Key_Escape)
Quit = 1
EndIf
; Screeninhalt löschen und mit Schwarz überdecken
ClearScreen(0)
; Spieler anzeigen
DisplaySprite(#Spieler1, X, Y)
; Mapdaten durchgehen
Restore Map
For my = 0 To #MapWidth - 1
For mx = 0 To #MapHeight - 1
a.b
Read a <-- here's my error!
Select a
Case 1 ; Rasen
DisplaySprite(#Rasen, mx * 50, my * 50)
Case 2 ; Wasser
DisplaySprite(#Wasser, mx * 50, my * 50)
Case 3 ; Spieler2
DisplaySprite(#Spieler2, mx * 50, my * 50)
EndSelect
Next
Next
; Gefüllten Backbuffer zum Frontbuffer bringen
FlipBuffers()
; Eine kleine Verzögerung um den Prozessor nicht vollständig auszulasten
Delay(5)
Until Quit = 1
End
; Mapdaten
DataSection
Map:
Data.b 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
Data.b 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1
Data.b 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1
Data.b 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1
Data.b 1, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1
Data.b 1, 0, 0, 2, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1
Data.b 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1
Data.b 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1
Data.b 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1
Data.b 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1
Data.b 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1
Data.b 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1
Data.b 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 1
Data.b 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1
Data.b 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
EndDataSectionGreetings
Michael

