

Code : Tout sélectionner
;/*********************************************
;/* \\ Garzul Invader remanier sans media // *
;/* \\ Crée par Garzul | 2004 // *
;/* \\JaPBe > 2.4.7.17 || Purebasic > 3.91 // *
;/*********************************************
#Ecran_Largeur = 600 ;Definie la largeur de l'écran
#Ecran_Hauteur = 600 ;Definie la hauteur de l'écran
;Enumeration des constant
Enumeration
#Etoile ; Constante du sprite Etoile
#Police ; Constant de la Police
#Ennemis ; Constant du sprite des Ennemis
#Joueur ; Constant du sprite Joueur
#Tir ; Constant du sprite Tir
EndEnumeration
;-Création des variable d'affichage de l'intro et des ennemis
Intro = 0
TexteX = 110
TexteY = 300
JoueurX = 270
JoueurY = 570
AffichTir = 1
TirX = 270
TirY = 570
Score = 0
vie = 3
;Variable global pour une utilisation dans les procédure
Global Intro , TexteY , TexteX , RedText , GreenText , BlueText , Police , GreenText2 , BlueText2 , JoueurX , JoueurY , AffichTir , TirX , TirY , Score , vie
;chargement d'une police
Police = LoadFont(#Police ,"Modern" ,8 ,#PB_Font_Italic)
;- On crée la fenêtre.
If OpenWindow(0, 0, 0, #Ecran_Largeur, #Ecran_Hauteur, #PB_Window_BorderLess | #PB_Window_ScreenCentered, "Invader") = 0
End
EndIf
;- On ouvre l'openscreen.
If InitSprite() = 0
MessageRequester("Erreur", "Impossible d'initialiser la souris ,le clavier ou l'écran. Vérifiez la présence de DirectX 7 ou supérieur.", 0 | #MB_IconError)
End
EndIf
If InitKeyboard() = 0
MessageRequester("Erreur", "Impossible d'initialiser le clavier veuillez verifier si il est bien connecter à votre ordinateur.", 0 | #MB_IconError)
End
EndIf
If OpenWindowedScreen(WindowID(), 0, 0, #Ecran_Largeur, #Ecran_Hauteur, 1, 0, 0) = 0
MessageRequester("Erreur", "Impossible d'ouvrir l'écran.", 0 | #MB_IconError )
End
EndIf
;Création du sprite Joueur
CreateSprite( #Joueur , 80 , 10 )
StartDrawing(SpriteOutput(#Joueur))
Box(0,0,80,10,RGB($78,$8D,$8D))
For i = 0 To 200
Plot(Random(80),Random(10),RGB($FB,$FF,$53))
Next i
StopDrawing()
;Création du sprite Tir
CreateSprite(#Tir , 20 , 20 )
StartDrawing(SpriteOutput(#Tir))
Circle(10,10,7,RGB($6B,$EA,$68))
Box(4,5,12,10,RGB($EC,$6,$C))
StopDrawing()
;Création du sprite etoile
CreateSprite( #Etoile , 1 , 1 )
StartDrawing(SpriteOutput(#Etoile))
Plot(0,0,RGB($FF,$FF,$FF))
StopDrawing()
;On crée la structure Etoile ainsi que la liste chainée stars
Structure Etoile
x.l
y.l
Vitesse.l
EndStructure
NewList Stars.Etoile()
;Création des ennemis
CreateSprite(#Ennemis , 15,15)
StartDrawing(SpriteOutput(#Ennemis))
Box(0,0,15,15,RGB($1E,$12,$F3))
Circle(3 , 3 , 4 , RGB($53,$AE,$B3))
Circle(12 , 3 , 4 , RGB($53,$AE,$B3))
Box(3 , 11 , 9 , 3 , RGB($FF,$6,$D))
StopDrawing()
Structure Ennemis
x.l
y.l
Vitesse.l
EndStructure
NewList Ennemi.Ennemis()
;On crée une procedure affichage pour l'etoile
Procedure Affichage()
ResetList(Stars())
While NextElement(Stars())
If Stars()\y > 600
Stars()\y = -5
EndIf
DisplayTransparentSprite( #Etoile , Stars()\x , Stars()\y )
TransparentSpriteColor(#Etoile,0,0,0)
Stars()\y + Stars()\Vitesse
Wend
EndProcedure
For i = 0 To 300
AddElement(Stars())
Stars()\x = Random(600)
Stars()\y = Random(600)
Stars()\Vitesse = 1
Next i
Procedure AffichageEnnemis()
ResetList(Ennemi())
While NextElement(Ennemi())
If Ennemi()\y > 600
Ennemi()\y = -5
EndIf
DisplayTransparentSprite( #Ennemis , Ennemi()\x , Ennemi()\y )
TransparentSpriteColor(#Ennemis,0,0,0)
Ennemi()\y + Ennemi()\Vitesse
Wend
EndProcedure
For i = 0 To 50
AddElement(Ennemi())
Ennemi()\x = Random(600)
Ennemi()\y = Random(600) + -650
Ennemi()\Vitesse = 2
Next i
;-Procedure d'intro
Procedure Intro()
RedText + 2
If RedText > 255
RedText = 255
EndIf
If RedText = 255
GreenText2 = 255
EndIf
StartDrawing(ScreenOutput())
For i = 0 To 601 Step 5
For e = 0 To 600 Step 10
Plot(i , e , RGB( $1E , $23 , $E8 ))
Next e
Next i
FrontColor( RedText , GreenText , BlueText )
DrawingMode(1)
Locate( TexteX, TexteY )
DrawText(" GARZUL INVADER THE REVENGE ( Les pygméin attaque ) ")
FrontColor( RedText , GreenText2 , BlueText2 )
DrawingMode(1)
Locate( 200 , 350 )
DrawText(" Appuyer sur entrer pour jouer ")
DrawingFont(Police)
FrontColor( 0 , 255 , 0 )
DrawingMode(1)
Locate( 530 , 580 )
DrawText(" Garzul | 2004 ")
StopDrawing()
ExamineKeyboard()
If KeyboardPushed(#PB_Key_Return)
Intro = 1
EndIf
EndProcedure
;-Procedure du joueur
Procedure Joueur()
DisplayTransparentSprite(#Joueur , JoueurX , JoueurY)
TransparentSpriteColor(#Joueur,0,0,0)
;On crée les deplacement
If KeyboardPushed(#PB_Key_Right)
JoueurX + 5
EndIf
If KeyboardPushed(#PB_Key_Left)
JoueurX - 5
EndIf
;On crée vite les test de collision des bord
If JoueurX > 600 : JoueurX = 600 : EndIf
If JoueurX < 0 : JoueurX = 0 : EndIf
EndProcedure
;-Tir du joueur
Procedure Tir()
If AffichTir = 1 And KeyboardPushed(#PB_Key_Space)
TirX = JoueurX + 35
AffichTir = 0
EndIf
EndProcedure
;-Affichage des tir
Procedure AffichageTir()
If AffichTir = 0
DisplayTransparentSprite(#Tir,TirX,TirY)
TransparentSpriteColor(#Tir,0,0,0)
TirY - 5
If TirY < 0
AffichTir = 1
TirY = 570
EndIf
EndIf
EndProcedure
;-Collision
Procedure Collision()
ForEach Ennemi()
If SpriteCollision(#Ennemis,Ennemi()\x,Ennemi()\y,#Joueur,JoueurX,JoueurY)
vie - 1
DeleteElement(Ennemi())
AddElement(Ennemi())
Ennemi()\x = Random(600)
Ennemi()\y = Random(600) + -650
Ennemi()\Vitesse = 2
Break
EndIf
Next
ForEach Ennemi()
If SpriteCollision(#Ennemis,Ennemi()\x,Ennemi()\y,#Tir,TirX,TirY)
Score + 2
DeleteElement(Ennemi())
For i = 0 To 5
AddElement(Ennemi())
Ennemi()\x = Random(600)
Ennemi()\y = Random(600) + -650
Ennemi()\Vitesse = 4
Next
TirY = 570
AffichTir = 1
Break
EndIf
Next
If vie < 0
MessageRequester("DEAD","You are dead",0 | #MB_IconInformation)
vie = 3
Score = 0
EndIf
EndProcedure
;-Affichage du score et de la vie
Procedure ScoreVie()
StartDrawing(ScreenOutput())
FrontColor( 200 , 100 , 100 )
DrawingMode(1)
Locate( 0 , 20 )
DrawText(" Score = " + Str(Score))
Locate( 0 , 35 )
DrawText(" Vie = " + Str(vie))
StopDrawing()
EndProcedure
;*______________________________________*__**__*__**__*__**__*___________________________________________*
;/**************************************** //\\ BOUCLE //\\ *********************************************
;/**************************************** \\//*||**||*\\// *********************************************
;*______________________________________*__**__*__**__*__**__*___________________________________________*
Repeat
Event = WindowEvent()
Delay(5)
;Affichage du jeux
If Intro = 1
Affichage()
AffichageEnnemis()
Joueur()
Tir()
AffichageTir()
Collision()
ScoreVie()
EndIf
;Affichage de l'intro
If Intro = 0
Intro()
EndIf
;-FPS
#DefinitionFPS = 20
cpt + 1
If cpt = #DefinitionFPS
cpt = 0
fps.f = #DefinitionFPS * 1000 / (ElapsedMilliseconds() - Temps)
Temps = ElapsedMilliseconds()
EndIf
StartDrawing(ScreenOutput())
FrontColor( 0 , 100 , 255 )
DrawingMode(1)
Locate(0, 5)
DrawText("FPS = " + StrF(fps, 1))
StopDrawing()
FlipBuffers() ;Inversion des deux buffer
ClearScreen( 0 , 0 , 0 )
If IsScreenActive() = 0
End
EndIf
;Fin du programme si appuyer sur echap .
ExamineKeyboard()
Until Event = #PB_Event_CloseWindow Or KeyboardPushed(#PB_Key_Escape)