Code: Alles auswählen
InitSprite()
InitSprite3D()
InitKeyboard()
InitSound()
InitMovie()
;Procedure Collision
Procedure BoxKolli(X1,Y1,W1,H1, X2,Y2,W2,H2)
If X1<X2+W2 And X1+W1>X2
If Y1<Y2+H2 And Y1+H1>Y2
ProcedureReturn 1
EndIf
EndIf
ProcedureReturn 0
EndProcedure
#W=16
#H=16
s=16
l=16
;Leveldaten
Dim Feld(#W,#H)
Dim solid(s,l)
For i=0 To 16 Step 1
solid(i,11)=1
Next
;Variables
audio=100
Score=0
;Screen
ExamineDesktops()
OpenWindow(0,0,0,1024,768,"Basic Ghost v1.0")
OpenWindowedScreen(WindowID(0),0,0,1024,768,0,0,0)
;Sound
LoadSound(0,"sfx\flag.wav")
LoadMovie(0,"sfx\music\background.mp3")
;Jetzt brauchen wir noch ein paar Grafiken
LoadSprite(0,"gfx\player.bmp",0)
TransparentSpriteColor(0,$FFFFFF)
LoadSprite(1,"gfx\stone.bmp",0)
TransparentSpriteColor(1,$FFFFFF)
LoadSprite(2,"gfx\sun.bmp",0)
LoadSprite(20,"gfx\sun.bmp",#PB_Sprite_Texture)
LoadSprite(3,"gfx\door.bmp",0)
TransparentSpriteColor(3,$FFFFFF)
LoadSprite(4,"gfx\next-level.bmp",0)
TransparentSpriteColor(4,$FFFFFF)
CreateSprite3D(1,20)
;Die Variabeln für den Spieler
Define.l PlayerX,PlayerY;Position
Define.f MoveX,MoveY
PlayerW=SpriteWidth(0) ;Breite des Spielers
PlayerH=SpriteHeight(0);Höhe des Spielers
TileW=SpriteWidth(1) ;Breite eines Tiles
TileH=SpriteHeight(1);Höhe eines Tiles
Define.b OnGround;
For i=0 To 10 Step 1
PlayMovie(0,WindowID(0))
Next
Repeat
ExamineKeyboard()
Start3D()
If IsScreenActive()
ClearScreen(RGB(100,0,255))
ExamineKeyboard()
If KeyboardPushed(#PB_Key_Escape)
End
EndIf
MoveX=0
MoveY+0.5
If KeyboardPushed(#PB_Key_Left)
MoveX-5
EndIf
If KeyboardPushed(#PB_Key_Right)
MoveX+5
EndIf
If OnGround
If KeyboardPushed(#PB_Key_Space)
MoveY=-15 ;Größerer Wert=Höherer Sprung
PlaySound(0)
EndIf
EndIf
;Variables Player
PlayerY+MoveY
OnGround=0
Hit=0
;***********Not Solid***********
;Collision Y
For x=0 To #W
For y=0 To #H
If Feld(x,y)=1
If BoxKolli(x*TileW,y*TileH,TileW,TileH,PlayerX,PlayerY,PlayerW,PlayerH) ;
Feld(x,y)=0
Score=Score+1
Hit=1
If MoveY<0;
PlayerY=Y*TileH+TileH;Untere Seite
ElseIf MoveY>0
OnGround=1
PlayerY=Y*TileH-PlayerH;Linke Seite
EndIf
EndIf
EndIf
Next y
Next x
If Hit=1
MoveY=0
EndIf
;Collision X
PlayerX+MoveX
Hit=0
For x=0 To #W
For y=0 To #H
If Feld(x,y)=1
If BoxKolli(x*TileW,y*TileH,TileW,TileH,PlayerX,PlayerY,PlayerW,PlayerH)
Hit=1
If MoveX<0
PlayerX=X*TileW+TileW
ElseIf MoveX>0
PlayerX=X*TileW-PlayerW
EndIf
EndIf
EndIf
Next y
Next x
If Hit=1
MoveX=0
EndIf
;***********Solid***********
;Colision Y
For x=0 To s
For y=0 To l
If solid(x,y)=1
If BoxKolli(x*TileW,y*TileH,TileW,TileH,PlayerX,PlayerY,PlayerW,PlayerH)
Hit=1
If MoveY<0
PlayerY=Y*TileH+TileH;Untere Seite
ElseIf MoveY>0
OnGround=1
PlayerY=Y*TileH-PlayerH;Linke Seite
EndIf
EndIf
EndIf
Next y
Next x
If Hit=1
MoveY=0
EndIf
;Collision X
For x=0 To s
For y=0 To l
If solid(x,y)=1
If BoxKolli(x*TileW,y*TileH,TileW,TileH,PlayerX,PlayerY,PlayerW,PlayerH)
Hit=1
If MoveX<0
PlayerX=X*TileW+TileW
ElseIf MoveX>0
PlayerX=X*TileW-PlayerW
EndIf
EndIf
EndIf
Next y
Next x
If Hit=1
MoveX=0
EndIf
If SpriteCollision(0,PlayerX,PlayerY,3,800,650)=1
DisplayTransparentSprite(4,500,500)
For i=0 To 16 Step 1
Feld(i,11)=1
Next
For i=0 To 9 Step 1
Feld(i,9)=1
Next
For i=0 To 9 Step 1
Feld(i,3)=1
Next
EndIf
;Draw solid
For x=0 To s
For y=0 To l
Select solid(x,y)
Case 0
Case 1
DisplayTransparentSprite(1,x*TileW,y*TileH)
EndSelect
Next y
Next x
;Draw not solid
For x=0 To #W
For y=0 To #H
Select Feld(x,y)
Case 0
Case 1
DisplayTransparentSprite(1,x*TileW,y*TileH)
EndSelect
Next y
Next x
;Display Sprites
DisplayTransparentSprite(0,PlayerX,PlayerY)
DisplayTransparentSprite(3,800,650)
DisplaySprite3D(1,100,100)
RotateSprite3D(1,2, #PB_Relative)
FlipBuffers()
EndIf
If KeyboardReleased(#PB_Key_PadEnter)
PlayerY=32
EndIf
If KeyboardReleased(#PB_Key_Add)
audio=audio+10
MovieAudio(0,audio,0)
If audio>=100
audio=100
EndIf
EndIf
If KeyboardReleased(#PB_Key_PadEnter)
PlayerY=32
EndIf
If KeyboardReleased(#PB_Key_Subtract)
audio=audio-10
MovieAudio(0,audio,0)
If audio>=100
audio=100
EndIf
EndIf
If KeyboardReleased(#PB_Key_R)
For i=0 To 16 Step 1
Feld(i,11)=1
Next
PlayerX=0
PlayerY=0
MoveY=0
Score=0
EndIf
ForEver