pour ce test je me suis inspiré de ce code pour la barre d'énergie.
Code : Tout sélectionner
;auteur Huitbit
;barre d'énergie avec clipsprite
;pb v4.02
;***************************************************
#largeur_barre=200
#hauteur_barre=#largeur_barre/10
InitSprite()
OpenWindow(0,0,0,#largeur_barre,2*#hauteur_barre,"barre d'énergie",#PB_Window_ScreenCentered|#PB_Window_SystemMenu )
OpenWindowedScreen(WindowID(0),0,0,#largeur_barre,2*#hauteur_barre,1,0,0)
;dessin de la barre complète
CreateSprite(0,#largeur_barre,#hauteur_barre)
StartDrawing(SpriteOutput(0))
For i=0 To #hauteur_barre/2
Line(0,i,#largeur_barre,1,RGB(100+15*i,0,0))
Line(0,i+#hauteur_barre/2,#largeur_barre,1,RGB(255-15*i,0,0))
Next i
For i = 1 To 9
Line(#hauteur_barre*i,0,1,#hauteur_barre,RGB(100,100,100))
Next i
StopDrawing()
x=0;niveau d'énergie
dx=1;variation du niveau d'énergie
Repeat
Repeat
Event = WindowEvent()
If Event = #PB_Event_CloseWindow
End
EndIf
Until Event = 0
FlipBuffers()
ClearScreen(RGB(0, 0, 0))
ClipSprite(0,0,0,x,#hauteur_barre);affichage partiel de la barre d'énergie
DisplaySprite(0, 0,10)
x=x+dx
If x>#largeur_barre Or x=<0
dx=-dx
EndIf
ForEver
il doit avoir pas mal d'erreur dans mon code.
Code : Tout sélectionner
;test font,barre d'energie,collision,timer
EnableExplicit
;- Initialisations
If InitSprite()=0 Or InitKeyboard()=0 ;Or InitSound() = 0
MessageRequester("Probleme","Initialisations impossibles",0)
End
EndIf
;fenetre
Enumeration fenetre
#fenetre
EndEnumeration
;font
Enumeration
#font
EndEnumeration
;sprite
Enumeration
#etoile
#etoile2
#etoile3
#Bg
#ravitaillement
#ravitaillement2
#astronaute
#barre_fond
#pieces
#fond_base
#lune
#dessin_intro
#HB
EndEnumeration
Structure Star
Xpos.i
Ypos.i
vit.i
couleur.b
EndStructure
#barre = 550
#NBstar = 99
#Sas = 80
Global i,Event,ctime_oxygene,time_oxygene = 1000/8 ;timer barre oxygene
Global largeur_ecran,hauteur_ecran,ravitaillement_posx,ravitaillement_posy,Astronaute_Posx,Astronaute_Posy,t
Global oxygene,variation_oxygene,player,aff_oxygene,Boost_Oxygene
Global ctime_deplacement,time_deplacement=1000/2
Global affiche_gameover,credits,Vies,Vies_Posx,Vies_Posy
Global Lune_posx,Lune_Posy,ravitaillement2_posx,ravitaillement2_posy,Intro_Posx,Intro_Posy,Intro_logo,Sas,Sas_variation
Global Dim stars.star(#NBstar) ; tableau etoile
Global Lstar,Hstar,Lstarv,Hstarv,Score,base_x,base_y,sas_posx,sas_posy
;variables ecran
largeur_ecran = 1024
hauteur_ecran = 768
ravitaillement_posx = 500
ravitaillement_posy = 380
ravitaillement2_posx = 500
ravitaillement2_posy = 380
Astronaute_Posx = -50
Astronaute_Posy = 380
oxygene = 550
variation_oxygene = 1
vies = 1
Vies_Posx = 10
Vies_Posy =12
credits = 1
Lune_posx = 1024
Lune_Posy = -130
Lstar = 1024
Hstar = 768
Intro_logo = #True
Intro_Posx = 120
Intro_Posy = 0
Sas = 80
Sas_variation=1
Score = 0
base_x =720
base_y = 80
sas_posx = 720
sas_posy = 0
;ecran
OpenWindow(#fenetre,0,0,largeur_ecran,hauteur_ecran,"test font,barre energie,collision,timer",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
OpenWindowedScreen(WindowID(#fenetre),0,0,largeur_ecran,hauteur_ecran)
Procedure newfont()
Protected font
font=LoadFont(#font, "arial",15)
StartDrawing(ScreenOutput())
DrawingMode(#PB_2DDrawing_Transparent)
DrawingFont(FontID(#font))
DrawText(760,700,"Position astronaute X: "+Str(Vies_Posx),RGB(255,255,255))
DrawText(760,730,"Position astronaute Y: "+Str(Vies_Posy),RGB(255,255,255))
DrawText(450,680,"Score : " +Str(Score),RGB(125,125,255))
DrawText(10,680,"Vie : "+Str(vies),RGB(255,255,0))
DrawText(90,680,"Credit : "+Str(credits),RGB(0,155,55))
If player=1
DrawText(470,320,"PLAYER 1",RGB(255,255,155))
EndIf
;si il y a collision avec le sprite ravitaillement et l'astronaute on affiche le message level up.
If SpritePixelCollision(#ravitaillement,ravitaillement_posx,ravitaillement_posy,#astronaute,Astronaute_Posx,Astronaute_Posy):DrawText(470,320,"LEVEL UP",RGB(255,255,155)):EndIf
; on affiche player 1 a la position 50 en x de l'astronaute
If Astronaute_Posx >50:player=1:EndIf
;on desactive le message player 1 à la position en x de 250 de l'astronaute
If Astronaute_Posx >250:player=0:EndIf
If affiche_gameover=#True: DrawText(460,320,"GAME OVER",RGB(255,255,155)):Else:affiche_gameover=#False:EndIf
If aff_oxygene=1: DrawText(250,680,"Oxygene : "+Str(oxygene),RGB(25,125,255)):EndIf
;si oxygene est different de 250 affiche oxygene interface
If oxygene<>250:aff_oxygene=1:EndIf
;si oxygene et plus bas que 250 affiche message critique
If oxygene<250:DrawText(200,680,"Oxygene niveau critique ",RGB(t+255,0,0)):aff_oxygene=0:EndIf
If Boost_Oxygene=#True:DrawText(250,655,"Boost Oxygene ",RGB(0,t+255,0)):EndIf
;intensité font
If t>0:t-255:Else:t+1:EndIf
StopDrawing()
EndProcedure
;--- barre d'oxygene ---
Procedure Bg()
CreateSprite(#Bg,550,10,#PB_Sprite_AlphaBlending)
StartDrawing(SpriteOutput(#Bg))
For i = 0 To #barre
Box(0,0,550,10,RGB(25,155,255))
Next i
StopDrawing()
ClipSprite(#Bg,0,0,oxygene,#barre)
DisplayTransparentSprite(#Bg,largeur_ecran/2-485,hauteur_ecran-45)
EndProcedure
;--- Astronaute ---
Procedure astronaute()
CreateSprite(#astronaute,120,120,#PB_Sprite_AlphaBlending|#PB_Sprite_PixelCollision)
StartDrawing(SpriteOutput(#astronaute))
Circle(28,28,18,$666666)
Circle(34,28,13,RGB(0,155,255))
Box(18,45,20,55,$666666)
Box(5,45,12,30,$ffffff)
Box(20,45,12,30,$ccffff)
Box(30,65,12,10,$ccffff)
Box(5,15,2,30,$ffffff)
Box(15,95,35,10,$FFFFFF)
StopDrawing()
TransparentSpriteColor(#astronaute,RGB(0,0,0))
ZoomSprite(#astronaute,60,60)
DisplayTransparentSprite(#astronaute,Astronaute_Posx,Astronaute_Posy)
DisplayTransparentSprite(#astronaute,Vies_Posx,Vies_Posy+15)
EndProcedure
Procedure ravitaillement()
CreateSprite(#ravitaillement,80,80,#PB_Sprite_AlphaBlending|#PB_Sprite_PixelCollision)
StartDrawing(SpriteOutput(#ravitaillement))
Box(0,0,80,80,RGB(175,175,175))
Box(0,0,80,3,RGB(125,125,125))
Box(0,2,3,79,RGB(125,125,125))
Box(0,80,80,3,RGB(125,125,125))
Box(77,2,3,79,RGB(125,125,125))
Box(0,15,80,3,RGB(125,125,125))
Box(3,18,74,7,RGB(0,t+255,0))
Box(0,25,80,3,RGB(125,125,125))
Box(0,50,80,3,RGB(125,125,125))
Box(3,53,74,7,RGB(255,255,115))
Box(0,60,80,3,RGB(125,125,125))
Circle(12,9,2,RGB(115,115,115))
Circle(66,9,2,RGB(115,115,115))
Circle(12,71,2,RGB(115,115,115))
Circle(66,71,2,RGB(115,115,115))
StopDrawing()
TransparentSpriteColor(#ravitaillement,RGB(0,0,0))
ZoomSprite(#ravitaillement,32,32)
DisplayTransparentSprite(#ravitaillement,ravitaillement_posx,ravitaillement_posy)
EndProcedure
Procedure ravitaillement2()
CreateSprite(#ravitaillement2,80,80,#PB_Sprite_AlphaBlending|#PB_Sprite_PixelCollision)
StartDrawing(SpriteOutput(#ravitaillement2))
Box(0,0,80,80,RGB(175,175,175))
Box(0,0,80,3,RGB(125,125,125))
Box(0,0,3,79,RGB(125,125,125))
Box(0,80,80,3,RGB(125,125,125))
Box(77,2,3,79,RGB(125,125,125))
Box(0,15,80,3,RGB(125,125,125))
Box(3,18,74,7,RGB(Random(255),Random(255),Random(255)))
Box(0,25,80,3,RGB(125,125,125))
Box(0,50,80,3,RGB(125,125,125))
Box(3,53,74,7,RGB(Random(255),Random(255),Random(255)))
Box(0,60,80,3,RGB(125,125,125))
Circle(12,9,2,RGB(115,115,115))
Circle(66,9,2,RGB(115,115,115))
Circle(12,71,2,RGB(115,115,115))
Circle(66,71,2,RGB(115,115,115))
StopDrawing()
EndProcedure
;--- décor base
Procedure decor_base()
CopySprite(#ravitaillement,#fond_base)
;test decor base
DisplayTransparentSprite(#fond_base,0,0)
DisplayTransparentSprite(#fond_base,480,0)
DisplayTransparentSprite(#fond_base,800,0)
DisplayTransparentSprite(#fond_base,960,0)
DisplayTransparentSprite(#fond_base,160,0)
DisplayTransparentSprite(#fond_base,320,0)
DisplayTransparentSprite(#fond_base,640,0)
ZoomSprite(#fond_base,80,40)
DisplayTransparentSprite(#fond_base,80,80)
DisplayTransparentSprite(#fond_base,0,80)
DisplayTransparentSprite(#fond_base,160,80)
DisplayTransparentSprite(#fond_base,240,80)
DisplayTransparentSprite(#fond_base,320,80)
DisplayTransparentSprite(#fond_base,400,80)
DisplayTransparentSprite(#fond_base,480,80)
DisplayTransparentSprite(#fond_base,560,80)
DisplayTransparentSprite(#fond_base,640,80)
DisplayTransparentSprite(#fond_base,base_x,base_y)
DisplayTransparentSprite(#fond_base,800,80)
DisplayTransparentSprite(#fond_base,880,80)
DisplayTransparentSprite(#fond_base,960,80)
EndProcedure
;--- Lune ---
Procedure Lune()
CreateSprite(#Lune,360,360,#PB_Sprite_AlphaBlending)
StartDrawing(SpriteOutput(#Lune))
Circle(178,172,37,RGB(t+255,0,0))
Circle(178,172,36,RGB(Random(255),Random(255),Random(255)))
Circle(180,172,35,RGB(125,155,155))
Circle(228,184,6,RGB(115,115,t+255))
StopDrawing()
If Lune_Posx<-250:Lune_Posx=1024:EndIf
TransparentSpriteColor(#lune,RGB(0,0,0))
DisplayTransparentSprite(#Lune,Lune_Posx,Lune_Posy)
Lune_posx - 1
EndProcedure
;-- piece ---
Procedure pieces()
CreateSprite(#pieces,60,60,#PB_Sprite_AlphaBlending)
StartDrawing(SpriteOutput(#pieces))
Circle(34,28,15,RGB(255,255,255))
Circle(34,28,14,RGB(155,155,0))
Circle(34,28,12,RGB(155,125,0))
Circle(34,28,8,RGB(155,155,100))
StopDrawing()
EndProcedure
;fenetre base
Procedure Hb()
CreateSprite(#HB,80,80,#PB_Sprite_AlphaBlending)
StartDrawing(SpriteOutput(#HB))
Box(0,0,80,80,RGB(175,175,175))
Box(0,0,80,3,RGB(125,125,125))
Box(0,0,3,79,RGB(125,125,125))
Box(0,80,80,3,RGB(125,125,125))
Box(77,2,3,79,RGB(125,125,125))
Box(0,78,80,3,RGB(125,125,125))
Box(5,15,70,50,RGB(0,0,0))
Circle(12,9,2,RGB(115,115,115))
Circle(66,9,2,RGB(115,115,115))
Circle(66,70,2,RGB(115,115,115))
Circle(12,70,2,RGB(115,115,115))
StopDrawing()
TransparentSpriteColor(#HB,RGB(0,0,0))
DisplayTransparentSprite(#HB,480,0)
DisplayTransparentSprite(#HB,400,0)
DisplayTransparentSprite(#HB,240,0)
DisplayTransparentSprite(#HB,80,0)
DisplayTransparentSprite(#HB,560,0)
DisplayTransparentSprite(#HB,880,0)
EndProcedure
;--- sas ----
Procedure Sas()
CreateSprite(#sas,80,80,#PB_Sprite_AlphaBlending)
StartDrawing(SpriteOutput(#sas))
;Box(0,0,100,100,RGB(0,255,255))
Box(0,0,80,80,RGB(175,175,175))
Box(0,0,80,3,RGB(125,125,125))
Box(0,0,3,79,RGB(125,125,125))
Box(0,80,80,3,RGB(125,125,125))
Box(77,2,3,79,RGB(125,125,125))
Box(0,78,80,3,RGB(125,125,125))
Box(5,15,70,50,RGB(125,125,125))
Box(15,25,45,15,RGB(0,0,0))
Box(15,45,45,15,RGB(255,255,115))
Circle(12,9,2,RGB(115,115,115))
Circle(66,9,2,RGB(115,115,115))
Circle(66,70,2,RGB(115,115,115))
Circle(12,70,2,RGB(115,115,115))
StopDrawing()
TransparentSpriteColor(#sas,RGB(0,0,0))
ClipSprite(#sas,0,0,#sas,sas)
DisplayTransparentSprite(#Sas,sas_posx,sas_posy);:DisplayTransparentSprite(#sas,640,0)
If sas>#sas Or sas=<20:sas_variation=-sas_variation:EndIf
EndProcedure
;--- timer oxygene ---
Procedure timer_oxygene()
If ElapsedMilliseconds() - ctime_oxygene > time_oxygene ;timer barre oxygene
ctime_oxygene = ElapsedMilliseconds()
oxygene=oxygene - variation_oxygene
EndIf
EndProcedure
;--- Logo ---
Procedure Affiche_logo()
;o
ZoomSprite(#Sas,16,16)
DisplayTransparentSprite(#Sas,Intro_Posx,Intro_Posy+197)
DisplayTransparentSprite(#Sas,Intro_Posx+17,Intro_Posy+180)
DisplayTransparentSprite(#Sas,Intro_Posx+34,Intro_Posy+180)
DisplayTransparentSprite(#Sas,Intro_Posx+51,Intro_Posy+180)
DisplayTransparentSprite(#Sas,Intro_Posx+67,Intro_Posy+197)
DisplayTransparentSprite(#Sas,Intro_Posx,Intro_Posy+214)
DisplayTransparentSprite(#Sas,Intro_Posx+67,Intro_Posy+214)
DisplayTransparentSprite(#Sas,Intro_Posx,Intro_Posy+231)
DisplayTransparentSprite(#Sas,Intro_Posx+67,Intro_Posy+231)
DisplayTransparentSprite(#Sas,Intro_Posx,Intro_Posy+248)
DisplayTransparentSprite(#Sas,Intro_Posx+67,Intro_Posy+248)
DisplayTransparentSprite(#Sas,Intro_Posx+17,Intro_Posy+264)
DisplayTransparentSprite(#Sas,Intro_Posx+51,Intro_Posy+264)
DisplayTransparentSprite(#Sas,Intro_Posx+34,Intro_Posy+264)
;x
DisplayTransparentSprite(#Sas,Intro_Posx+100,Intro_Posy+180)
DisplayTransparentSprite(#Sas,Intro_Posx+117,Intro_Posy+197)
DisplayTransparentSprite(#Sas,Intro_Posx+134,Intro_Posy+214)
DisplayTransparentSprite(#Sas,Intro_Posx+151,Intro_Posy+231)
DisplayTransparentSprite(#Sas,Intro_Posx+167,Intro_Posy+248)
DisplayTransparentSprite(#Sas,Intro_Posx+184,Intro_Posy+180)
DisplayTransparentSprite(#Sas,Intro_Posx+167,Intro_Posy+197)
DisplayTransparentSprite(#Sas,Intro_Posx+151,Intro_Posy+214)
DisplayTransparentSprite(#Sas,Intro_Posx+134,Intro_Posy+231)
DisplayTransparentSprite(#Sas,Intro_Posx+117,Intro_Posy+248)
DisplayTransparentSprite(#Sas,Intro_Posx+100,Intro_Posy+264)
DisplayTransparentSprite(#Sas,Intro_Posx+184,Intro_Posy+264)
;y
DisplayTransparentSprite(#Sas,Intro_Posx+251,Intro_Posy+231)
DisplayTransparentSprite(#Sas,Intro_Posx+284,Intro_Posy+231)
DisplayTransparentSprite(#Sas,Intro_Posx+234,Intro_Posy+214)
DisplayTransparentSprite(#Sas,Intro_Posx+217,Intro_Posy+197)
DisplayTransparentSprite(#Sas,Intro_Posx+217,Intro_Posy+180)
DisplayTransparentSprite(#Sas,Intro_Posx+317,Intro_Posy+180)
DisplayTransparentSprite(#Sas,Intro_Posx+317,Intro_Posy+197)
DisplayTransparentSprite(#Sas,Intro_Posx+300,Intro_Posy+214)
DisplayTransparentSprite(#Sas,Intro_Posx+267,Intro_Posy+248)
DisplayTransparentSprite(#Sas,Intro_Posx+267,Intro_Posy+264)
;G
DisplayTransparentSprite(#Sas,Intro_Posx+367,Intro_Posy+180)
DisplayTransparentSprite(#Sas,Intro_Posx+384,Intro_Posy+180)
DisplayTransparentSprite(#Sas,Intro_Posx+400,Intro_Posy+180)
DisplayTransparentSprite(#Sas,Intro_Posx+417,Intro_Posy+180)
DisplayTransparentSprite(#Sas,Intro_Posx+351,Intro_Posy+197)
DisplayTransparentSprite(#Sas,Intro_Posx+351,Intro_Posy+214)
DisplayTransparentSprite(#Sas,Intro_Posx+351,Intro_Posy+231)
DisplayTransparentSprite(#Sas,Intro_Posx+351,Intro_Posy+248)
DisplayTransparentSprite(#Sas,Intro_Posx+367,Intro_Posy+264)
DisplayTransparentSprite(#Sas,Intro_Posx+384,Intro_Posy+264)
DisplayTransparentSprite(#Sas,Intro_Posx+400,Intro_Posy+264)
DisplayTransparentSprite(#Sas,Intro_Posx+417,Intro_Posy+264)
DisplayTransparentSprite(#Sas,Intro_Posx+417,Intro_Posy+248)
DisplayTransparentSprite(#Sas,Intro_Posx+417,Intro_Posy+231)
DisplayTransparentSprite(#Sas,Intro_Posx+384,Intro_Posy+231)
DisplayTransparentSprite(#Sas,Intro_Posx+400,Intro_Posy+231)
;E
DisplayTransparentSprite(#Sas,Intro_Posx+468,Intro_Posy+180)
DisplayTransparentSprite(#Sas,Intro_Posx+485,Intro_Posy+180)
DisplayTransparentSprite(#Sas,Intro_Posx+502,Intro_Posy+180)
DisplayTransparentSprite(#Sas,Intro_Posx+451,Intro_Posy+197)
DisplayTransparentSprite(#Sas,Intro_Posx+451,Intro_Posy+214)
DisplayTransparentSprite(#Sas,Intro_Posx+451,Intro_Posy+248)
DisplayTransparentSprite(#Sas,Intro_Posx+519,Intro_Posy+180)
DisplayTransparentSprite(#Sas,Intro_Posx+519,Intro_Posy+264)
DisplayTransparentSprite(#Sas,Intro_Posx+451,Intro_Posy+231)
DisplayTransparentSprite(#Sas,Intro_Posx+468,Intro_Posy+221)
DisplayTransparentSprite(#Sas,Intro_Posx+485,Intro_Posy+221)
DisplayTransparentSprite(#Sas,Intro_Posx+502,Intro_Posy+221)
DisplayTransparentSprite(#Sas,Intro_Posx+519,Intro_Posy+221)
DisplayTransparentSprite(#Sas,Intro_Posx+468,Intro_Posy+264)
DisplayTransparentSprite(#Sas,Intro_Posx+485,Intro_Posy+264)
DisplayTransparentSprite(#Sas,Intro_Posx+502,Intro_Posy+264)
;N
DisplayTransparentSprite(#Sas,Intro_Posx+555,Intro_Posy+180)
DisplayTransparentSprite(#Sas,Intro_Posx+555,Intro_Posy+197)
DisplayTransparentSprite(#Sas,Intro_Posx+555,Intro_Posy+214)
DisplayTransparentSprite(#Sas,Intro_Posx+555,Intro_Posy+231)
DisplayTransparentSprite(#Sas,Intro_Posx+555,Intro_Posy+248)
DisplayTransparentSprite(#Sas,Intro_Posx+555,Intro_Posy+264)
DisplayTransparentSprite(#Sas,Intro_Posx+571,Intro_Posy+180)
DisplayTransparentSprite(#Sas,Intro_Posx+588,Intro_Posy+197)
DisplayTransparentSprite(#Sas,Intro_Posx+604,Intro_Posy+214)
DisplayTransparentSprite(#Sas,Intro_Posx+620,Intro_Posy+231)
DisplayTransparentSprite(#Sas,Intro_Posx+636,Intro_Posy+248)
DisplayTransparentSprite(#Sas,Intro_Posx+652,Intro_Posy+180)
DisplayTransparentSprite(#Sas,Intro_Posx+652,Intro_Posy+197)
DisplayTransparentSprite(#Sas,Intro_Posx+652,Intro_Posy+214)
DisplayTransparentSprite(#Sas,Intro_Posx+652,Intro_Posy+231)
DisplayTransparentSprite(#Sas,Intro_Posx+652,Intro_Posy+248)
DisplayTransparentSprite(#Sas,Intro_Posx+652,Intro_Posy+264)
;E
DisplayTransparentSprite(#Sas,Intro_Posx+700,Intro_Posy+180)
DisplayTransparentSprite(#Sas,Intro_Posx+716,Intro_Posy+180)
DisplayTransparentSprite(#Sas,Intro_Posx+732,Intro_Posy+180)
DisplayTransparentSprite(#Sas,Intro_Posx+748,Intro_Posy+180)
DisplayTransparentSprite(#Sas,Intro_Posx+684,Intro_Posy+197)
DisplayTransparentSprite(#Sas,Intro_Posx+684,Intro_Posy+214)
DisplayTransparentSprite(#Sas,Intro_Posx+684,Intro_Posy+231)
DisplayTransparentSprite(#Sas,Intro_Posx+684,Intro_Posy+248)
DisplayTransparentSprite(#Sas,Intro_Posx+700,Intro_Posy+264)
DisplayTransparentSprite(#Sas,Intro_Posx+716,Intro_Posy+264)
DisplayTransparentSprite(#Sas,Intro_Posx+732,Intro_Posy+264)
DisplayTransparentSprite(#Sas,Intro_Posx+748,Intro_Posy+264)
DisplayTransparentSprite(#Sas,Intro_Posx+700,Intro_Posy+221)
DisplayTransparentSprite(#Sas,Intro_Posx+716,Intro_Posy+221)
DisplayTransparentSprite(#Sas,Intro_Posx+732,Intro_Posy+221)
DisplayTransparentSprite(#Sas,Intro_Posx+748,Intro_Posy+221)
EndProcedure
;--- timer deplacement astronaute
Procedure time_deplacement()
If ElapsedMilliseconds() - ctime_deplacement > time_deplacement
ctime_deplacement = ElapsedMilliseconds()
Astronaute_Posx + 50
If Astronaute_Posx >-50
vies = 1
credits=0
affiche_gameover= #False
Boost_Oxygene = #False
EndIf
If Astronaute_Posx>1000
vies = 0
affiche_gameover=#True
credits = 1
score - 100
Boost_Oxygene=#True
EndIf
If vies=0:aff_oxygene=0:EndIf
EndIf
EndProcedure
;--- collisions ----
Procedure collision()
;si il y a collision entre le sprite astronaute et le ravitaillement.
If SpritePixelCollision(#ravitaillement,ravitaillement_posx,ravitaillement_posy,#astronaute,Astronaute_Posx,Astronaute_Posy)
;on active le boost d'oxygene
Boost_Oxygene=#True
oxygene=oxygene + 1
;on deplace le 2eme astronaute
Vies_Posx +3
score + 5
TransparentSpriteColor(#ravitaillement2,RGB(0,0,0))
ZoomSprite(#ravitaillement2,32,32)
DisplayTransparentSprite(#ravitaillement2,ravitaillement2_posx,ravitaillement2_posy)
EndIf
EndProcedure
;-- dessine etoiles --
Procedure dessine_star()
CreateSprite(#etoile,1,1)
CreateSprite(#etoile2,1,1)
CreateSprite(#etoile3,1,1)
StartDrawing(SpriteOutput(#etoile))
Box(0,0,1,1,$00FFFF)
StopDrawing()
StartDrawing(SpriteOutput(#etoile2))
Box(0,0,1,1,$0033FF)
StopDrawing()
StartDrawing(SpriteOutput(#etoile3))
Box(0,0,1,1,$FFCC00)
StopDrawing()
EndProcedure
;----- init starfield horizontale ---------
Procedure init_star()
Protected i
With stars(i)
For i = 0 To #Nbstar
\Xpos = i*Lstar / #Nbstar
\Ypos = i*Hstar / #Nbstar
\vit=Random(4,2)
\couleur=Random(2,0)
Next
For i = 0 To #Nbstar*5
Swap stars(Random(#Nbstar))\Xpos, stars(Random(#Nbstar))\Xpos
Swap stars(Random(#Nbstar))\Ypos, stars(Random(#Nbstar))\Ypos
Next i
EndWith
EndProcedure
;----------- affiche starfield horizontale ---------
Procedure affiche_star()
Protected i
For i= 0 To #nbstar
DisplayTransparentSprite(stars(i)\couleur,stars(i)\Xpos,stars(i)\Ypos)
stars(i)\Xpos - stars(i)\vit
If stars(i)\Xpos < = 0
stars(i)\Xpos + Lstar
EndIf
Next
EndProcedure
pieces()
dessine_star()
astronaute()
init_star()
SpriteQuality(#PB_Sprite_BilinearFiltering)
;-boucle
Repeat ; 2d
FlipBuffers()
ClearScreen(RGB(0,0,0))
ExamineKeyboard()
; on appelle les procedures
affiche_star()
Lune()
ravitaillement()
ravitaillement2()
collision()
astronaute()
decor_base()
Hb()
sas()
timer_oxygene()
time_deplacement()
newfont()
bg()
;si l'astraunaute sort de l'ecran en x il reapparait à la position de depart - 50 pixels
If Astronaute_Posx>largeur_ecran:Astronaute_Posx=-50:EndIf
;affichage nombre de vie astronaute
If vies=1:credits=0:DisplayTransparentSprite(#astronaute,15,600):EndIf
;si j'ajoute un credit on active le boost d'oxygene et on affiche la piece
If credits=1:oxygene=oxygene+1: DisplayTransparentSprite(#pieces,90,600):EndIf
;si le 2eme astronaute sort de l'ecran en x il revient a la position de depart - 50 pixels
If Vies_Posx>1024:Vies_Posx=-50:EndIf
If Vies_Posx>720:sas=80:base_y+1:sas_posy+1:Else:sas_posy=0:sas=sas-Sas_variation:EndIf
If vies_posx>720:vies_posy +1:Else:base_y=80:EndIf
If vies_posy>520:score+1000:oxygene=300:Vies_Posy=12:vies_posx=10:EndIf
If base_y>600:base_y-1:EndIf
If Vies_Posx>280 And Vies_Posx<720:Affiche_logo():EndIf
Repeat ; fenetre
Event = WindowEvent()
Select Event
Case #PB_Event_CloseWindow
End
EndSelect
Until Event=0
;on quitte si on appuie sur echap ou la croix de la fenetre (ou si le niveau d'oxygene est à 0 modif lihne 535).
Until KeyboardPushed(#PB_Key_Escape) Or event = #PB_Event_CloseWindow ;Or oxygene = 0
End