Naja, also zuerst mal prüfst du ja ob ne taste gedrückt wurde, dass sich der Spieler bewegen soll und wenn da nix im weg steht lässte ihn also an die neue Position laufen.
Code: Alles auswählen
InitSprite()
InitKeyboard()
Procedure Collision(x.f, y.f)
  Result = 0
  Restore Map
  For my=0 To 17
    For mx=0 To 24
      
      a.b
      Read a
      If a = 1
        If SpriteCollision(0, Int(x), Int(y), 1, mx*32, my*32)
          Result = 1
          Break 2
        EndIf
      EndIf
      
    Next
  Next
  ProcedureReturn Result
EndProcedure
OpenScreen(800, 600, 32, "Test")
CreateSprite(0, 32, 32)
StartDrawing(SpriteOutput(0))
Box(0, 0, 32, 32, RGB(255, 0, 0))
StopDrawing()
CreateSprite(1, 32, 32)
StartDrawing(SpriteOutput(1))
Box(0, 0, 32, 32, RGB(0, 0, 255))
StopDrawing()
#SPEED = 1.5
X.f = 800/2
Y.f = 600/2
SetFrameRate(20)
Repeat
  ExamineKeyboard()
  If KeyboardPushed(#PB_Key_Up)
    If Collision(X, Y-#SPEED) = 0
      Y - #SPEED
    EndIf
  EndIf
  If KeyboardPushed(#PB_Key_Down)
    If Collision(X, Y+#SPEED) = 0
      Y + #SPEED
    EndIf
  EndIf
  If KeyboardPushed(#PB_Key_Left)
    If Collision(X-#SPEED, Y) = 0
      X - #SPEED
    EndIf
  EndIf
  If KeyboardPushed(#PB_Key_Right)
    If Collision(X+#SPEED, Y) = 0
      X + #SPEED
    EndIf
  EndIf
  
  If KeyboardPushed(#PB_Key_Escape)
    Quit = 1
  EndIf
  
  ClearScreen(0, 0, 0)
  DisplaySprite(1, X, Y)
  
  Restore Map
  For my=0 To 17
    For mx=0 To 24
      
      a.b
      Read a
      If a = 1
        DisplaySprite(0, mx*32, my*32)
      EndIf
      
    Next
  Next
  FlipBuffers()
  
  Delay(10)
Until Quit = 1
End
DataSection
  Map:
  Data.b 1, 1, 1, 1, 1, 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, 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, 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, 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, 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, 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, 0, 0, 0, 0, 0, 1
  Data.b 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 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, 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, 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, 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, 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, 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, 1, 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, 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, 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, 1, 1, 1, 1, 1
EndDataSection