Hier mein ganzer Spielcode:
JaJa alles nur Subs
ist doch nur ein kleines Spiel
Code: Alles auswählen
InitSprite()
InitKeyboard()
UseJPEGImageDecoder()
OpenScreen(1024,768,32,"Snake")
LoadSprite(0,"E:\Bilder\Weltraum.jpeg")
LoadSprite(1,"E:\Bilder\Star.bmp")
LoadSprite(2,"E:\Bilder\Upgrade.bmp")
Structure Tile
X.l
Y.l
EndStructure
NewList Snake.tile()
NewList OldUpgrade.tile()
Global R.b, Quit.b,Pause.b : R = 1
Global Upgrade.b, UpgradeX.l, UpgradeY.l, Ak.b
Global Score.l, Time.l
Gosub FirstSnake
Procedure PlayerControl()
Repeat
MaxElements = CountList(Snake())
Dim ItemsX(MaxElements)
Dim ItemsY(MaxElements)
Item = 0
ForEach Snake()
ItemsX(Item) = Snake()\X
ItemsY(Item) = Snake()\Y
If Item = 0
If R = 3 : Snake()\Y + 35
ElseIf R = 1 : Snake()\Y - 35
ElseIf R = 2 : Snake()\X + 35
ElseIf R = 4 : Snake()\X - 35 : EndIf
Else
Snake()\X = ItemsX(Item-1)
Snake()\Y = ItemsY(Item-1)
EndIf
item + 1
Next
ForEach Snake()
If Snake()\Y < - 17 : Snake()\Y = 752
ElseIf Snake()\Y > 751 : Snake()\Y = - 18
ElseIf Snake()\X < - 17 : Snake()\X = 1020
ElseIf Snake()\X > 1007 : Snake()\X = - 30 : EndIf
Next
Delay(70)
ForEver
EndProcedure
ThreadIDPlayerControl = CreateThread(@PlayerControl(),0)
StartTime = ElapsedMilliseconds()
Repeat
ExamineKeyboard()
ClearScreen(0,0,0)
DisplaySprite(0,0,0) ;Hintergrund
Element = 0 ;Tot? funct noch nicht
ForEach Snake()
If Element = 0
FirstX = Snake()\X
FirstY = Snake()\Y
ElseIf Element > 0 And SpriteCollision(1, FirstX, FirstY, 1, Snake()\X, Snake()\Y)
Gosub KillSnake
EndIf
DisplayTransparentSprite(1,Snake()\X,Snake()\Y)
Element + 1
Next
Gosub Hud ;Mein Problem
Gosub Upgrade ;Upgrade zufällig auf Bildschirm
Gosub AddSnake ;Schlange um 1 verlänger wenn eine kollision anliegt
FlipBuffers()
If KeyboardPushed(#PB_Key_Up) And R <> 3 : R = 1 ;Steuerung
ElseIf KeyboardPushed(#PB_Key_Right) And R <> 4 : R = 2
ElseIf KeyboardPushed(#PB_Key_Down) And R <> 1 : R = 3
ElseIf KeyboardPushed(#PB_Key_Left) And R <> 2 : R = 4 : EndIf
If KeyboardPushed(#PB_Key_Escape) : Quit = 1 : EndIf
Delay(1) ;kleine Pause für CPU :-)
Until Quit = 1
End
KillSnake: ;Neu wenn tot
StartTime = ElapsedMilliseconds()
Score = 0
ClearList(Snake())
Gosub FirstSnake:
R = 1
Return
Hud: ;Mein Problem
Time = ElapsedMilliseconds()-StartTime
StartDrawing(ScreenOutput())
DrawingMode(1)
FrontColor(255,255,0)
Locate(5,5)
DrawText("Score: "+Str(Score)+" Time: "+Str(Time/1000))
StopDrawing()
Return
Upgrade: ;Das UpgradeFeld
If Upgrade = 0
UpgradeX = Random(28)*35+5
UpgradeY = Random(20)*35+17
Upgrade = 1
Else
DisplayTransparentSprite(2,UpgradeX,UpgradeY)
FirstElement(Snake())
If SpriteCollision(2,UpgradeX,UpgradeY,1,Snake()\X,Snake()\Y)
Upgrade = 0
AddElement(OldUpgrade())
OldUpgrade()\X = UpgradeX
OldUpgrade()\Y = UpgradeY
EndIf
EndIf
Return
addsnake: ;Schlange verlängern
LastElement(Snake())
ForEach OldUpgrade()
If OldUpgrade()\X = Snake()\X And Snake()\Y = OldUpgrade()\Y
Ak + 1
EndIf
If (OldUpgrade()\X <> Snake()\X Or Snake()\Y <> OldUpgrade()\Y) And Ak > 0
Ak - 1
Score + 100
AddElement(Snake())
Snake()\X = OldUpgrade()\X
Snake()\Y = OldUpgrade()\Y
DeleteElement(OldUpgrade())
EndIf
Next
Return
FirstSnake: ;Anfangsschlange
X = 495
Y = 367
For YY = 0 To 175 Step 35
AddElement(Snake())
Snake()\X = X
Snake()\Y = Y + YY
Next
Return
wiegesagt ist noch NICHT fertig
muss noch aufräumen und son Scheiß
[EDIT] OK das mit TOT habe ich hinbekommen!