Code: Alles auswählen
EnableExplicit
InitSprite()
InitKeyboard()
;-Konstanten
#tmapX = 31
#tmapY = 23
#SPEED = 1
#SCHUSSSPEED = 2
Define.f x1, x2, y1, y2, Schuss, SchussX, SpeedX, SchussY, SpeedY, a, b, c
Define Quit, pmapX, pmapY
Dim Map.b(#tmapX, #tmapY)
Procedure Collision(x.f, y.f)
Protected pmapX, pmapY
Shared Map()
For pmapY = 0 To #tmapY
For pmapX = 0 To #tmapX
If Map(pmapX, pmapY) = 1
If SpriteCollision(0, x, y, 1, pmapX*32, pmapY*32)
ProcedureReturn 1
EndIf
EndIf
Next
Next
EndProcedure
;-Map einlesen
Restore Map
For pmapY = 0 To #tmapY
For pmapX = 0 To #tmapX
Read Map(pmapX, pmapY)
Next
Next
;-Bildschrim öffnen
OpenScreen(1024, 768, 32, "Test")
;-Sprites createn+malen
CreateSprite(0, 32, 32)
StartDrawing(SpriteOutput(0))
Box(0, 0, 32, 32, RGB(255, 255, 255))
StopDrawing()
CreateSprite(1, 32, 32)
StartDrawing(SpriteOutput(1))
Box(0, 0, 32, 32, RGB(0, 0, 255))
StopDrawing()
CreateSprite(2, 32, 32)
StartDrawing(SpriteOutput(2))
Box(0, 0, 32, 32, RGB(255, 0, 255))
StopDrawing()
CreateSprite(3, 10, 10)
StartDrawing(SpriteOutput(3))
Circle(5, 5, 5, RGB(0, 255, 100))
StopDrawing()
CreateSprite(4, 1024, 768)
TransparentSpriteColor(4,RGB(0,0,0))
StartDrawing(SpriteOutput(4))
Box(0, 0, 1024, 768, RGB(0, 0, 0))
StopDrawing()
;-Startvariablen
x1.f = 32
y1.f = 32
x2.f = 1024 - 64
y2.f = 768 - 64
;-Framerate
;SetFrameRate(60)
Repeat
ExamineKeyboard()
;-Steuerung Spieler1
If KeyboardPushed(#PB_Key_Up)
If Collision(x1, y1-#SPEED) = 0
y1 - #SPEED
EndIf
EndIf
If KeyboardPushed(#PB_Key_Down)
If Collision(x1, y1+#SPEED) = 0
y1 + #SPEED
EndIf
EndIf
If KeyboardPushed(#PB_Key_Left)
If Collision(x1-#SPEED, y1) = 0
x1 - #SPEED
EndIf
EndIf
If KeyboardPushed(#PB_Key_Right)
If Collision(x1 + #SPEED, y1) = 0
x1 + #SPEED
EndIf
EndIf
;-Steuerung Spieler2
If KeyboardPushed(#PB_Key_W)
If Collision(x2, y2-#SPEED) = 0
y2 - #SPEED
EndIf
EndIf
If KeyboardPushed(#PB_Key_S)
If Collision(x2, y2+#SPEED) = 0
y2 + #SPEED
EndIf
EndIf
If KeyboardPushed(#PB_Key_A)
If Collision(x2-#SPEED, y2) = 0
x2 - #SPEED
EndIf
EndIf
If KeyboardPushed(#PB_Key_D)
If Collision(x2 + #SPEED, y2) = 0
x2 + #SPEED
EndIf
EndIf
;beenden
If KeyboardPushed(#PB_Key_Escape)
Quit = 1
EndIf
;-Sprites erstellen
ClearScreen(RGB(0,255,255))
;-------->Schuss
If KeyboardReleased(#PB_Key_L)
Schuss = 1
SchussX.f = x1 + 16
SchussY.f = y1 + 16
a.f = x2 - x1
b.f = y2 - y1
c.f = Sqr(a*a + b*b)
SpeedX.f = a / c * #SCHUSSSPEED
SpeedY.f = b / c * #SCHUSSSPEED
EndIf
If Schuss = 1
SchussX + SpeedX
SchussY + SpeedY
; If Map(Int(SchussX / 32), Int(SchussY / 32)) = 1
; Schuss = 0
; EndIf
If SpriteCollision(3, SchussX, SchussY, 2, x2, y2)
Schuss = 0
EndIf
If SchussX < 0 Or SchussX > 1024 Or SchussY < 0 Or SchussY > 768
Schuss = 0
EndIf
DisplaySprite(3, SchussX, SchussY)
EndIf
;-Spieler anzeigen
DisplaySprite(1, x1, y1)
DisplaySprite(2, x2, y2)
For pmapY = 0 To #tmapY
For pmapX=0 To #tmapX
If Map(pmapX, pmapY) = 1
DisplaySprite(0, pmapX*32, pmapY*32)
EndIf
Next
Next
Delay(1) ; 100% CPU auslastung verhindern
FlipBuffers()
Until Quit = 1
End
;-Map daten
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, 1, 1, 1, 1, 1, 1, 1
Data.b 1, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1
Data.b 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1
Data.b 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1
Data.b 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1
Data.b 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1
Data.b 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 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, 1, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1
Data.b 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 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, 1, 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, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
Data.b 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1
Data.b 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1
Data.b 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 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, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
Data.b 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1
Data.b 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 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, 1, 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, 1, 1, 1, 1, 1, 1, 1
EndDataSection