Space encore un

Programmation avancée de jeux en PureBasic
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Space encore un

Message par graph100 »

bon voila j'ai refais space avec un principe different
si il y a des bugs ou des idées d'ennemis je suis preneur car il y a pour l'instant que deux niveaux

perso je l'ai jamais fini ^^

on peut stopper le jeu en appuyant sur "D" et si ca tourne trop vite sur certain PC augmenter le delay en appuyant plusieur fois sur la touche "A"
pour le diminuer "Z"

telecharger ici
Dernière modification par graph100 le ven. 07/juil./2006 21:05, modifié 1 fois.
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Message par Thyphoon »

tres jolie :D mes ça sacade dur chez moi ! :( pourtant j'ai un processeur a 2Ghz.Mais c'est prometeur
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Message par graph100 »

oui je l'ai programmer sur un vieux pc (window 98 64Mo de RAM 350Mhz)
ou il tourne parfaitement ^^
mais quand je l'ai mis sur un nouveau pc il saccade en effet mais je ne vois pas comment arranger ca ?
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

Ben si tu gères les attentes avec un delay() c'est pas très bon , parce que tu rends la main au processeur , mais tu ne sais pas quand il te la redonne.
Il faut calculer le FPS et corriger les vitesses en conséquence.
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Message par graph100 »

Ya un probleme la parce que le FPS je sais pas ce que c :oops:
je vais chercher ^^

quand au calcul de vitesse je vois pas : il faudrait que je monopolise le processeur en permanence ?
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Message par Thyphoon »

graph100 a écrit :Ya un probleme la parce que le FPS je sais pas ce que c :oops:
je vais chercher ^^

quand au calcul de vitesse je vois pas : il faudrait que je monopolise le processeur en permanence ?
FPS pour Frame per Seconde. DOnc Nombre d'image part seconde.
IL y a un code sur Codearchive qui permet d'afficher le FPS
http://www.purearea.net/pb/CodeArchiv/French.html
et fait une recherche sur la page a FPS... les codes sontp our la PB3.94 mais on peut les modifier simplement pour passer en PB4

voilà :D
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

bah sur mon vieux 98 il tourne nickel

Dri :10:
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Message par graph100 »

Justement ca tourne beaucoup trop vite sur des pc avec 1.2 Ghz et +
comtois a écrit :Ben si tu gères les attentes avec un delay() c'est pas très bon , parce que tu rends la main au processeur , mais tu ne sais pas quand il te la redonne.
Il faut calculer le FPS et corriger les vitesses en conséquence.
ca veut dire qu'il faut que je fasse une boucle

Code : Tout sélectionner

for delay = 0 to delaymax
next
avec le delaymax calculer de maniere a ralentir le jeu juste comme il faut ?
ca risque pas de monopoliser le processeur ?

@Thyphoon : OK :D merci je vais voir ca !
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Message par graph100 »

a ....
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Message par graph100 »

Bon j'ai essayer de l'adapter
ca m'a pris la tete et du temp mais bon ca a l'air de marcher :D
mais j'ai l'impression que ca avance toujours par saccade

voici le code :
les images ici

Code : Tout sélectionner

UsePNGImageDecoder()

#window_width = 800
#window_height = 700
#nombre_laser = 20
#nombre_laser_ennemi = 100
#nombre_asteroid = 12
#nombre_ennemi = 10
#nombre_missile_max = 6
#life_max = 100

Structure asteroid
  x.l
  y.l
  vitesse.l
  derivX.l
  frame.l
  taille.l
  rotation.f
  rotation_max.l
EndStructure

Structure ennemi
  x.l
  y.l
  vie.l
  compteur.l
  acceleration.point
  rdv.point
EndStructure

Structure missile
  x.l
  y.l
  cible.l
  acceleration.point
EndStructure

Global explosion_small.AnimSprite, explosion_big.AnimSprite, explosion.AnimSprite
Global meteore.AnimSprite, asteroid_small.AnimSprite, asteroid_big.AnimSprite
Global vaisseau.AnimSprite, ennemi_1.AnimSprite, ennemi_2.AnimSprite, ennemi_3.AnimSprite, ennemi_4.AnimSprite, ennemi_5.AnimSprite, ennemi_6.AnimSprite, ennemi_7.AnimSprite, ennemi_8.AnimSprite, ennemi.AnimSprite, boss_1.AnimSprite, boss_2.AnimSprite, boss_anim.AnimSprite
Global acceleration.point, vais.point, score_total.POINT, boss.ennemi, niveau.l
Global score, vit_max, vit_max_ennemi, life, boom, vit_max_div.f, Nombre_Ennemi, laser_ennemi.l, ennemi_actuel
Global ajout, nombre_missile, missile_bonus, missile, missile_lance.missile, mode_boss.l
Global Elapsed_time.l

Nombre_Ennemi = 3

Dim laser.Point(#nombre_laser)
Dim asteroid.asteroid(#nombre_asteroid)
Dim explosion.asteroid(#nombre_asteroid)
Dim ennemi.ennemi(Nombre_Ennemi)
Dim laser_ennemi.Point(#nombre_laser_ennemi)
Dim bonus_missile.Point(2)

; ProcedureDLL.f GameTimer(mode); mode=0 init , mode=1 close , mode=2 get time between two call of function (in ms) , mode=3 get fps , n'appeler qu'une seule fois le mode 2 et 3 dans une boucle
;   Shared _GT_DevCaps.TIMECAPS, StartTime.l, time.l, frames.l, fps.l
;   
;   If mode = 0
;     timeGetDevCaps_(_GT_DevCaps, SizeOf(TIMECAPS)) 
;     timeBeginPeriod_(_GT_DevCaps\wPeriodMin) 
;     StartTime = timeGetTime_() 
;     time      = StartTime
;     
;   ElseIf mode = 1
;     timeEndPeriod_(_GT_DevCaps\wPeriodMin) 
;     
;   ElseIf mode = 2
;     multiplicator.f = StartTime 
;     StartTime = timeGetTime_() 
;     ProcedureReturn StartTime - multiplicator 
;     
;   ElseIf mode = 3
;     If timeGetTime_() - time >= 1000 
;       time   = timeGetTime_() 
;       FPS    = Frames - 1 
;       Frames = 1 
;     Else 
;       Frames+1 
;     EndIf 
;     ProcedureReturn fps
;     
;   EndIf
; EndProcedure
; 
; ProcedureDLL.f GameSpeed(Speed.f, ElapsedTime.f); speed is in pixel/second , elapsedtime is the time between game loop (in ms)
;   ProcedureReturn (Speed * ElapsedTime) / 1000
; EndProcedure
; 
; ProcedureDLL Sign(number.l); retourne le signe du nombre (-1, 0, 1)
;   If number
;     ProcedureReturn Abs(number) / number
;   Else
;     ProcedureReturn 0
;   EndIf
; EndProcedure

Procedure Delay1(milliseconde); arrete l'execution du programme sans rendre la main au processeur
  timer = ElapsedMilliseconds()
  
  Repeat
    If ElapsedMilliseconds() - timer >= milliseconde - 1
      Break
    EndIf
  ForEver
EndProcedure

Procedure CopyVariable_meteore(*variable.AnimSprite)
  meteore\SpriteNumber = *variable\SpriteNumber
  meteore\Transparent = *variable\Transparent
  meteore\Xsize = *variable\Xsize
  meteore\Ysize = *variable\Ysize
  meteore\AnimCount = *variable\AnimCount
  meteore\DirectionCount = *variable\DirectionCount
  meteore\currentAnim = *variable\currentAnim
  meteore\currentDirection = *variable\currentDirection
  meteore\XclipStart = *variable\XclipStart
  meteore\YclipStart = *variable\YclipStart
  meteore\AutoFrameTime = *variable\AutoFrameTime
  meteore\AutoFrameDirection = *variable\AutoFrameDirection
  meteore\AutoFrameLastTime = *variable\AutoFrameLastTime
EndProcedure

Procedure CopyVariable_explosion(*variable.AnimSprite)
  explosion\SpriteNumber = *variable\SpriteNumber
  explosion\Transparent = *variable\Transparent
  explosion\Xsize = *variable\Xsize
  explosion\Ysize = *variable\Ysize
  explosion\AnimCount = *variable\AnimCount
  explosion\DirectionCount = *variable\DirectionCount
  explosion\currentAnim = *variable\currentAnim
  explosion\currentDirection = *variable\currentDirection
  explosion\XclipStart = *variable\XclipStart
  explosion\YclipStart = *variable\YclipStart
  explosion\AutoFrameTime = *variable\AutoFrameTime
  explosion\AutoFrameDirection = *variable\AutoFrameDirection
  explosion\AutoFrameLastTime = *variable\AutoFrameLastTime
EndProcedure

Procedure CopyVariable_ennemi(*variable.AnimSprite)
  ennemi\SpriteNumber = *variable\SpriteNumber
  ennemi\Transparent = *variable\Transparent
  ennemi\Xsize = *variable\Xsize
  ennemi\Ysize = *variable\Ysize
  ennemi\AnimCount = *variable\AnimCount
  ennemi\DirectionCount = *variable\DirectionCount
  ennemi\currentAnim = *variable\currentAnim
  ennemi\currentDirection = *variable\currentDirection
  ennemi\XclipStart = *variable\XclipStart
  ennemi\YclipStart = *variable\YclipStart
  ennemi\AutoFrameTime = *variable\AutoFrameTime
  ennemi\AutoFrameDirection = *variable\AutoFrameDirection
  ennemi\AutoFrameLastTime = *variable\AutoFrameLastTime
EndProcedure

Procedure CopyVariable_boss(*variable.AnimSprite)
  boss_anim\SpriteNumber = *variable\SpriteNumber
  boss_anim\Transparent = *variable\Transparent
  boss_anim\Xsize = *variable\Xsize
  boss_anim\Ysize = *variable\Ysize
  boss_anim\AnimCount = *variable\AnimCount
  boss_anim\DirectionCount = *variable\DirectionCount
  boss_anim\currentAnim = *variable\currentAnim
  boss_anim\currentDirection = *variable\currentDirection
  boss_anim\XclipStart = *variable\XclipStart
  boss_anim\YclipStart = *variable\YclipStart
  boss_anim\AutoFrameTime = *variable\AutoFrameTime
  boss_anim\AutoFrameDirection = *variable\AutoFrameDirection
  boss_anim\AutoFrameLastTime = *variable\AutoFrameLastTime
EndProcedure

Procedure DrawLaser(laser_vitesse)
  For laser = 0 To #nombre_laser
    If laser(laser)\x
      DisplayTransparentSprite(1, laser(laser)\x, laser(laser)\y)
      laser(laser)\y - GameSpeed(laser_vitesse, Elapsed_time)
      If laser(laser)\y < -60 : laser(laser)\x = 0 : EndIf
      
      For a = 0 To Nombre_Ennemi
        If ennemi(a)\x
          If CollisionAnimSprite(ennemi, ennemi(a)\x, ennemi(a)\y, 1, laser(laser)\x, laser(laser)\y)
            ennemi(a)\vie - 50
            If ennemi(a)\vie <= 0
              
              If Random(4) = 0 And bonus_missile(missile_bonus)\x = 0
                bonus_missile(missile_bonus)\x = ennemi(a)\x
                bonus_missile(missile_bonus)\y = ennemi(a)\y
                missile_bonus + 1
                If missile_bonus > 2 : missile_bonus = 0 : EndIf
              EndIf
              
              explosion(boom)\x = ennemi(a)\x
              explosion(boom)\y = ennemi(a)\y
              explosion(boom)\vitesse = 0
              explosion(boom)\frame = 0
              explosion(boom)\taille = 0
              explosion(boom)\rotation = 0
              explosion(boom)\rotation_max = 2
              boom + 1
              If boom = #nombre_asteroid : boom = 0 : EndIf
              
              ennemi(a)\x = 0
              ennemi(a)\y = 0
              
              score_total\x + 1
              
            Else
              explosion(boom)\x = laser(laser)\x - explosion_small\Xsize / 2
              explosion(boom)\y = laser(laser)\y - explosion_small\Ysize / 2
              explosion(boom)\vitesse = 0
              explosion(boom)\frame = 0
              explosion(boom)\taille = 1
              explosion(boom)\rotation = 0
              explosion(boom)\rotation_max = 2
              boom + 1
              If boom = #nombre_asteroid : boom = 0 : EndIf
            EndIf
            laser(laser)\x = 0
          EndIf
        EndIf
      Next
      If CollisionAnimSprite(boss_anim, boss\x, boss\y, 1, laser(laser)\x, laser(laser)\y) And mode_boss = 1
        boss\vie - 50
        If boss\vie <= 0
          
          If Random(4) = 0 And bonus_missile(missile_bonus)\x = 0
            bonus_missile(missile_bonus)\x = boss\x
            bonus_missile(missile_bonus)\y = boss\y
            missile_bonus + 1
            If missile_bonus > 2 : missile_bonus = 0 : EndIf
          EndIf
          
          For a = 0 To 20
            explosion(boom)\x = boss\x + Random(boss_anim\Ysize)
            explosion(boom)\y = boss\y + Random(boss_anim\Xsize)
            explosion(boom)\vitesse = Random(3)
            explosion(boom)\frame = 0
            explosion(boom)\taille = 0
            explosion(boom)\rotation = 0
            explosion(boom)\rotation_max = 2
            boom + 1
            If boom = #nombre_asteroid : boom = 0 : EndIf
          Next
            
          boss\x = 0
          boss\y = 0
           
        Else
          explosion(boom)\x = laser(laser)\x - explosion_small\Xsize / 2
          explosion(boom)\y = laser(laser)\y - explosion_small\Ysize / 2
          explosion(boom)\vitesse = 0
          explosion(boom)\frame = 0
          explosion(boom)\taille = 1
          explosion(boom)\rotation = 0
          explosion(boom)\rotation_max = 2
          boom + 1
          If boom = #nombre_asteroid : boom = 0 : EndIf
        EndIf
        laser(laser)\x = 0
      EndIf
      
    EndIf
  Next
  For laser = 0 To #nombre_laser_ennemi
    If laser_ennemi(laser)\x
      DisplayTransparentSprite(16, laser_ennemi(laser)\x, laser_ennemi(laser)\y)
      If CollisionAnimSprite(vaisseau, vais\x, vais\y, 16, laser_ennemi(laser)\x, laser_ennemi(laser)\y)
        laser_ennemi(laser)\x = 0
        life - 5
      EndIf
      laser_ennemi(laser)\y + GameSpeed(laser_vitesse, Elapsed_time)
      If laser_ennemi(laser)\y > #window_height : laser_ennemi(laser)\x = 0 : EndIf
    EndIf
  Next
EndProcedure

Procedure DrawExplosion(ex)
  If explosion(ex)\x
    If explosion(ex)\taille = 0
      CopyVariable_explosion(@explosion_big)
    Else
      CopyVariable_explosion(@explosion_small)
    EndIf
    
    SetAnimFrame(explosion, explosion(ex)\frame)
    
    If ElapsedMilliseconds() - explosion(ex)\rotation > explosion(ex)\rotation_max * 34
      explosion(ex)\rotation = ElapsedMilliseconds()
      NextAnimFrame(explosion)
      explosion(ex)\frame = CurrentAnimFrame(explosion)
    EndIf
    
    DisplayAnimSprite(explosion, explosion(ex)\x, explosion(ex)\y)
    
    explosion(ex)\y + explosion(ex)\vitesse
    If explosion(ex)\y > #window_height Or explosion(ex)\frame = 6 : explosion(ex)\x = 0 : EndIf
  EndIf
EndProcedure

Procedure Collision(astre)
    For laser = 0 To #nombre_laser
      If asteroid(astre)\taille >= 0
        If CollisionAnimSprite(asteroid_small, asteroid(astre)\x, asteroid(astre)\y, 1, laser(laser)\x, laser(laser)\y) And asteroid(astre)\taille 
          laser(laser)\x = 0
          
          explosion(boom)\x = asteroid(astre)\x
          explosion(boom)\y = asteroid(astre)\y
          explosion(boom)\vitesse = asteroid(astre)\vitesse
          explosion(boom)\frame = 0
          explosion(boom)\taille = asteroid(astre)\taille
          explosion(boom)\rotation = 0
          explosion(boom)\rotation_max = 2
          boom + 1
          If boom = #nombre_asteroid : boom = 0 : EndIf
          
          asteroid(astre)\x = 0
          score + 1
        EndIf
        If CollisionAnimSprite(asteroid_big, asteroid(astre)\x, asteroid(astre)\y, 1, laser(laser)\x, laser(laser)\y) And asteroid(astre)\taille = 0
          laser(laser)\x = 0
          
          explosion(boom)\x = asteroid(astre)\x
          explosion(boom)\y = asteroid(astre)\y
          explosion(boom)\vitesse = asteroid(astre)\vitesse
          explosion(boom)\frame = 0
          explosion(boom)\taille = asteroid(astre)\taille
          explosion(boom)\rotation = 0
          explosion(boom)\rotation_max = 2
          boom + 1
          If boom = #nombre_asteroid : boom = 0 : EndIf
          
          asteroid(astre)\x = 0
          score + 10
        EndIf
      EndIf
    Next
    If CollisionAnimAnim(asteroid_small, asteroid(astre)\x, asteroid(astre)\y, vaisseau, vais\x, vais\y) And asteroid(astre)\taille
      life - 1
      asteroid(astre)\x = 0
      acceleration\y = GameSpeed(vit_max, Elapsed_time)
    EndIf
    
    If CollisionAnimAnim(asteroid_big, asteroid(astre)\x, asteroid(astre)\y, vaisseau, vais\x, vais\y) And asteroid(astre)\taille = 0
      life - 3
      asteroid(astre)\x = 0
      acceleration\y = GameSpeed(vit_max, Elapsed_time) * 2
    EndIf
    If score >= #life_max
      life + 1
      score  - #life_max
    EndIf
    If life > #life_max : life = #life_max : EndIf
EndProcedure

Procedure DrawAsteroid()
  For astre = 0 To #nombre_asteroid
    DrawExplosion(astre)
    Collision(astre)
    
    If asteroid(astre)\x 
      If asteroid(astre)\taille = 0
        CopyVariable_meteore(@asteroid_big)
      Else
        CopyVariable_meteore(@asteroid_small)
      EndIf
      
      SetAnimFrame(meteore, asteroid(astre)\frame)
      
      If ElapsedMilliseconds() - asteroid(astre)\rotation > asteroid(astre)\rotation_max
        asteroid(astre)\rotation = ElapsedMilliseconds()
        NextAnimFrame(meteore)
        asteroid(astre)\frame = CurrentAnimFrame(meteore)
      EndIf
      
      DisplayAnimSprite(meteore, asteroid(astre)\x, asteroid(astre)\y)
      
      asteroid(astre)\y + GameSpeed(asteroid(astre)\vitesse * 29, Elapsed_time)
      asteroid(astre)\x + GameSpeed(Sign(asteroid(astre)\derivX) * 29, Elapsed_time)
      
      If asteroid(astre)\x > #window_width - 100
        asteroid(astre)\derivx = -asteroid(astre)\derivx
        asteroid(astre)\x = #window_width - 100
      EndIf
      
      If asteroid(astre)\x < 1
        asteroid(astre)\derivx = -asteroid(astre)\derivx
        asteroid(astre)\x = 1
      EndIf
      
      asteroid(astre)\derivX - Sign(asteroid(astre)\derivX) * 2
      If asteroid(astre)\derivX <= 0 : asteroid(astre)\derivX = Random(200) - 180 : EndIf
      If asteroid(astre)\y > #window_height : asteroid(astre)\x = 0 : EndIf
    Else
      asteroid(astre)\x = Random(#window_width - 100) + 50
      asteroid(astre)\y = -Random(80) - 40
      asteroid(astre)\vitesse = Random(5) + 5
      asteroid(astre)\frame = Random(9)
      asteroid(astre)\rotation_max = (Random(4) + 2) * 34
      asteroid(astre)\rotation = ElapsedMilliseconds()
      asteroid(astre)\taille = Random(5)
    EndIf
  Next
EndProcedure

Procedure DrawLife()
  For x = 0 To (#window_width * life) / #life_max Step 16
    DisplayTransparentSprite(4, x, #window_height - 16)
  Next
  For x = 0 To (#window_width * score) / #life_max Step 16
    DisplayTransparentSprite(4, x, #window_height - 32)
  Next
  If nombre_missile
    For y = 1 To nombre_missile
      DisplayTransparentSprite(12, #window_width - 50, #window_height - 40 - y * 15)
    Next
  EndIf
EndProcedure

Procedure DrawEnnemi()
  div.f = 2.6
  
  If ennemi_actuel = 1 And niveau = 1
    CopyVariable_ennemi(@ennemi_1)
  ElseIf ennemi_actuel = 2 And niveau = 1
    CopyVariable_ennemi(@ennemi_2)
  ElseIf ennemi_actuel = 3 And niveau = 1
    CopyVariable_ennemi(@ennemi_3)
  ElseIf ennemi_actuel = 4 And niveau = 1
    CopyVariable_ennemi(@ennemi_4)
  ElseIf ennemi_actuel = 1 And niveau = 2
    CopyVariable_ennemi(@ennemi_5)
  ElseIf ennemi_actuel = 2 And niveau = 2
    CopyVariable_ennemi(@ennemi_6)
  ElseIf ennemi_actuel = 3 And niveau = 2
    CopyVariable_ennemi(@ennemi_7)
  ElseIf ennemi_actuel = 4 And niveau = 2
    CopyVariable_ennemi(@ennemi_8)
  EndIf
  
  b = 0
  
  For a = 0 To Nombre_Ennemi
    If ennemi(a)\x
      
      If EgalApproxime(ennemi(a)\x, ennemi(a)\rdv\x, 10) = 0
        ennemi(a)\acceleration\x - Sign(ennemi(a)\x - ennemi(a)\rdv\x) * vit_max_ennemi / 10
        If Abs(ennemi(a)\acceleration\x) > vit_max_ennemi : ennemi(a)\acceleration\x = vit_max_ennemi * Sign(ennemi(a)\acceleration\x) : EndIf
      EndIf
      
      If EgalApproxime(ennemi(a)\y, ennemi(a)\rdv\y, 10) = 0
        ennemi(a)\acceleration\y - Sign(ennemi(a)\y - ennemi(a)\rdv\y) * vit_max_ennemi / 10
        If Abs(ennemi(a)\acceleration\y) > vit_max_ennemi : ennemi(a)\acceleration\y = vit_max_ennemi * Sign(ennemi(a)\acceleration\y) : EndIf
      EndIf
      
      If EgalApproxime(ennemi(a)\x, ennemi(a)\rdv\x, 20) And EgalApproxime(ennemi(a)\y, ennemi(a)\rdv\y, 20)
        ennemi(a)\rdv\x = Random(#window_width - 100) + 50
        ennemi(a)\rdv\y = Random(20) + 100 + ennemi(a)\y
      EndIf
      
      If ennemi(a)\acceleration\x > 0
        SetAnimDirection(ennemi, 1)
      Else
        SetAnimDirection(ennemi, 2)
      EndIf
      SetAnimFrame(ennemi, Abs(ennemi(a)\acceleration\x) / 10)
      
      DisplayAnimSprite(ennemi, ennemi(a)\x, ennemi(a)\y)
      
      If Random(100) = 0        
        c = ennemi(a)\acceleration\x / 10
        If c = 0 : c = 1 : EndIf
        
        nombre = 1
                
        For tir = 1 To nombre
        
        If ennemi_actuel = 1 And niveau = 1
          Restore tir_1
        ElseIf ennemi_actuel = 2 And niveau = 1
          Restore tir_2
        ElseIf ennemi_actuel = 3 And niveau = 1
          Restore tir_3
        ElseIf ennemi_actuel = 4 And niveau = 1
          Restore tir_4
        ElseIf ennemi_actuel = 1 And niveau = 2
          Restore tir_6
        ElseIf ennemi_actuel = 2 And niveau = 2
          Restore tir_7
        ElseIf ennemi_actuel = 3 And niveau = 2
          Restore tir_8
        ElseIf ennemi_actuel = 4 And niveau = 2
          Restore tir_9
        EndIf
        Read nombre
        
          If Abs(c) > 1
            For d = 1 To nombre
              Read x
              Read y
            Next
          EndIf
          If Abs(c) = 1
            For d = 1 To tir
              Read x
              Read y
            Next
          EndIf
          
          If Abs(c) > 2
            For d = 1 To nombre
              Read x
              Read y
            Next
          EndIf
          If Abs(c) = 2
            For d = 1 To tir
              Read x
              Read y
            Next
          EndIf
          
          If Abs(c) > 3
            For d = 1 To nombre
              Read x
              Read y
            Next
          EndIf
          If Abs(c) = 3
            For d = 1 To tir
              Read x
              Read y
            Next
          EndIf
          
          If Abs(c) > 4
            For d = 1 To nombre
              Read x
              Read y
            Next
          EndIf
          If Abs(c) = 4
            For d = 1 To tir
              Read x
              Read y
            Next
          EndIf
          
          If c < -1
            x = ennemi\Xsize - x
          EndIf
          
          laser_ennemi(laser_ennemi)\x = ennemi(a)\x + x - 1
          laser_ennemi(laser_ennemi)\y = ennemi(a)\y + y
          laser_ennemi + 1
          If laser_ennemi > #nombre_laser_ennemi : laser_ennemi = 0 : EndIf
        Next
      EndIf
      
      ennemi(a)\y + GameSpeed((ennemi(a)\acceleration\y / 10) * 29, Elapsed_time)
      ennemi(a)\x + GameSpeed((ennemi(a)\acceleration\x / 10) * 29, Elapsed_time)
      
      If ennemi(a)\x < 1 : ennemi(a)\x = 1 : ennemi(a)\acceleration\x = 0 : EndIf
      If ennemi(a)\x > #window_width : ennemi(a)\x = #window_width : ennemi(a)\acceleration\x = 0 : EndIf
      If ennemi(a)\y > #window_height
        ennemi(a)\x = 0
        ennemi(a)\y = 0
      EndIf
    ElseIf ajout = 1
      ennemi(a)\x = Random(#window_width - 100) + 50
      ennemi(a)\y = -Random(50) - 40
      ennemi(a)\vie = 100
      ennemi(a)\compteur = 0
      ennemi(a)\rdv\x = Random(#window_width - 100) + 50
      ennemi(a)\rdv\y = Random(20) + 100 + ennemi(a)\y
    EndIf
    
    b + ennemi(a)\x
  Next
  
  If b = 0 : ajout = 2 : EndIf
EndProcedure

Procedure DrawBonus()
  For a = 0 To 2
    If bonus_missile(a)\x
      DisplayTransparentSprite(12, bonus_missile(a)\x, bonus_missile(a)\y)
      
      If CollisionAnimSprite(vaisseau, vais\x, vais\y, 12, bonus_missile(a)\x, bonus_missile(a)\y) And  nombre_missile < #nombre_missile_max
        nombre_missile + 1
        bonus_missile(a)\x = 0
      EndIf
      
      bonus_missile(a)\y + GameSpeed(87, Elapsed_time)
      
      If bonus_missile(a)\y > #window_height : bonus_missile(a)\x = 0 : EndIf
    EndIf
  Next
EndProcedure

Procedure FindCible(abssiceY)
  If mode_boss = 1
    missile_lance\cible = -2
  EndIf
  
  For a = 0 To Nombre_Ennemi
    If ennemi(a)\y > proche And ennemi(a)\y < abssiceY - 20
      proche = ennemi(a)\y
      missile_lance\cible = a
    EndIf
  Next
EndProcedure

Procedure DrawMissile()
  a = missile_lance\cible
  
  If missile_lance\x
    If a = -1
      missile_lance\y - GameSpeed(145, Elapsed_time)
      FindCible(missile_lance\y)
    ElseIf a = -2
      missile_lance\y - GameSpeed(145, Elapsed_time)
      missile_lance\x + GameSpeed(145, Elapsed_time) * Sign(boss\x + boss_anim\Xsize / 2 - missile_lance\x)
    ElseIf ennemi(a)\y > missile_lance\y Or ennemi(a)\x = 0
      missile_lance\y - GameSpeed(145, Elapsed_time)
      FindCible(missile_lance\y)
    Else
      missile_lance\y - GameSpeed(145, Elapsed_time)
      missile_lance\x + GameSpeed(145, Elapsed_time) * Sign(ennemi(a)\x + ennemi\Xsize / 2 - missile_lance\x)
    EndIf
    
    DisplayTransparentSprite(11, missile_lance\x, missile_lance\y)
    
    For b = 0 To Nombre_Ennemi
      If CollisionAnimSprite(ennemi, ennemi(b)\x, ennemi(b)\y, 11, missile_lance\x, missile_lance\y)
        ennemi(b)\vie - 100
        
        If ennemi(b)\vie <= 0
          explosion(boom)\x = ennemi(b)\x
          explosion(boom)\y = ennemi(b)\y
          explosion(boom)\vitesse = 0
          explosion(boom)\frame = 0
          explosion(boom)\taille = 0
          explosion(boom)\rotation = 0
          explosion(boom)\rotation_max = 2
          
          boom + 1
          If boom = #nombre_asteroid : boom = 0 : EndIf
          
          ennemi(b)\x = 0
          ennemi(b)\y = 0
          
          score_total\x + 1
        Else
          explosion(boom)\x = missile_lance\x - explosion_big\Xsize / 2
          explosion(boom)\y = missile_lance\y - explosion_big\Ysize / 2
          explosion(boom)\vitesse = 0
          explosion(boom)\frame = 0
          explosion(boom)\taille = 0
          explosion(boom)\rotation = 0
          explosion(boom)\rotation_max = 2
          boom + 1
          If boom = #nombre_asteroid : boom = 0 : EndIf
        EndIf
        missile_lance\x = 0
     EndIf
    Next
    
    If CollisionAnimSprite(boss_anim, boss\x, boss\y, 11, missile_lance\x, missile_lance\y) And mode_boss = 1
      boss\vie - 100
      If boss\vie <= 0
                
        For a = 0 To 20
          explosion(boom)\x = boss\x + Random(boss_anim\Ysize)
          explosion(boom)\y = boss\y + Random(boss_anim\Xsize)
          explosion(boom)\vitesse = Random(3)
          explosion(boom)\frame = 0
          explosion(boom)\taille = 0
          explosion(boom)\rotation = 0
          explosion(boom)\rotation_max = 2
          boom + 1
          If boom = #nombre_asteroid : boom = 0 : EndIf
        Next
          
        boss\x = 0
        boss\y = 0
      Else
        explosion(boom)\x = missile_lance\x - explosion_big\Xsize / 2
        explosion(boom)\y = missile_lance\y - explosion_big\Ysize / 2
        explosion(boom)\vitesse = 0
        explosion(boom)\frame = 0
        explosion(boom)\taille = 0
        explosion(boom)\rotation = 0
        explosion(boom)\rotation_max = 2
        boom + 1
        If boom = #nombre_asteroid : boom = 0 : EndIf
      EndIf
      missile_lance\x = 0
    EndIf
    
    If missile_lance\y < -20 : missile_lance\x = 0 : EndIf
  EndIf
EndProcedure

Procedure ModeBoss()
  If niveau = 1
    CopyVariable_boss(@boss_1)
  ElseIf niveau = 2
    CopyVariable_boss(@boss_2)
  EndIf
  
  If boss\x
    If EgalApproxime(boss\x, boss\rdv\x, 10) = 0
      boss\acceleration\x - Sign(boss\x - boss\rdv\x) * vit_max_ennemi / 10
      If Abs(boss\acceleration\x) > vit_max_ennemi : boss\acceleration\x = vit_max_ennemi * Sign(boss\acceleration\x) : EndIf
    EndIf
    
    If EgalApproxime(boss\y, boss\rdv\y, 10) = 0
      boss\acceleration\y - Sign(boss\y - boss\rdv\y) * vit_max_ennemi / 10
      If Abs(boss\acceleration\y) > vit_max_ennemi : boss\acceleration\y = vit_max_ennemi * Sign(boss\acceleration\y) : EndIf
    EndIf
    
    If EgalApproxime(boss\x, boss\rdv\x, 20) And EgalApproxime(boss\y, boss\rdv\y, 20)
      boss\rdv\x = Random(#window_width - 240) + 20
      boss\rdv\y = Random(100) + 20
    EndIf
    
    If boss\acceleration\x > 0
      SetAnimDirection(boss_anim, 1)
    Else
      SetAnimDirection(boss_anim, 2)
    EndIf
    SetAnimFrame(boss_anim, Abs(boss\acceleration\x) / 10)
    
    DisplayAnimSprite(boss_anim, boss\x, boss\y)
    
      If Random(100) = 0
        c = boss\acceleration\x / 10
        If c = 0 : c = 1 : EndIf
        
        nombre = 1
                
        For tir = 1 To nombre
        
        If niveau = 1
          Restore tir_5
        ElseIf niveau = 2
          Restore tir_10
        EndIf
        Read nombre
        
          If Abs(c) > 1
            For d = 1 To nombre
              Read x
              Read y
            Next
          EndIf
          If Abs(c) = 1
            For d = 1 To tir
              Read x
              Read y
            Next
          EndIf
          
          If Abs(c) > 2
            For d = 1 To nombre
              Read x
              Read y
            Next
          EndIf
          If Abs(c) = 2
            For d = 1 To tir
              Read x
              Read y
            Next
          EndIf
          
          If Abs(c) > 3
            For d = 1 To nombre
              Read x
              Read y
            Next
          EndIf
          If Abs(c) = 3
            For d = 1 To tir
              Read x
              Read y
            Next
          EndIf
          
          If Abs(c) > 4
            For d = 1 To nombre
              Read x
              Read y
            Next
          EndIf
          If Abs(c) = 4
            For d = 1 To tir
              Read x
              Read y
            Next
          EndIf
          
          If c < -1
            x = boss_anim\Xsize - x
          EndIf
          
          laser_ennemi(laser_ennemi)\x = boss\x + x - 1
          laser_ennemi(laser_ennemi)\y = boss\y + y
          laser_ennemi + 1
          If laser_ennemi > #nombre_laser_ennemi : laser_ennemi = 0 : EndIf
        Next
      EndIf
    
    boss\y + GameSpeed((boss\acceleration\y / 10) * 29, Elapsed_time)
    boss\x + GameSpeed((boss\acceleration\x / 10) * 29, Elapsed_time)
    
    If boss\x < 1 : boss\x = 1 : boss\acceleration\x = 0 : EndIf
    If boss\x > #window_width : boss\x = #window_width : boss\acceleration\x = 0 : EndIf
    
  Else
    boss\x = Random(#window_width - 240) + 20
    boss\y = -Random(50) - 200
    boss\vie = 2000
    boss\rdv\x = Random(#window_width - 240) + 20
    boss\rdv\y = Random(100) + 20
  EndIf
EndProcedure

;{ menu
CatchImage(0, ?start_screen)
CatchImage(1, ?button_quitter)
CatchImage(2, ?Jouer_1)
CatchImage(3, ?Jouer_2)
CatchImage(4, ?Commande_1)
CatchImage(5, ?Commande_2)
CatchImage(6, ?fleche)
CatchImage(7, ?arme)

If OpenWindow(0, 0, 0, 354, 354, #PB_Window_BorderLess | #PB_Window_ScreenCentered, "Space - Menu")
  SetWinBackgroundImage(WindowID(0), ImageID1(0))
  
  If CreateGadgetList(WindowID(0))
    ButtonImageGadget(0, 325, 5, 24, 22, ImageID1(1))
    ImageGadget(1, 98, 198, 160, 35, ImageID1(2))
    ImageGadget(2, 51, 256, 253, 35, ImageID1(4))
  EndIf
  
  Repeat
    event = WaitWindowEvent()
    
    If event = #PB_Event_Gadget
      Select EventGadgetID()
        Case 0
          event = #PB_Event_CloseWindow
          
        Case 1
          If EventType() = #PB_EventType_LeftClick
            event = 1
          EndIf
          
        Case 2
          If EventType() = #PB_EventType_LeftClick
            ResizeGadget(1, 17, 243, 97, 106)
            SetGadgetState(1, ImageID1(6))
            ResizeGadget(2, 121, 122, 191, 169)
            SetGadgetState(2, ImageID1(7))
            
            Repeat
              event = WaitWindowEvent()
              
              If event = #PB_Event_Gadget
                Select EventGadgetID()
                  Case 0
                    event = 3
                    
                EndSelect
              EndIf
            Until event = 3
            ImageGadget(1, 98, 198, 160, 35, ImageID1(2))
            ImageGadget(2, 51, 256, 253, 35, ImageID1(4))
          EndIf
          
      EndSelect
    EndIf
    
    If WindowMouseX() > 98 And WindowMouseX() < 256 And WindowMouseY() > 198 And WindowMouseY() < 233
      SetGadgetState(1, ImageID1(3))
    Else
      SetGadgetState(1, ImageID1(2))
    EndIf
    If WindowMouseX() > 51 And WindowMouseX() < 304 And WindowMouseY() > 256 And WindowMouseY() < 291
      SetGadgetState(2, ImageID1(5))
    Else
      SetGadgetState(2, ImageID1(4))
    EndIf
    
  Until event = #PB_Event_CloseWindow Or event = 1
  
  If event = #PB_Event_CloseWindow : End : EndIf
  
EndIf
;}

If InitSprite() And InitMouse() And InitKeyboard() And OpenWindow(0, 0, 0, #window_width, #window_height, #PB_Window_ScreenCentered | #PB_Window_SystemMenu, "Space") And OpenWindowedScreen(WindowID(0), 0, 0, WindowWidth(), WindowHeight(), 0, 0, 0)
  
  KeyboardMode(1)
  
  ;{ sprite
  CatchSprite(0, ?vaisseau)
  CatchSprite(1, ?laser)
  CatchSprite(2, ?asteroid_small)
  CatchSprite(3, ?asteroid_big)
  CatchSprite(4, ?balle)
  CatchSprite(5, ?explosion_small)
  CatchSprite(6, ?explosion_big)
  CatchSprite(7, ?ennemi_1)
  CatchSprite(8, ?ennemi_2)
  CatchSprite(9, ?ennemi_3)
  CatchSprite(10, ?ennemi_4)
  CatchSprite(11, ?missile)
  CatchSprite(12, ?missile_bonus)
  CatchSprite(13, ?ennemi_5)
  CatchSprite(14, ?ennemi_6)
  CatchSprite(15, ?ennemi_7)
  CatchSprite(16, ?laser_ennemi)
  CatchSprite(17, ?boss_1)
  CatchSprite(18, ?boss_2)
  CatchSprite(19, ?ennemi_8)
  TransparentSpriteColor(0, 0, 0, 0)
  TransparentSpriteColor(1, 0, 0, 0)
  TransparentSpriteColor(2, 255, 0, 255)
  TransparentSpriteColor(3, 255, 0, 255)
  TransparentSpriteColor(4, 0, 0, 0)
  TransparentSpriteColor(5, 255, 0, 255)
  TransparentSpriteColor(6, 255, 0, 255)
  TransparentSpriteColor(7, 255, 255, 255)
  TransparentSpriteColor(8, 255, 255, 255)
  TransparentSpriteColor(9, 255, 255, 255)
  TransparentSpriteColor(10, 255, 255, 255)
  TransparentSpriteColor(11, 255, 255, 255)
  TransparentSpriteColor(12, 255, 255, 255)
  TransparentSpriteColor(13, 255, 255, 255)
  TransparentSpriteColor(14, 255, 255, 255)
  TransparentSpriteColor(15, 255, 255, 255)
  TransparentSpriteColor(16, 255, 255, 255)
  TransparentSpriteColor(17, 255, 255, 255)
  TransparentSpriteColor(18, 255, 255, 255)
  TransparentSpriteColor(19, 255, 255, 255)
  CreateAnimSprite(vaisseau, 0, 64, 64)
  CreateAnimSprite(asteroid_small, 2, 50, 50)
  CreateAnimSprite(asteroid_big, 3, 75, 75)
  CreateAnimSprite(explosion_small, 5, 50, 50)
  CreateAnimSprite(explosion_big, 6, 100, 100)
  CreateAnimSprite(ennemi_1, 7, 45, 50)
  CreateAnimSprite(ennemi_2, 8, 36, 56)
  CreateAnimSprite(ennemi_3, 9, 78, 72)
  CreateAnimSprite(ennemi_4, 10, 65, 44)
  CreateAnimSprite(ennemi_5, 13, 51, 72)
  CreateAnimSprite(ennemi_6, 14, 77, 50)
  CreateAnimSprite(ennemi_7, 15, 83, 102)
  CreateAnimSprite(ennemi_8, 19, 91, 66)
  CreateAnimSprite(boss_1, 17, 195, 210)
  CreateAnimSprite(boss_2, 18, 331, 220)
  ;}
  
  vais.POINT\x = 10
  vais\y = WindowHeight() - 100
  old_vais.point\x = 10
  old_vais\y = WindowHeight() - 100
  acceleration.point\x = 0
  acceleration\y = 0
  life = #life_max
  vit_max = 1160
  vit_max_ennemi = 40
  vit_max_div.f = 10
  
  laser = 0
  laser_ennemi = 0
  laser_timer = ElapsedMilliseconds()
  laser_intervale = 204; en ms
  laser_vitesse = 580; en pixel \ second
  ennemi_actuel = 1
  niveau = 1
  ajout = 1
  
  delay = 1
  
  modefps = 1
  GameTimer(0)
  
  Repeat
    nombre_missile = 6
    
    event = WindowEvent()
    ExamineKeyboard()
    
    Delay1(delay)
    
    ;{ deplacement & tir
    
    old_vais\x = vais\x
    old_vais\y = vais\y
    If KeyboardPushed(#PB_Key_Left)
      acceleration\x - GameSpeed(vit_max / vit_max_div, Elapsed_time)
      If acceleration\x < -GameSpeed(vit_max, Elapsed_time) : acceleration\x = -GameSpeed(vit_max, Elapsed_time) : EndIf
    ElseIf KeyboardPushed(#PB_Key_Right)
      acceleration\x + GameSpeed(vit_max / vit_max_div, Elapsed_time)
      If acceleration\x > GameSpeed(vit_max, Elapsed_time) : acceleration\x = GameSpeed(vit_max, Elapsed_time) : EndIf
    EndIf
    If KeyboardPushed(#PB_Key_Up)
      acceleration\y - GameSpeed(vit_max / vit_max_div, Elapsed_time)
      If acceleration\y < -GameSpeed(vit_max, Elapsed_time) : acceleration\y = -GameSpeed(vit_max, Elapsed_time) : EndIf
    ElseIf KeyboardPushed(#PB_Key_Down)
      acceleration\y + GameSpeed(vit_max / vit_max_div, Elapsed_time)
      If acceleration\y > GameSpeed(vit_max, Elapsed_time) : acceleration\y = GameSpeed(vit_max, Elapsed_time) : EndIf
    EndIf
    
    ;{ laser
    If KeyboardPushed(#PB_Key_Space) And ElapsedMilliseconds() - laser_timer > laser_intervale
      laser + 1
      If laser > #nombre_laser : laser = 0 : EndIf
      laser(laser)\x = vais\x + 31
      laser(laser)\y = vais\y - 20
      
      laser_timer = ElapsedMilliseconds()
    EndIf
    ;}
    
    ;{ missile
    If KeyboardReleased(#PB_Key_C) And missile_lance\x = 0 And nombre_missile
      missile_lance\x = vais\x + 28
      missile_lance\y = vais\y - 4
      missile_lance\cible = -1
      proche = 0
      FindCible(vais\y)        
      nombre_missile - 1
    EndIf
    ;}
    
    If acceleration\x > 0
      acceleration\x - 1
    ElseIf acceleration\x < 0
      acceleration\x + 1
    EndIf
    If acceleration\y > 0
      acceleration\y - 1
    ElseIf acceleration\y < 0
      acceleration\y + 1
    EndIf
    
    vais\x + acceleration\x / (GameSpeed(vit_max / vit_max_div, Elapsed_time))
    vais\y + acceleration\y / (GameSpeed(vit_max / vit_max_div, Elapsed_time))
    
    
    If vais\x < 1
      vais\x = 1
    ElseIf vais\x > WindowWidth() - 65
      vais\x = WindowWidth() - 65
    EndIf
    If vais\y < 1
      vais\y = 1
    ElseIf vais\y > WindowHeight() - 65
      vais\y = WindowHeight() - 65
    EndIf 
        
    If acceleration\x > 0
      SetAnimDirection(vaisseau, 1)
    Else
      SetAnimDirection(vaisseau, 2)
    EndIf
    SetAnimFrame(vaisseau, Abs(acceleration\x / (GameSpeed(vit_max / vit_max_div, Elapsed_time))))
    ;}
    
    ClearScreen(0, 0, 0)
    
    Elapsed_time = GameTimer(2)
    
    If modefps = 1
      If StartDrawing(ScreenOutput())
          DrawText1(0, 0, "FPS = " + Str(GameTimer(3)))
          DrawText1(0, 20, "elapsed time = " + Str(Elapsed_time))
        StopDrawing()
      EndIf
    EndIf
    
    DrawAsteroid()
    If mode_boss = 1
      ModeBoss()
    EndIf
    DrawLaser(laser_vitesse)
    DrawLife()
    DrawEnnemi()
    DrawBonus()
    DrawMissile()
    DisplayAnimSprite(vaisseau, vais\x, vais\y)
    
    If ajout = 2 And mode_boss = 0
      score_total\y + score_total\x
      score_total\x = 0
      ennemi_actuel + 1
      mode_boss = 0
      If Fract(ennemi_actuel / 5) = 0
        mode_boss = 1
        boss\vie = 2000
      EndIf
    EndIf
    
    ajout = 1
    If score_total\x >= ennemi_actuel * 5 Or mode_boss = 1 : ajout = 0 : EndIf
    
    If boss\vie <= 0 And mode_boss = 1 : score_total\x + score_total\x : mode_boss = 0 : niveau + 1 : ennemi_actuel = 0 : boss\x = 0 : EndIf
    
    FlipBuffers()
    
    If KeyboardPushed(#PB_Key_D)
      Repeat
        WindowEvent()
        ExamineKeyboard()
      Until KeyboardPushed(#PB_Key_D) = 0
    EndIf
    
    If KeyboardReleased(#PB_Key_A)
      delay + 1
      If delay > 20 : delay = 20 : EndIf
    EndIf
    If KeyboardReleased(#PB_Key_Z)
      delay - 1
      If delay < 1 : delay = 1 : EndIf
    EndIf
    
    If KeyboardReleased(#PB_Key_F1)
      If modefps = 1
        modefps = 0
      Else
        modefps = 1
      EndIf
    EndIf
    
  Until event = #PB_Event_CloseWindow Or KeyboardPushed(#PB_Key_Escape) Or life < 0 Or ennemi_actuel + (niveau - 1) * 5 > #nombre_ennemi
EndIf

If life < 0
  MessageRequester("", "Vous avez perdu !" + Chr(13) + "Score = " + Str(score_total\y))
EndIf

If ennemi_actuel + (niveau - 1) * 5 > #nombre_ennemi
  score_total\y = (score_total\y + score_total\x) * 2
  MessageRequester("", "Vous avez gagné !" + Chr(13) + "Score = " + Str(score_total\y))
EndIf

CloseScreen()
CloseWindow(0)
End

GameTimer(1)

;{ data section
DataSection
  start_screen:
    IncludeBinary "IMAGE\Screen_start.png"
  button_quitter:
    IncludeBinary "IMAGE\button_quitter.png"
  jouer_1:
    IncludeBinary "IMAGE\jouer_1.png"
  jouer_2:
    IncludeBinary "IMAGE\jouer_2.png"
  commande_1:
    IncludeBinary "IMAGE\commande_1.png"
  commande_2:
    IncludeBinary "IMAGE\commande_2.png"
  fleche:
    IncludeBinary "IMAGE\fleche.png"
  arme:
    IncludeBinary "IMAGE\arme.png"
  vaisseau:
    IncludeBinary "IMAGE\anim_vaisseau.png"
  laser:
    IncludeBinary "IMAGE\laser.png"
  laser_ennemi:
    IncludeBinary "IMAGE\laser_ennemi.png"
  asteroid_small:
    IncludeBinary "IMAGE\anim_asteroid_small.png"
  asteroid_big:
    IncludeBinary "IMAGE\anim_asteroid_big.png"
  balle:
    IncludeBinary "IMAGE\balle3.png"
  explosion_small:
    IncludeBinary "IMAGE\anim_explosion_small.png"
  explosion_big:
    IncludeBinary "IMAGE\anim_explosion_big.png"
  missile_bonus:
    IncludeBinary "IMAGE\missile_bonus.png"
  missile:
    IncludeBinary "IMAGE\missile.png"
  ennemi_1:
    IncludeBinary "IMAGE\anim_ennemi_1.png"
  ennemi_2:
    IncludeBinary "IMAGE\anim_ennemi_2.png"
  ennemi_3:
    IncludeBinary "IMAGE\anim_ennemi_3.png"
  ennemi_4:
    IncludeBinary "IMAGE\anim_ennemi_4.png"
  ennemi_5:
    IncludeBinary "IMAGE\anim_ennemi_5.png"
  ennemi_6:
    IncludeBinary "IMAGE\anim_ennemi_6.png"
  ennemi_7:
    IncludeBinary "IMAGE\anim_ennemi_7.png"
  ennemi_8:
    IncludeBinary "IMAGE\anim_ennemi_8.png"
  boss_1:
    IncludeBinary "IMAGE\anim_ennemi_boss_1.png"
  boss_2:
    IncludeBinary "IMAGE\anim_ennemi_boss_2.png"
EndDataSection

DataSection
  tir_1:
    Data.l 2
    Data.l 5, 37, 39, 37
    Data.l 5, 39, 39, 38
    Data.l 7, 38, 36, 39
    Data.l 10, 38, 34, 37
    
  tir_2:
    Data.l 2
    Data.l 3, 55, 31, 55
    Data.l 4, 55, 30, 55
    Data.l 5, 55, 29, 55
    Data.l 7, 55, 27, 55
    
  tir_3:
    Data.l 4
    Data.l 6, 26, 11, 26, 66, 26, 71, 26
    Data.l 7, 26, 13, 26, 66, 26, 70, 26
    Data.l 11, 26, 17, 26, 64, 26, 68, 26
    Data.l 16, 26, 21, 26, 60, 26, 62, 26
    
  tir_4:
    Data.l 2
    Data.l 9, 43, 55, 43
    Data.l 10, 43, 54, 43
    Data.l 12, 43, 51, 43
    Data.l 16, 43, 48, 43
    
  tir_5: ; boss 1
    Data.l 4
    Data.l 31, 202, 41, 209, 153, 209, 162, 201
    Data.l 30, 201, 39, 209, 147, 209, 156, 201
    Data.l 33, 202, 41, 209, 138, 209, 147, 201
    Data.l 44, 201, 51, 209, 129, 209, 136, 201
    
  tir_6:
    Data.l 1
    Data.l 25, 71
    Data.l 25, 71
    Data.l 25, 71
    Data.l 25, 71
    
  tir_7:
    Data.l 4
    Data.l 15, 16, 20, 21, 55, 21, 61, 16
    Data.l 15, 16, 21, 21, 55, 21, 60, 16
    Data.l 18, 16, 23, 21, 53, 21, 58, 16
    Data.l 22, 16, 26, 21, 51, 21, 55, 16
    
  tir_8:
    Data.l 2
    Data.l 31, 101, 50, 101
    Data.l 30, 101, 49, 101
    Data.l 29, 101, 47, 101
    Data.l 31, 101, 44, 101
    
  tir_9:
    Data.l 4
    Data.l 17, 48, 20, 48, 70, 48, 72, 48
    Data.l 18, 48, 21, 48, 69, 48, 71, 48
    Data.l 21, 48, 24, 48, 66, 48, 69, 48
    Data.l 25, 48, 27, 48, 62, 48, 64, 48
    
  tir_10: ; boss 2
    Data.l 10
    Data.l 52, 164, 50, 164, 66, 193, 66, 193, 157, 219, 172, 219, 264, 193, 264, 193, 277, 164, 277, 164
    Data.l 48, 164, 64, 164, 60, 193, 76, 193, 157, 219, 172, 219, 268, 193, 280, 164, 254, 192, 265, 160
    Data.l 52, 163, 82, 163, 64, 194, 93, 193, 158, 219, 171, 219, 265, 193, 277, 163, 235, 193, 246, 164
    Data.l 62, 163, 71, 194, 105, 163, 114, 193, 257, 219, 169, 219, 255, 193, 264, 163, 220, 163, 210, 193
    
EndDataSection
;}
certaine commande sont commentée j'ai pas eu le temp de le defaire
Sehka
Messages : 114
Inscription : dim. 27/févr./2005 11:41

Message par Sehka »

Salut, Il ne manquerait pas un bout de code ?
Le programme ne trouve pas la structure AnimSprite
Merci.
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Message par graph100 »

tu as la librairie PBOSL ? y a tous dedans ^^
Sehka
Messages : 114
Inscription : dim. 27/févr./2005 11:41

Message par Sehka »

Eh bien non, je n'ai pas la librairie...
Merci, je vais jeter un oeil :wink:
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

Message par lionel_om »

Simpa, tourne kinckel chez moi (heureusement X2 3800+ 8) )
Bonne continuation :wink:
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Répondre