2eme code .pbi et c'est fini... bon test
Code : Tout sélectionner
;
; Ce code, regroupant toutes les procédures d'affichages, doit être sauvegardé sous le nom de infiniaffichage en .pbi
; version 0.6
Procedure.l Affichageintro() ; titre + vaisseau du joueur vue sous toute les coutures...
Static tempoappui.b
Static tempointro.b
Static ishipintro.b
Static tempocercle.b
Static cercler.b
Static cercletat.b
Static fabriquetoile.b
If fabriquetoile=0:fabriquetoile=1
For tx=0 To 5
For ty=0 To 5+1
Fetoile( tx, ty, 0) ; installation des étoiles dans la partie gauche de l'écran.
Next
Next
EndIf
; titre:
ClipSprite(#shipb, 192, 208, 128, 48):DisplayTransparentSprite( #shipb , 400-64, 212)
ClipSprite(#shipb, 300, 208, 17, 2):DisplayTransparentSprite( #shipb , 400+45, 210)
; l'objectif ici, étant de rendre le titre un peu moins triste:
If pause=0:tempocercle+2:EndIf
If tempocercle>4:tempocercle=0
If cercletat=0:cercler+1
If cercler>32:cercler=32:cercletat=1:EndIf
EndIf
If cercletat=1:cercler-1
If cercler<0:cercler=0:cercletat=0:EndIf
EndIf
EndIf
For t=1 To 360 Step 10; 360/10= 36 étoiles rouges.
ClipSprite(#shipb, 209, 230, 15, 15)
; DisplayTransparentSprite( #shipb , 370+24+(80+cercler)*Sin(t*0.0174532925), 205+24+(80+cercler)*Cos(t*0.0174532925)) ; (80+cercler)=diamètre
DisplayTransparentSprite( #shipb , 370+24+(80+cercler)*(Sin(cercler+t*0.0174532925)), 205+24+(80+cercler)*(Cos(cercler+t*0.0174532925))) ; (80+cercler)=diamètre
;zutA+1
Next
ClipSprite(#shipb, 200, 211, 1, 1):DisplayTransparentSprite( #shipb , 380, 190):DisplayTransparentSprite( #shipb , 440, 280)
DisplayTransparentSprite( #shipb , 420, 170):DisplayTransparentSprite( #shipb , 400, 300):DisplayTransparentSprite( #shipb , 380, 280)
DisplayTransparentSprite( #shipb , 356, 274):DisplayTransparentSprite( #shipb , 366, 264):DisplayTransparentSprite( #shipb , 409, 268)
; vaisseau du joueur vue sous toute les coutures:
If pause=0:tempointro+1:EndIf
If tempointro>18:tempointro=0
ishipintro+1
If ishipintro>15:ishipintro=0:EndIf
EndIf
If ishipintro<5:ClipSprite(#shipb, ishipintro*64, 64, 64, 48):EndIf
If ishipintro>4 And ishipintro<10:ClipSprite(#shipb, (ishipintro-5)*64, 112, 64, 48):EndIf
If ishipintro>9 And ishipintro<15:ClipSprite(#shipb, (ishipintro-10)*64, 160, 64, 48):EndIf
If ishipintro=15:ClipSprite(#shipb, 0, 208, 64, 48):EndIf
DisplayTransparentSprite( #shipb , 400-32, 410)
;DisplayTransparentSprite( #irepere , 400, 350)
StartDrawing ( ScreenOutput ())
DrawingMode (1)
FrontColor ( RGB (255,255,255))
If manette=0
DrawingFont ( FontID (0))
FrontColor ( RGB (154,154,154)) :DrawText (277+1, 540+1, "appuyez sur la touche X")
FrontColor ( RGB (234,234,234)) :DrawText (277, 540, "appuyez sur la touche X")
DrawingFont ( FontID (2))
FrontColor ( RGB (154,154,154)) :DrawText (150+1, 672+1, "Il n'y a pas de manette de jeu branché sur votre machine, quelle tristesse...")
FrontColor ( RGB (234,234,234)) :DrawText (150, 672, "Il n'y a pas de manette de jeu branché sur votre machine, quelle tristesse...")
EndIf
If manette=1
DrawingFont ( FontID (0))
FrontColor ( RGB (154,154,154)) :DrawText (150+1, 540+1, "appuyez sur le bouton 1 de votre manette de jeu")
FrontColor ( RGB (234,234,234)) :DrawText (150, 540, "appuyez sur le bouton 1 de votre manette de jeu")
DrawingFont ( FontID (2))
FrontColor ( RGB (154,154,154)) :DrawText (300+1, 672+1, "manette joyeusement détectée !")
FrontColor ( RGB (234,234,234)) :DrawText (300, 672, "manette joyeusement détectée !")
EndIf
DrawingFont ( FontID (2))
FrontColor ( RGB (154,154,154)) :DrawText ((EcranX-120)+1, 8+1, "version 0.6")
FrontColor ( RGB (234,234,234)) :DrawText ((EcranX-120), 8, "version 0.6")
StopDrawing ()
If tempoappui<51 And pause=0:tempoappui+1:EndIf
If bouton1=1 And tempoappui>50 And pause=0:tempoappui=0:etape=1:lacheboutonX=1:EndIf
EndProcedure
Procedure.l Affichagetoile()
Static fabfilante.b
ForEach etoile()
If etoile()\id=50 And etoile()\boutonA=1:DeleteElement(etoile()):EndIf ; détruire étoile filante
Next
ForEach etoile()
; If etoile()\taille=0:ClipSprite(#shipb, 200, 211, 1, 1):DisplayTransparentSprite( #shipb , etoile()\x, etoile()\y):EndIf
; If etoile()\taille=1:ClipSprite(#shipb, 209, 230, 15, 15):DisplayTransparentSprite( #shipb , etoile()\x-7, etoile()\y):EndIf
If etoile()\id<6
If etoile()\id=0
DisplaySprite3D( #sfonda3D , etoile()\x, etoile()\y, 255)
EndIf
If etoile()\id=1
DisplaySprite3D( #sfondb3D , etoile()\x, etoile()\y, 255)
EndIf
If etoile()\id=2
DisplaySprite3D( #sfondc3D , etoile()\x, etoile()\y, 255)
EndIf
If etoile()\id=3
DisplaySprite3D( #sfondd3D , etoile()\x, etoile()\y, 255)
EndIf
If etoile()\id=4
DisplaySprite3D( #sfonde3D , etoile()\x, etoile()\y, 255)
EndIf
If etoile()\id=5
DisplaySprite3D( #sfondf3D , etoile()\x, etoile()\y, 255)
EndIf
If pause=0 And etape=10:etoile()\y+1
If etoile()\y>EcranY
etoile()\y=-128
fabfilante=1
EndIf
EndIf
EndIf ; If etoile()\id<6
If etoile()\id=50 ; etoile filante
zutA+1 ; test: connaitre le nombre d'étoile
DisplaySprite3D( #filante3D , etoile()\x, etoile()\y, 170)
If pause=0 And etape=10:etoile()\y+2
If etoile()\y>EcranY
etoile()\boutonA=1
EndIf
EndIf
EndIf
Next
If fabfilante=1:fabfilante=0 ; on en profite pour fabriquer quelques étoiles filantes...
Fetoile(0, -16, 1):Fetoile(0, -80, 1):Fetoile(0, -144, 1)
EndIf
EndProcedure
Procedure.l Affichagegameover()
Static tempover.b
If tempover<51 And pause=0:tempover+1:EndIf ; petite temporisation, avant de redonner la main au joueur.
StartDrawing ( ScreenOutput ())
DrawingMode (1)
DrawingFont ( FontID (1))
FrontColor ( RGB (255,255,255))
FrontColor ( RGB (154,154,154)) :DrawText (276+1, 260+1, "GAME OVER")
FrontColor ( RGB (234,234,234)) :DrawText (276, 260, "GAME OVER")
If manette=0 And tempover>50
DrawingFont ( FontID (0))
FrontColor ( RGB (154,154,154)) :DrawText (280+1, 480+1, "appuyez sur la touche X")
FrontColor ( RGB (234,234,234)) :DrawText (280, 480, "appuyez sur la touche X")
EndIf
If manette=1 And tempover>50
DrawingFont ( FontID (0))
FrontColor ( RGB (154,154,154)) :DrawText (280+1, 480+1, "appuyez sur le bouton 1")
FrontColor ( RGB (234,234,234)) :DrawText (280, 480, "appuyez sur le bouton 1")
EndIf
StopDrawing ()
If bouton1=1 And tempover>50 And pause=0:tempover=0; remise à l'état premier de toutes les variables, voyez.
; ecriture fichier de sauvegarde :
If newhiscore=1:newhiscore=0
If CreateFile(0,"infinisauv.dat")
WriteDouble(0, hiscore);WriteCharacter(0, hiscore);WriteByte(0, hiscore)
CloseFile(0)
EndIf
EndIf
etape=0:level=1:recharge=0
Xgentil=400-32:Ygentil=EcranY-96:score=0:vie=3:invuln=99:bonusvie=0
extra=0:nombrextra=0:topdepartextra=0
dirbruteA=0:dirbruteB=0:dirbruteC=0; dans une même direction, pour un même but ;)
speedbrut=1:nbrdetruit=0
ForEach tirg() ; il faut supprimer tout les clones tirg.
DeleteElement(tirg())
Next
ForEach soucoupe() ; il faut supprimer tout les soucoupes.
DeleteElement(soucoupe())
Next
ForEach bruteA() ; il faut supprimer tout les clones bruteA.
DeleteElement(bruteA())
Next
ForEach bruteB() ; il faut supprimer tout les clones bruteB.
DeleteElement(bruteB())
Next
ForEach bruteC() ; il faut supprimer tout les clones bruteC.
DeleteElement(bruteC())
Next
ForEach tirb() ; il faut supprimer tout les clones tirb.
DeleteElement(tirb())
Next
; ForEach etoile()
; DeleteElement(etoile())
; Next
ForEach scorep() ; il faut supprimer tout les clones score.
DeleteElement(scorep())
Next
ForEach lifeup() ; il faut supprimer tout les clones life.
DeleteElement(lifeup())
Next
EndIf
;DisplayTransparentSprite( #irepere , 400, 350)
EndProcedure
Procedure.l Affichageship() ; vaisseau dirigé par le joueur.
Static tempod.b ; temporisation utilisée pour la direction du vaisseau du joueur
Static shipdirection.b ; et cette variable détermine la direction du vaisseau du joueur
;zutA=shipdirection
If pause=0 And invuln<100
If directionX=1 And Xgentil<EcranX-64:Xgentil+6; va à droite
If Xgentil>EcranX-65:Xgentil=EcranX-64:EndIf ; limite droite
If shipdirection<0:shipdirection=0:EndIf
tempod+1
If tempod>6:tempod=0
If shipdirection<2:shipdirection+1:EndIf
EndIf
EndIf
If directionX=-1 And Xgentil>0:Xgentil-6; va à gauche
If Xgentil<1:Xgentil=0:EndIf ; limite gauche
If shipdirection>0:shipdirection=0:EndIf
tempod+1
If tempod>6:tempod=0
If shipdirection>-2:shipdirection-1:EndIf
EndIf
EndIf
; si le joueur ne touche pas les touches fleches, alors le vaisseau doit se rétablir.
If directionX=0;KeyboardPushed ( #PB_Key_Right )=0 And KeyboardPushed ( #PB_Key_Left )=0
tempod+1
If tempod>6:tempod=0
If shipdirection>0:shipdirection-1:EndIf
If shipdirection<0:shipdirection+1:EndIf
EndIf
EndIf
If bouton1=0 And lacheboutonX=1:lacheboutonX=0:EndIf
If bouton1=1 And lacheboutonX=0 And recharge=0 ; tir !
recharge=24:Ftirgentil( (Xgentil+32)-8, Ygentil )
lacheboutonX=1; <- ligne a désactiver si vous voulez donner au joueur un tir automatique.
EndIf
If recharge>0:recharge-1:EndIf ; petite temporisation avant d'autoriser un prochain tir
EndIf; If pause=0 And invuln<100
Affichagetirgentil()
If invuln>0 And invuln<100 And pause=0:invuln-1:EndIf
If invuln=0 Or (invuln>10 And invuln<20) Or (invuln>30 And invuln<40) Or (invuln>50 And invuln<60) Or (invuln>80 And invuln<90) Or invuln=100
; 5 images d'une taille de 64*64
If shipdirection=0:ClipSprite(#shipb, 0, 0, 64, 64):EndIf; vue de dessus( si le joueur ne touche à rien)
If shipdirection=1:ClipSprite(#shipb, 64, 0, 64, 64):EndIf; droite 1
If shipdirection=2:ClipSprite(#shipb, 128, 0, 64, 64):EndIf; droite 2
If shipdirection=-1:ClipSprite(#shipb, 192, 0, 64, 64):EndIf; gauche 1
If shipdirection=-2:ClipSprite(#shipb, 256, 0, 64, 64):EndIf; gauche 2
DisplayTransparentSprite( #shipb , Xgentil, Ygentil)
EndIf
;DisplayTransparentSprite( #irepere , Xgentil, Ygentil)
;DisplayTransparentSprite( #irepere , Xgentil+64, Ygentil)
If invuln>99; explosion du vaisseau ! Utilisation d'un sprite3D
; taille de #boum3D: 128*128
; ZoomSprite3D(#Sprite3D, Largeur, Hauteur)
; Si invuln=100, alors explosion 1.
; Si invuln=101, alors explosion 2.
If invuln=100;- 1ere partie de l'explosion
ZoomSprite3D(#boum3D, 64+zoomboum, 64+zoomboum)
DisplaySprite3D ( #boum3D , (Xgentil)-(zoomboum/2), (Ygentil)-(zoomboum/2), 55+transpboum)
If transpboum<200 And pause=0:transpboum+4:EndIf
EndIf
If invuln=101;- 2eme partie de l'explosion
ZoomSprite3D(#boum3D, 128, 192-zoomboum)
DisplaySprite3D ( #boum3D , (Xgentil)-(64/2), ((Ygentil)-(zoomboum/2))+zoomY, 55+transpboum)
If transpboum>0 And pause=0:transpboum-4:EndIf
EndIf
If zoomboum<64 And invuln=100 And pause=0:zoomboum+2; 1ere partie de l'explosion
If zoomboum>63:zoomboum=64:invuln=101:EndIf
EndIf
If zoomboum<128 And invuln=101 And pause=0:zoomboum+2:zoomY+2; 2eme partie de l'explosion
If zoomboum>127:zoomboum=0:invuln=99:EndIf; fin explosion, le jouer récupère la main.
EndIf
;zutA=transpboum;(Xgentil-32)-(zoomboum/2)
EndIf; If invuln=100; explosion du vaisseau !
EndProcedure
Procedure.l Affichagetirgentil() ; Affichage des clones tirs du vaisseau du joueur
ForEach tirg()
If pause=0:tirg()\y-10:EndIf
If pause=0:tirg()\boutonB+1:EndIf
If tirg()\boutonB=9:tirg()\boutonB=1:EndIf
If tirg()\boutonB<5;1 2 3 4
ClipSprite(#envahisseurs, 0, 175, 16, 13):DisplayTransparentSprite( #envahisseurs , tirg()\x, tirg()\y); image tir haut 1
ClipSprite(#envahisseurs, 32, 175, 16, 13):DisplayTransparentSprite( #envahisseurs , tirg()\x, tirg()\y+12); image tir bas 1
EndIf
If tirg()\boutonB>4; 5 6 7 8
ClipSprite(#envahisseurs, 16, 175, 16, 13):DisplayTransparentSprite( #envahisseurs , tirg()\x, tirg()\y); image tir haut 2
ClipSprite(#envahisseurs, 16+32, 175, 16, 13):DisplayTransparentSprite( #envahisseurs , tirg()\x, tirg()\y+12); image tir bas 2
EndIf
If tirg()\boutonA=1 Or tirg()\y<0-15:DeleteElement(tirg()):Continue:EndIf
ForEach soucoupe() ; ici, nous allons vérifier si un tir gentil touche la soucoupe qui ne tremble pas:
If tirg()\x>(soucoupe()\x-15)-8 And tirg()\x<(soucoupe()\x+79)+8 And soucoupe()\boutonB=0 ; -15 +79
If tirg()\y>(soucoupe()\y+2)-8 And tirg()\y<(soucoupe()\y+81)+8
tirg()\boutonA=1:soucoupe()\boutonA+1:score=score+(50*soucoupe()\boutonA):soucoupe()\boutonB=1
soucoupe()\boutonC=soucoupe()\boutonA;le boutonC va nous servir pour l'affichage spécifique du score de la soucoupe.
If soucoupe()\boutonC=5:soucoupe()\boutonB=2:EndIf
EndIf
EndIf
Next
ForEach bruteA() ; ici, nous allons vérifier si un tir gentil touche une bruteA:
If tirg()\x>bruteA()\x-8 And tirg()\x<(bruteA()\x+31)+8
If tirg()\y>bruteA()\y-8 And tirg()\y<(bruteA()\y+31)+8
tirg()\boutonA=1:bruteA()\blindage-1:bruteA()\bobo=10
If bruteA()\blindage<1
nbrdetruit+1:score+10
Fscorep(bruteA()\x,bruteA()\y, 10) ; score
Fbaoum(bruteA()\x, bruteA()\y+4, 1) ;- explosion d'une puissance de 1
DeleteElement(bruteA())
EndIf
EndIf
EndIf
Next
ForEach bruteB() ; ici, nous allons vérifier si un tir gentil touche une bruteB:
If tirg()\x>bruteB()\x-8 And tirg()\x<(bruteB()\x+31)+8
If tirg()\y>bruteB()\y-8 And tirg()\y<(bruteB()\y+31)+8
tirg()\boutonA=1:bruteB()\blindage-1:bruteB()\bobo=10
If bruteB()\blindage<1
nbrdetruit+1:score+20
Fscorep(bruteB()\x,bruteB()\y, 20)
Fbaoum(bruteB()\x-8, bruteB()\y-8, 2) ;- explosion d'une puissance de 2
DeleteElement(bruteB())
EndIf
EndIf
EndIf
Next
ForEach bruteC() ; ici, nous allons vérifier si un tir gentil touche une bruteC:
If tirg()\x>bruteC()\x-8 And tirg()\x<(bruteC()\x+31)+8
If tirg()\y>bruteC()\y-8 And tirg()\y<(bruteC()\y+31)+8
tirg()\boutonA=1:bruteC()\blindage-1:bruteC()\bobo=10
If bruteC()\blindage<1
nbrdetruit+1:score+30
Fscorep(bruteC()\x,bruteC()\y, 30)
Fbaoum(bruteC()\x-16, bruteC()\y-16, 3) ;- explosion d'une puissance de 3
DeleteElement(bruteC())
EndIf
EndIf
EndIf
Next
; ici, newhiscore autorisera la sauvegarde du hi-score sur le fichier de sauvegarde( voir Procedure.l Affichagegameover() ).
If score>hiscore:hiscore=score:newhiscore=1:EndIf
Next
;- augmente régulièrement la vitesse
;- de déplacement des brutes, au fur et à mesure de leurs destructions...
If nbrdetruit>4-1 And speedbrut<2:speedbrut=2:EndIf
If nbrdetruit>8-1 And speedbrut<3:speedbrut=3:EndIf
If nbrdetruit>12-1 And speedbrut<4:speedbrut=4:EndIf
If nbrdetruit>16-1 And speedbrut<5:speedbrut=5:EndIf
If nbrdetruit>20-1 And speedbrut<6:speedbrut=6:EndIf
EndProcedure
Procedure.l Affichsoucoupe()
ForEach soucoupe()
; °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
; soucoupe touchée par un laser tiré par le joueur:
If pause=0 And soucoupe()\boutonB=1:soucoupe()\trembl=0
soucoupe()\tempoA+1
; 1 2 3
If soucoupe()\tempoA>3 And soucoupe()\tempoA<7:soucoupe()\trembl=soucoupe()\boutonA:EndIf;4 5 6
; 7 8 9
If soucoupe()\tempoA>9 And soucoupe()\tempoA<13:soucoupe()\trembl=-soucoupe()\boutonA:EndIf;10 11 12
; 13 14 15
If soucoupe()\tempoA>15 And soucoupe()\tempoA<19:soucoupe()\trembl=soucoupe()\boutonA:EndIf;16 17 18
; 19 20 21
If soucoupe()\tempoA>21 And soucoupe()\tempoA<25:soucoupe()\trembl=-soucoupe()\boutonA:EndIf;22 23 24
If soucoupe()\tempoA=25:soucoupe()\tempoA=0:soucoupe()\boutonB=0:soucoupe()\trembl=0
soucoupe()\id+1 ; fin du tremblement, alors la soucoupe repart dans la direction opposé...
If soucoupe()\id=3:soucoupe()\id=1:EndIf
If soucoupe()\speed<3:soucoupe()\speed+1:EndIf; ... en augmentant sa vitesse, hé hé !
EndIf
If soucoupe()\tempoA=1 Or soucoupe()\tempoA=7 Or soucoupe()\tempoA=13 Or soucoupe()\tempoA=19
;le boutonC va nous servir pour l'affichage spécifique du score de la soucoupe( voir Procedure.l Affichagetirgentil() ):
If soucoupe()\boutonC>0:soucoupe()\boutonC-1
If soucoupe()\tempoA=1:Fscorep(soucoupe()\x+16,soucoupe()\y+64, 100):EndIf
If soucoupe()\tempoA=7:Fscorep(soucoupe()\x+16,soucoupe()\y+48, 100):EndIf
If soucoupe()\tempoA=13:Fscorep(soucoupe()\x+16,soucoupe()\y+32, 100):EndIf
If soucoupe()\tempoA=19:Fscorep(soucoupe()\x+16,soucoupe()\y+16, 100):EndIf
EndIf
EndIf
EndIf
; °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
; fuite...
If pause=0 And soucoupe()\boutonB=2:soucoupe()\trembl=0; ... au 5eme coup au but...
soucoupe()\tempoA+1
If soucoupe()\tempoA=25:soucoupe()\tempoA=1:EndIf
; 1 2 3
If soucoupe()\tempoA>3 And soucoupe()\tempoA<7:soucoupe()\trembl=soucoupe()\boutonA:EndIf;4 5 6
; 7 8 9
If soucoupe()\tempoA>9 And soucoupe()\tempoA<13:soucoupe()\trembl=-soucoupe()\boutonA:EndIf;10 11 12
; 13 14 15
If soucoupe()\tempoA>15 And soucoupe()\tempoA<19:soucoupe()\trembl=soucoupe()\boutonA:EndIf;16 17 18
; 19 20 21
If soucoupe()\tempoA>21 And soucoupe()\tempoA<25:soucoupe()\trembl=-soucoupe()\boutonA:EndIf;22 23 24
If soucoupe()\tempoA=1 Or soucoupe()\tempoA=7 Or soucoupe()\tempoA=13 Or soucoupe()\tempoA=19
;le boutonC va nous servir pour l'affichage spécifique du score de la soucoupe( voir Procedure.l Affichagetirgentil() ):
If soucoupe()\boutonC>0:soucoupe()\boutonC-1:Fscorep(soucoupe()\x+16,soucoupe()\y+64, 100):EndIf
EndIf
soucoupe()\y-1; ... l'extra quitte le terrain de jeu par le haut.
If soucoupe()\y+79<0:DeleteElement(soucoupe()):extra=0:Continue:EndIf ; si sort de l'écran par le haut, alors...
EndIf
; °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
; vie normale
If pause=0 And soucoupe()\boutonB=0
If soucoupe()\id=2:soucoupe()\x-soucoupe()\speed
If soucoupe()\x+79<0:DeleteElement(soucoupe()):extra=0:Continue:EndIf ; si sort de l'écran par la gauche, alors...
EndIf
If soucoupe()\id=1:soucoupe()\x+soucoupe()\speed
If soucoupe()\x-15>800:DeleteElement(soucoupe()):extra=0:Continue:EndIf ; si sort de l'écran par la droite, alors...
EndIf
EndIf
ClipSprite(#envahisseurs, 0, 68, 64, 79-4); soucoupe
DisplayTransparentSprite( #envahisseurs , (soucoupe()\x)+soucoupe()\trembl, (soucoupe()\y+2+4)+24)
ClipSprite(#envahisseurs, 8, 64, 56, 4); haut de la soucoupe
DisplayTransparentSprite( #envahisseurs , (soucoupe()\x)+soucoupe()\trembl+8, (soucoupe()\y+2)+24)
ClipSprite(#envahisseurs, 32, 32, 15, 19); aile gauche de la soucoupe
DisplayTransparentSprite( #envahisseurs , (soucoupe()\x-15)+soucoupe()\trembl, (soucoupe()\y+55)+24)
ClipSprite(#envahisseurs, 49, 32, 15, 19); aile gauche de la soucoupe
DisplayTransparentSprite( #envahisseurs , (soucoupe()\x+64)+soucoupe()\trembl, (soucoupe()\y+55)+24)
If soucoupe()\boutonB>0; bouche "Oooh ! je suis touché par un vilain laser, alors que je promène paisiblement mon troupeau de lama de l'espace..."
ClipSprite(#envahisseurs, 0, 64, 8, 4)
DisplayTransparentSprite( #envahisseurs , (soucoupe()\x)+soucoupe()\trembl+28, (soucoupe()\y+2+28)+24)
EndIf
; DisplayTransparentSprite( #irepere , soucoupe()\x-15, soucoupe()\y+2)
; DisplayTransparentSprite( #irepere , soucoupe()\x+79, soucoupe()\y+2)
Next
EndProcedure
Procedure.l AffichagebruteA() ; Affichage des clones bruteA
ForEach bruteA()
If ordretirbrute=0:ordretirbrute=1:EndIf
ordretirbrute+1
If pause=0
If dirbruteA=0:bruteA()\x+speedbrut
If bruteA()\x>(EcranX-4)-32:dirbruteA=1:EndIf ; bord de l'écran droite
EndIf
If dirbruteA=2:bruteA()\x-speedbrut
If bruteA()\x<0+4:dirbruteA=3:EndIf ; bord de l'écran gauche
EndIf
EndIf
ClipSprite(#envahisseurs, 0, 0, 32, 32)
DisplayTransparentSprite( #envahisseurs , bruteA()\x, bruteA()\y)
If bruteA()\y>EcranY-48:etape=20:EndIf; si touche le bas de l'écran, alors game over
; faut attendre le dernier clone pour decendre tout ce beau monde. Ce qui complique un peu le code.
If dirbruteA=1 And LastElement(bruteA()):dirbruteC=2:dirbruteB=2:dirbruteA=2:tousensemble=1
If topdepartextra=1 And extra=0:extra=1:EndIf
EndIf
If dirbruteA=3 And LastElement(bruteA()):dirbruteC=0:dirbruteB=0:dirbruteA=0:tousensemble=1
If topdepartextra=1 And extra=0:extra=2:EndIf
EndIf
If choixtirbrute>0 And choixtirbrute=ordretirbrute; tir ennemi !!
choixtirbrute=0:Ftirbrute( (bruteA()\x+16)-8, (bruteA()\y+31)-8 )
EndIf
; ici, nous allons vérifier si un vaisseau bruteA touche le gentil vaisseau du joueur, hum:
If invuln=0
If bruteA()\x+16>Xgentil-1 And bruteA()\x+16<Xgentil+64; on teste à partir du milieu de bruteA, car faut pas être trop dur avec le joueur.
If bruteA()\y+16>Ygentil-1 And bruteA()\y+16<Ygentil+64
invuln=100:vie-1:transpboum=0:zoomY=0
EndIf
EndIf
EndIf
Next
EndProcedure
Procedure.l AffichagebruteB() ; Affichage des clones bruteB
ForEach bruteB()
If ordretirbrute=0:ordretirbrute=1:EndIf
ordretirbrute+1
If pause=0
If dirbruteB=0:bruteB()\x+speedbrut
If bruteB()\x>(EcranX-4)-32:dirbruteB=1:EndIf ; bord de l'écran droite
EndIf
If dirbruteB=2:bruteB()\x-speedbrut
If bruteB()\x<0+4:dirbruteB=3:EndIf ; bord de l'écran gauche
EndIf
;bruteB()\y=posYbruteB
EndIf
If bruteB()\bobo=0:ClipSprite(#envahisseurs, 32, 0, 32, 32):DisplayTransparentSprite( #envahisseurs , bruteB()\x, bruteB()\y):EndIf
If bruteB()\bobo>0:bruteB()\bobo-1 ; si touché par un tir gentil, alors...
ClipSprite(#envahisseurs, 0, 143, 32, 32):DisplayTransparentSprite( #envahisseurs , bruteB()\x, bruteB()\y):EndIf
If bruteB()\y>EcranY-48:etape=20:EndIf; si touche le bas de l'écran, alors game over
; faut attendre le dernier clone pour decendre tout ce beau monde. Ce qui complique un peu le code.
If dirbruteB=1 And LastElement(bruteB()):dirbruteC=2:dirbruteB=2:dirbruteA=2:tousensemble=1
If topdepartextra=1 And extra=0:extra=1:EndIf
EndIf
If dirbruteB=3 And LastElement(bruteB()):dirbruteC=0:dirbruteB=0:dirbruteA=0:tousensemble=1
If topdepartextra=1 And extra=0:extra=2:EndIf
EndIf
If choixtirbrute>0 And choixtirbrute=ordretirbrute; tir ennemi !!
choixtirbrute=0:Ftirbrute( (bruteB()\x+16)-8, (bruteB()\y+31)-8 )
EndIf
; ici, nous allons vérifier si un vaisseau bruteB touche le gentil vaisseau du joueur, hum:
If invuln=0
If bruteB()\x+16>Xgentil-1 And bruteB()\x+16<Xgentil+64; on teste à partir du milieu de bruteB, car faut pas être trop dur avec le joueur.
If bruteB()\y+16>Ygentil-1 And bruteB()\y+16<Ygentil+64
invuln=100:vie-1:transpboum=0:zoomY=0
EndIf
EndIf
EndIf
Next
EndProcedure
Procedure.l AffichagebruteC() ; Affichage des clones bruteC
ForEach bruteC()
If ordretirbrute=0:ordretirbrute=1:EndIf
ordretirbrute+1
If pause=0
If dirbruteC=0:bruteC()\x+speedbrut
If bruteC()\x>(EcranX-4)-32:dirbruteC=1:EndIf ; bord de l'écran droite
EndIf
If dirbruteC=2:bruteC()\x-speedbrut
If bruteC()\x<0+4:dirbruteC=3:EndIf ; bord de l'écran gauche
EndIf
;bruteC()\y=posYbruteC
EndIf
If bruteC()\bobo=0:ClipSprite(#envahisseurs, 0, 32, 32, 32):DisplayTransparentSprite( #envahisseurs , bruteC()\x, bruteC()\y):EndIf
If pause=0:bruteC()\tempoA+1:EndIf
If bruteC()\tempoA>24:bruteC()\tempoA=0:EndIf
If bruteC()\tempoA>12 And bruteC()\bobo=0
DisplayTransparentSprite( #bouche , bruteC()\x+12, bruteC()\y+20)
EndIf
If bruteC()\bobo>0:bruteC()\bobo-1 ; si touché par un tir gentil, alors...
ClipSprite(#envahisseurs, 32, 143, 32, 32):DisplayTransparentSprite( #envahisseurs , bruteC()\x, bruteC()\y):EndIf
If bruteC()\y>EcranY-48:etape=20:EndIf; si touche le bas de l'écran, alors game over
; faut attendre le dernier clone pour decendre tout ce beau monde. Ce qui complique un peu le code.
If dirbruteC=1 And LastElement(bruteC()):dirbruteC=2:dirbruteB=2:dirbruteA=2:tousensemble=1
If topdepartextra=1 And extra=0:extra=1:EndIf
EndIf
If dirbruteC=3 And LastElement(bruteC()):dirbruteC=0:dirbruteB=0:dirbruteA=0:tousensemble=1
If topdepartextra=1 And extra=0:extra=2:EndIf
EndIf
If choixtirbrute>0 And choixtirbrute=ordretirbrute; tir ennemi !!
choixtirbrute=0:Ftirbrute( (bruteC()\x+16)-8, (bruteC()\y+31)-8 )
EndIf
; ici, nous allons vérifier si un vaisseau bruteC touche le gentil vaisseau du joueur, hum:
If invuln=0
If bruteC()\x+16>Xgentil-1 And bruteC()\x+16<Xgentil+64; on teste à partir du milieu de bruteB, car faut pas être trop dur avec le joueur.
If bruteC()\y+16>Ygentil-1 And bruteC()\y+16<Ygentil+64
invuln=100:vie-1:transpboum=0:zoomY=0
EndIf
EndIf
EndIf
Next
EndProcedure
Procedure.l Affichagetirbrute() ; Affichage des clones tirs ennemis bruteA
Static tempotb.b
If pause=0:tempotb+1:EndIf ; placé ici afin que l'animation des tirs ennemis soit tous synchronisés.
If tempotb>8:tempotb=1:EndIf
ForEach tirb()
If pause=0:tirb()\y+4:EndIf
If tempotb<5:DisplayTransparentSprite( #tirbruteA1 , tirb()\x, tirb()\y):EndIf
If tempotb>4:DisplayTransparentSprite( #tirbruteA2 , tirb()\x, tirb()\y):EndIf
;zutA+1
; ici, nous allons vérifier si un tir ennemi touche le gentil vaisseau du joueur, hum:
If invuln=0
If tirb()\x>Xgentil-1 And tirb()\x<(Xgentil+64)-16
If tirb()\y>Ygentil-1 And tirb()\y<(Ygentil+64)-16
DeleteElement(tirb())
invuln=100:vie-1:transpboum=0:zoomY=0
EndIf
EndIf
EndIf
Next
ForEach tirb()
If tirb()\y>EcranY:DeleteElement(tirb()):EndIf
Next
EndProcedure
Procedure.l Affichagescorep()
ForEach scorep()
If pause=0
If scorep()\id<100:scorep()\y-1:EndIf ; brutes
If scorep()\id=100:scorep()\y+1:EndIf ; soucoupe
scorep()\clonetransp+4
If scorep()\clonetransp>240:DeleteElement(scorep()):Continue:EndIf
EndIf
If scorep()\id=10
DisplaySprite3D ( #pointA3D , scorep()\x, scorep()\y-2, 255-scorep()\clonetransp)
EndIf
If scorep()\id=20
DisplaySprite3D ( #pointB3D , scorep()\x, scorep()\y-2, 255-scorep()\clonetransp)
EndIf
If scorep()\id=30
DisplaySprite3D ( #pointC3D , scorep()\x, scorep()\y-2, 255-scorep()\clonetransp)
EndIf
If scorep()\id=100
DisplaySprite3D ( #pointD3D , scorep()\x, scorep()\y-2, 255-scorep()\clonetransp)
EndIf
Next
EndProcedure
Procedure.l Affichagebaoum()
ForEach baoum()
If pause=0
If baoum()\boutonA=0
If baoum()\id=1 And baoum()\zoom<32:baoum()\zoom+6 ; p1
If baoum()\zoom>31:baoum()\zoom=32:baoum()\boutonA=1:EndIf
EndIf
If baoum()\id=2 And baoum()\zoom<48:baoum()\zoom+6 ; p2
If baoum()\zoom>47:baoum()\zoom=48:baoum()\boutonA=1:EndIf
EndIf
If baoum()\id=3 And baoum()\zoom<64:baoum()\zoom+6 ; p3
If baoum()\zoom>63:baoum()\zoom=64:baoum()\boutonA=1:EndIf
EndIf
EndIf
If baoum()\boutonA=1
If baoum()\zoom>-32:baoum()\zoom-4
If baoum()\zoom<-31:baoum()\zoom=-32:baoum()\boutonA=2:EndIf
EndIf
If baoum()\clonetransp<200:baoum()\clonetransp+2:EndIf
EndIf
If baoum()\boutonA=2
DeleteElement(baoum()):Continue
EndIf
EndIf ; If pause=0
Sprite3DBlendingMode(5,10);2) ; claire
If baoum()\id=1
ZoomSprite3D(#boun3D, 32+baoum()\zoom, 32+baoum()\zoom)
DisplaySprite3D ( #boun3D , baoum()\x-(baoum()\zoom/2), baoum()\y-(baoum()\zoom/2), 255-baoum()\clonetransp)
EndIf
If baoum()\id=2
ZoomSprite3D(#boun3D, 48+baoum()\zoom, 48+baoum()\zoom)
DisplaySprite3D ( #boun3D , baoum()\x-(baoum()\zoom/2), baoum()\y-(baoum()\zoom/2), 255-baoum()\clonetransp)
EndIf
If baoum()\id=3
ZoomSprite3D(#boun3D, 64+baoum()\zoom, 64+baoum()\zoom)
DisplaySprite3D ( #boun3D , baoum()\x-(baoum()\zoom/2), baoum()\y-(baoum()\zoom/2), 255-baoum()\clonetransp)
EndIf
Sprite3DBlendingMode(5,6); de base
Next
EndProcedure
Procedure.l Affichagelifeup()
ForEach lifeup()
If pause=0
lifeup()\y-1
lifeup()\clonetransp+4
If lifeup()\clonetransp>240:DeleteElement(lifeup()):Continue:EndIf
EndIf
DisplaySprite3D ( #ilifeup3D , lifeup()\x, lifeup()\y-2, 255-lifeup()\clonetransp)
Next
EndProcedure