da weder email noch PN zu funkt. scheint post ich es halt mal hier
Code:
;###################################################################################################
;# keyboard-handling geändert
;# variablen hinzugefügt
;# structure enemyS definiert und LinkedList davon erstellt (die liste mit den gengnern, sowohl gute als auch bööööse)
;# and some other sruff...
;###################################################################################################
Global Gamestate = 0
Global ScreenWidth = 1280
Global ScreenHeight = 1024
Global Highscore = 0
Global Score = 0
Global PlayerX = ScreenWidth/2-32
Global PlayerY = ScreenHeight/2-32
Global PlayerLook = 5
Global PlayerLookLeft = 5
Global PlayerLookRight = 6
Global EnemyX = Random(ScreenWidth-32)
Global EnemyY = Random(ScreenHeight-32)
Global BlubX = 50
Global BlubY = ScreenHeight
Global BlaseYa = ScreenHeight
Global BlaseYb = ScreenHeight+Random(ScreenHeight)
Global BlaseYc = ScreenHeight+Random(ScreenHeight)
Global BlaseXa = Random(ScreenWidth-18)
Global BlaseXb = Random(ScreenWidth-18)
Global BlaseXc = Random(ScreenWidth-18)
;#################################################### neuer stuff
Global speed.l=8
Global YumW.l
Global YumH.l
Global goodW.l
Global goodH.l
Global badW.l
Global badH.l
Global goodLook.l
Global badLook.l
Global enemyMax.l
Structure enemyS
type.l ; 1=good, 0=bad
x.l ; x-position
y.l ; y-position
alpha.l ; bewegunswinkel
counter.l ; so ne art alter, wird nur für die schwingung benötigt
EndStructure
Global NewList enemies.enemyS() ; <<<<< hier wird die liste mit den gegnern erstellt, jeder gegner hat also eine x,y,typ,alpha,counter ect..die liste ist nun aber voresrt leer und wird im spielverlauf mit addelement gefüllt.
;##########################################################
If InitSound() = 0
MessageRequester("Initialisation Error", "Cannot initialize DirectSound! The Game will now exit.")
End
EndIf
If InitKeyboard() = 0
MessageRequester("Initialisation Error", "Cannot initialize DirectInput! The Game will now exit.")
End
EndIf
If InitSprite() = 0
MessageRequester("Initialisation Error", "Cannot initialize DirectDraw! The Game will now exit.")
End
EndIf
If UsePNGImageDecoder() = 0
MessageRequester("Initialisation Error", "Cannot initialize PNG Image Decoder! The Game will now exit.")
End
EndIf
If OpenScreen(ScreenWidth, ScreenHeight, 32, "Plankton") = 0
MessageRequester("Initialisation Error", "Cannot open Screen! The Game will now exit.")
End
EndIf
CatchSprite(1, ?Include1)
CatchSprite(2, ?Include2) :goodW=SpriteWidth(2) : goodH=SpriteHeight(2)
CatchSprite(3, ?Include3)
CatchSprite(4, ?Include4)
CatchSprite(5, ?Include5)
CatchSprite(6, ?Include6) :YumW=SpriteWidth(6) : YumH=SpriteHeight(6)
CatchSprite(7, ?Include7)
CatchSprite(8, ?Include8) :badW=SpriteWidth(8) : badH=SpriteHeight(8)
CatchSprite(9, ?Include9)
CatchSprite(12, ?Include12)
CatchSprite(13, ?Include13)
DataSection
Include1: IncludeBinary "Plankton_LEFT.png"
Include2: IncludeBinary "Plankton_RIGHT.png"
Include3: IncludeBinary "Titel.png"
Include4: IncludeBinary "Ende.png"
Include5: IncludeBinary "YumYum_LEFT.png"
Include6: IncludeBinary "YumYum_RIGHT.png"
Include7: IncludeBinary "BadPlankton_LEFT.png"
Include8: IncludeBinary "BadPlankton_RIGHT.png"
Include9: IncludeBinary "Blub.png"
Include12: IncludeBinary "Alge.png"
Include13: IncludeBinary "Blase.png"
EndDataSection
LoadFont(0, "Comic Sans MS", 8, #PB_Font_HighQuality)
LoadFont(1, "Comic Sans MS", 8, #PB_Font_HighQuality | #PB_Font_Bold)
Repeat
FlipBuffers()
ClearScreen(RGB(90, 150, 255))
ExamineKeyboard()
DisplaySprite(12, ScreenWidth-132, ScreenHeight-514)
Select Gamestate
Case 0
DisplayTransparentSprite(9, 50, BlubY)
DisplayTransparentSprite(3, ScreenWidth/2-128, ScreenHeight/2-64)
StartDrawing(ScreenOutput())
DrawingMode(1) : DrawingFont(FontID(1))
DrawText(ScreenWidth/2-TextWidth("Um zu spielen, drücke 'Return'!")/2, ScreenHeight/2+64, "Um zu spielen, drücke Enter!", RGB(255, 255, 255))
DrawText(ScreenWidth/2-TextWidth("Hilfe:")/2, ScreenHeight/2+90, "Hilfe:", RGB(255, 255, 255))
DrawingFont(FontID(0))
DrawText(ScreenWidth/2-TextWidth("Du steuerst 'YumYum' einfach mit den Pfeiltasten.")/2, ScreenHeight/2+105, "Du steuerst 'YumYum' einfach mit den Pfeiltasten.", RGB(255, 255, 255))
DrawingFont(FontID(1))
DrawText(ScreenWidth/2-TextWidth("Ziel:")/2, ScreenHeight/2+120, "Ziel:", RGB(255, 255, 255))
DrawingFont(FontID(0))
DrawText(ScreenWidth/2-TextWidth("Ist es, so viele 'Leckers' wie möglich zu machen indem man durch berühren die anderen Planktons auffrisst.")/2, ScreenHeight/2+135,"Ist es, so viele 'Leckers' wie möglich zu machen indem man durch berühren die anderen Planktons auffrisst.", RGB(255, 255, 255))
DrawingFont(FontID(1))
DrawText(ScreenWidth/2-TextWidth("Tip:")/2, ScreenHeight/2+150, "Tip:", RGB(255, 255, 255))
DrawingFont(FontID(0))
DrawText(ScreenWidth/2-TextWidth("Halte dich von den schlecht gelaunten Planktons fern, die bekommen dir nicht...")/2, ScreenHeight/2+165, "Halte dich von den schlecht gelaunten Planktons fern, die bekommen dir nicht...", RGB(255, 255, 255))
DrawText(5, ScreenHeight-20, "Plankton Version 1.0.0.0 Copyright 2006 by Peter 'the Nameless' Horn", RGB(200, 200, 200))
StopDrawing()
If KeyboardPushed(#PB_Key_Return)
StartTime = ElapsedMilliseconds()
Gamestate = 1
EndIf
BlubY = BlubY-1
If BlubY = -ScreenHeight/2
BlubY = ScreenHeight
EndIf
generalCounter=0 ;<<<<<<<<<<<<<<<<<<< counter zurücksetzen
Case 1
generalCounter+1
NewTime = ElapsedMilliseconds()
ElapsedTime = NewTime-StartTime
RemainingTime = 60000-ElapsedTime
If RemainingTime = 0 Or RemainingTime < 0
Gamestate = 2
ElseIf RemainingTime > 10001
RedLevel = 255
ElseIf RemainingTime < 10001
RedLevel = 0
EndIf
;############################################################################ YumYum-moves - die abfragen wo das AND mit drin is müssen zuerst kommen! damit sie überhaupt bearbeitet werden. (hab's jetzt richtig rum gemacht)
If KeyboardPushed(#PB_Key_Left) And KeyboardPushed(#PB_Key_Up)
PlayerX = PlayerX-speed/2
PlayerY = PlayerY-speed/2
ElseIf KeyboardPushed(#PB_Key_Right) And KeyboardPushed(#PB_Key_Up)
PlayerX = PlayerX+speed/2
PlayerY = PlayerY-speed/2
ElseIf KeyboardPushed(#PB_Key_Right) And KeyboardPushed(#PB_Key_Down)
PlayerX = PlayerX+speed/2
PlayerY = PlayerY+speed/2
ElseIf KeyboardPushed(#PB_Key_Left) And KeyboardPushed(#PB_Key_Down)
PlayerX = PlayerX-speed/2
PlayerY = PlayerY+speed/2
ElseIf KeyboardPushed(#PB_Key_Left)
PlayerLook = PlayerLookLeft
PlayerX = PlayerX-speed
ElseIf KeyboardPushed(#PB_Key_Right)
PlayerLook = PlayerLookRight
PlayerX = PlayerX+speed
ElseIf KeyboardPushed(#PB_Key_Up)
PlayerY = PlayerY-speed
ElseIf KeyboardPushed(#PB_Key_Down)
PlayerY = PlayerY+speed
EndIf
PlayerX+Random(3)-1
PlayerY+Random(3)-1
If PlayerX<0 : PlayerX=0
ElseIf PlayerX>ScreenWidth-YumW : PlayerX=ScreenWidth-YumW : EndIf
If PlayerY<0 : PlayerY=0
ElseIf PlayerY>ScreenHeight-YumH : PlayerY=ScreenHeight-YumH : EndIf
;##### dieser kleine teil ist nur dazu da, damit nicht alle gegner auf einmal wie eine wand kommen und dann lange nichts, sondern nacheinander/gleichmäßig
If ElapsedTime < 10000
enemyMax=ElapsedTime/800
EndIf
;########################################################## neue gegner hinzufügen, falls nötig
If CountList( enemies() ) < enemyMax
AddElement( enemies() )
Select Random(1) ;# der neue gegner wird hinter einer der bildschirmgrenzen platziert
Case 0
enemies()\x=-200
enemies()\y=Random(ScreenHeight)
enemies()\alpha=50-Random(100)
Case 1
enemies()\x=ScreenWidth+200
enemies()\y=Random(ScreenHeight)
enemies()\alpha=230-Random(100)
; ;#falls gegner auch noch von oben kommen/unten sollen, muß du Random(3) nehmen und hier die zusätzlichen seiten bearbeiten
; Case 2
; enemies()\x=Random(ScreenWidth)
; enemies()\y=-200
; Case 3
; enemies()\x=Random(ScreenWidth)
; enemies()\y=ScreenHeight+200
EndSelect
enemies()\type=Random(1) ; ob gut oder böse
EndIf
;########################################################## koordinaten aktualisieren
ForEach enemies()
enemies()\counter+1
a.d=enemies()\alpha*#PI/180
a+Sin( enemies()\counter/6 )
enemies()\x +Cos(a)*4
enemies()\y +Sin(a)*4
If enemies()\x<-300: DeleteElement( enemies() )
ElseIf enemies()\x>ScreenWidth+300: DeleteElement( enemies() )
ElseIf enemies()\y<-300: DeleteElement( enemies() )
ElseIf enemies()\y>ScreenHeight+300: DeleteElement( enemies() )
EndIf
Next
DisplayTransparentSprite(13, BlaseXa, BlaseYa)
DisplayTransparentSprite(13, BlaseXb, BlaseYb)
DisplayTransparentSprite(13, BlaseXc, BlaseYc)
;Gosub DisplayAliens; <- das brauchst du doch nicht mehr, oder?
;############################################################################ display enemies
ForEach enemies()
If enemies()\type;good
If enemies()\alpha>90 Or enemies()\alpha<-90 ;looking right
DisplayTransparentSprite( 1, enemies()\x, enemies()\y )
Else;looking left
DisplayTransparentSprite( 2, enemies()\x, enemies()\y )
EndIf
Else;bad
If enemies()\alpha>90 Or enemies()\alpha<-90
DisplayTransparentSprite( 7, enemies()\x, enemies()\y )
Else
DisplayTransparentSprite( 8, enemies()\x, enemies()\y )
EndIf
EndIf
Next
;#####################################################################
DisplayTransparentSprite(PlayerLook, PlayerX, PlayerY)
StartDrawing(ScreenOutput())
DrawingMode(1) : DrawingFont(FontID(1))
DrawText(3, 3, "Leckers: "+Str(Score)+" (Highscore sind "+Str(Highscore)+" Leckers)", RGB(200, 150, 0))
DrawText(2, 2, "Leckers: "+Str(Score)+" (Highscore sind "+Str(Highscore)+" Leckers)", RGB(255, 200, 0))
DrawText(ScreenWidth/2-TextWidth("Verbleibende Zeit: "+Str(RemainingTime)+"ms")/2+1, 2+1, "Verbleibende Zeit: "+Str(RemainingTime)+"ms", RGB(200, 150, 0))
DrawText(ScreenWidth/2-TextWidth("Verbleibende Zeit: "+Str(RemainingTime)+"ms")/2, 2, "Verbleibende Zeit: "+Str(RemainingTime)+"ms", RGB(255, RedLevel, RedLevel))
DrawText(ScreenWidth/2-TextWidth("Um zu Beenden, Esc oder Strg+Alt+Entf drücken")/2, ScreenHeight-20, "Um zu Beenden, Esc oder Strg+Alt+Entf drücken", RGB(200, 200, 200))
StopDrawing()
BlaseYa = BlaseYa-1
BlaseYb = BlaseYb-1
BlaseYc = BlaseYc-1
If BlaseYa = -ScreenHeight/2
BlaseXa = Random(ScreenWidth-18)
BlaseYa = ScreenHeight
ElseIf BlaseYb = -ScreenHeight/2
BlaseXb = Random(ScreenWidth-18)
BlaseYb = ScreenHeight+Random(ScreenHeight)
ElseIf BlaseYc = -ScreenHeight/2
BlaseXc = Random(ScreenWidth-18)
BlaseYc = ScreenHeight+Random(ScreenHeight)
EndIf
Case 2
DisplayTransparentSprite(9, 50, BlubY)
DisplayTransparentSprite(4, ScreenWidth/2-186, ScreenHeight/2-78)
StartDrawing(ScreenOutput())
DrawingMode(1) : DrawingFont(FontID(1))
DrawText(ScreenWidth/2-TextWidth("Deine Leckers: ")/2+1, ScreenHeight/2+101, "Deine Leckers: "+Str(Score), RGB(200, 150, 0))
DrawText(ScreenWidth/2-TextWidth("Deine Leckers: ")/2, ScreenHeight/2+100, "Deine Leckers: "+Str(Score), RGB(255, 200, 0))
If Score > Highscore
DrawText(ScreenWidth/2-TextWidth("NEUER HIGHSCORE!")/2+1, ScreenHeight/2+111, "NEUER HIGHSCORE!", RGB(200, 150, 0))
DrawText(ScreenWidth/2-TextWidth("NEUER HIGHSCORE!")/2, ScreenHeight/2+110, "NEUER HIGHSCORE!", RGB(255, 0, 0))
EndIf
DrawText(ScreenWidth/2-TextWidth("Um noch einmal zu spielen drücke Enter, um aufzuhören Escape")/2+1, ScreenHeight/2+126, "Um noch einmal zu spielen drücke Enter, um aufzuhören Escape", RGB(200, 200, 200))
DrawText(ScreenWidth/2-TextWidth("Um noch einmal zu spielen drücke Enter, um aufzuhören Escape")/2, ScreenHeight/2+125, "Um noch einmal zu spielen drücke Enter, um aufzuhören Escape", RGB(255, 255, 255))
StopDrawing()
If KeyboardReleased(#PB_Key_Return)
Highscore = Score
Score = 0
StartTime = ElapsedMilliseconds()
GameState = 1
EndIf
BlubY = BlubY-1
If BlubY = -ScreenHeight/2
BlubY = ScreenHeight
EndIf
EndSelect
If KeyboardPushed(#PB_Key_LeftAlt) And KeyboardPushed(#PB_Key_LeftControl) And KeyboardPushed(#PB_Key_Delete)
CloseScreen()
End
EndIf
Delay(10)
Until KeyboardPushed(#PB_Key_Escape)