Publié : dim. 22/juin/2008 9:18
Très fun 

Oui.. Et je persist'rais ! Même sous la torture !Ah ! Tu m'avais pourtant bien prévenu que cela dépendais de la carte vidéo. Bien, alors, j'ai une geforce 7600GS qui a presque 2 ans. Qu'elle carte vidéo équipe ta machine( que j'imagine récente) ?
merciiiiAr-S a écrit :Très fun
tu l'as méchamment overclocké alors ! Mais qu'elle est donc ton secret ?Ouaf-Ouaf a écrit :C'est une "Mobil intel 965 Chipset Family"
merci, à ses mots mon coeur s'emplit de bonheurHuitbit a écrit :Wahou !![]()
Encore un produit fini avec des sprites dignes d'une superproduction commerciale ! A force tu vas recevoir des PM de nintendo, atari, ....![]()
![]()
Encore bravo !
Un beau testAr-S a écrit :J'ai fait un petit test avec un objet 3ds histoire de
ça le fait bien![]()
Code : Tout sélectionner
If shipdirection<3:shipdirection+1:EndIf
Code : Tout sélectionner
If shipdirection>-3:shipdirection-1:EndIf
Mon secret ? Je.. Tu as sans doutes raison.. Oui, je le lis dans tes yeux, tu m'as demasqué ! Il est temps d'avouer..tu l'as méchamment overclocké alors ! Mais qu'elle est donc ton secret ? Wink
ben, la puce vidéo que tu m'a citée( Mobil intel 965 Chipset Family) n'est vraiment pas un chipset fais pour jouer... d'où l'humour qui en découle sur l'overmachin de la charette susmentionnée. Voyez.Ouaf-Ouaf a écrit :En ce qui concerne l'overclocking, j'ai pas saisis l'astuce
Code : Tout sélectionner
;
; Les Listes Chaînées (Linked Lists), tout une aventure ! Et plus encore...
; vers l'infini 0.4 - video game - PC - mode fenêtre - 02/07/2008 - source PureBasic 4.20
; France - pseudo: beauregard
; touches flêchées gauche et droite, X( tir) P( pause) et F( image/seconde)
; problème à résoudre:
; RedimensionnementAuto qui redimensionne sans que le joueur redimensionne quoique ce soit: c'est pas net.
; prochains objectifs:
; -> rajouter des étoiles plus claire et plus rapide aussi.
; -> explosion des brutes.
; -> boss de fin de niveau( grande soucoupe protégé par de petits blocs destructibles + séquence de tirs orientés)...
; ... et ré-utiliser tête 3eme envahisseur( rajout d'une bouche rire).
; -> après avoir terminé 3 niveaux, affrontement avec ce boss( à chaque rencontre: +de blocs +de tirs orientés, vitesse...)
If InitMouse ()=0 Or InitKeyboard ()=0 Or InitSprite ()=0 Or InitSprite3D ()=0
MessageRequester ( "Error" , "Can't open DirectX 7 or later" , 0)
End
EndIf
If InitSound() = 0
MessageRequester("Error", "Can't open DirectX 7 Or Sound Card is not present", 0)
End
EndIf
Global manette.b
If InitJoystick():manette=1:EndIf ; pas encore utilisé dans cette version
UsePNGImageDecoder()
; °°°°°°°°°°°°°°°°°°°° fonte °°°°°°°°°°°°°°°°°°°°°°°°°°
LoadFont ( 0 , "Comic Sans Ms" ,16, #PB_Font_Bold)
LoadFont ( 1 , "Comic Sans Ms" ,30, #PB_Font_Bold)
LoadFont ( 2 , "Comic Sans Ms" ,10, #PB_Font_Bold)
Enumeration ; ici, on donne un petit nom à nos sprites( non, chuis pas un numéro !):
#shipb
#envahisseurs
#bouche ; pour le 3eme
#tirbruteA1
#tirbruteA2
#boum:#boum3D
#pointA:#pointA3D ; 10
#pointB:#pointB3D ; 20
#pointC:#pointC3D ; 30
#pointD:#pointD3D ; 100
#ilifeup:#ilifeup3D ; signifier au joueur qu'il gagne une vie supplémentaire.
#fleche:#fleche3D
#irepere
EndEnumeration
Structure objet ;- opération de clonage...
id.w ; id comme identité
x.w
y.w
tempoA.w
tempoB.w
boutonA.b
boutonB.b
boutonC.b
taille.w
clonetransp.w
speed.b
trembl.b
blindage.b ; utilisé pour bruteB et C
bobo.b
EndStructure
Global NewList bruteA.objet() ;
Global NewList bruteB.objet() ;
Global NewList bruteC.objet() ;
Global NewList soucoupe.objet()
Global NewList scorep.objet()
Global NewList lifeup.objet()
Global NewList tirb.objet() ; tir brute
Global NewList tirg.objet() ; tir gentil
Global NewList etoile.objet() ; fond
Declare Affichageintro()
Declare Affichagelevel()
Declare Fetoile(p,l,classe) ; ordre donné depuis Affichagelevel(). p comme partie de l'écran concerné( gauche et droite)
Declare Affichagetoile()
Declare Ftirgentil(x,y)
Declare Affichagetirgentil()
Declare Affichageship()
Declare Fsoucoupe(e); Si extra=1 alors la soucoupe surgit par la gauche. Si extra=2 alors la soucoupe surgit par la droite.
Declare Affichsoucoupe()
Declare FbruteA(x,y)
Declare AffichagebruteA()
Declare FbruteB(x,y)
Declare AffichagebruteB()
Declare FbruteC(x,y)
Declare AffichagebruteC()
Declare Ftirbrute(x,y)
Declare Affichagetirbrute()
Declare Affichagegameover()
Declare Fscorep(x,y,nbrepoint)
Declare Affichagescorep()
Declare Flifeup(x,y)
Declare Affichagelifeup()
Declare Fin()
If OpenWindow ( 0 , 0, 0, 800, 700, "vers l'infini 0.4" , #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar| #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_ScreenCentered | #PB_Window_ScreenCentered )
; OpenWindowedScreen ( WindowID ( 0 ), 0, 0, 800, 600, 1, 1, 1) ; un ecran graphique dans la fenêtre avec un RedimensionnementAuto qui
; m'embête, car pas net: l'image est flou dès le démarrage !
OpenWindowedScreen ( WindowID ( 0 ), 0, 0, 800, 700, 0, 1, 1) ; un ecran graphique dans la fenêtre toute simple.
SetWindowColor(0, RGB (0, 0, 0))
EndIf
KeyboardMode(#PB_Keyboard_International)
Global ecranhauteur.w=700
Global score.d, hiscore.d, newhiscore.b
OpenFile(0, "infinisauv.dat"); cette commande fabrique un fichier .dat au nom de infinisauv s'il n'existe pas.
; lecture fichier de sauvegarde :
If ReadFile(0,"infinisauv.dat")
hiscore=ReadDouble(0);ReadCharacter(0);ReadByte(0)
CloseFile(0)
EndIf
; ici, vous pouvez activer la ligne suivante, à la condition de placer le fichier Lazer.wav( se trouvant dans le dossier data de WaponezII)
; dans le dossier où vous avez enregistrer ce code( vers l'infini)
LoadSound(0, "Lazer.wav") ; un son un peu énervant hein ? Et oui, va falloir en trouver un autre...
; 5 images d'une taille de 64*64: vaisseau dirigé par le joueur.
; 16 images d'une taille de 64*48: vaisseau en démonstration pour l'intro.
; espace non encore utilisé d'une taille de 128*48.
; 1 image d'une taille de 128*48: titre du jeu
LoadSprite (#shipb,"infiniship.png")
LoadSprite (#envahisseurs,"envahisseurs.png");IncludeFile "infinidata.pbi"
If CreateSprite(#bouche, 8, 6, 0); un peu de pixel art: bouche ouverte pour le 3eme envahisseur.
StartDrawing(SpriteOutput(#bouche))
; 1ere ligne:
LineXY (0, 0, 7, 0, RGB (211,0,0))
; 2eme ligne:
Plot(0, 1, RGB (185, 227, 250)):Plot(7, 1, RGB (185, 227, 250))
LineXY (1, 1, 6, 1, RGB (255, 255, 255))
; 3eme et 4eme ligne:
LineXY (0, 2, 7, 2, RGB (176, 27, 37))
LineXY (0, 3, 7, 3, RGB (176, 27, 37))
; 5eme ligne:
Plot(0, 4, RGB (185, 227, 250)):Plot(1, 4, RGB (185, 227, 250))
Plot(6, 4, RGB (185, 227, 250)):Plot(7, 4, RGB (185, 227, 250))
LineXY (2, 4, 5, 4, RGB (255, 255, 255))
; 6eme ligne:
LineXY (0, 5, 7, 5, RGB (211,0,0))
StopDrawing ()
EndIf
CreateSprite ( #tirbruteA1 , 16, 16) ; tir ennemi: image 1
StartDrawing ( SpriteOutput ( #tirbruteA1 ))
BackColor ( RGB (0,0,0))
Ellipse(8, 8, 8, 8 ,RGB(225, 0, 0))
Ellipse(8, 8, 5, 5 ,RGB(255, 80, 80))
StopDrawing ()
CreateSprite ( #tirbruteA2 , 16, 16) ; tir ennemi: image 2
StartDrawing ( SpriteOutput ( #tirbruteA2 ))
BackColor ( RGB (0,0,0))
Ellipse(8, 8, 8-2, 8 ,RGB(225, 0, 0))
Ellipse(8, 8, 6-2, 6 ,RGB(255, 80, 80))
StopDrawing ()
; explosion:
CreateSprite ( #boum ,128, 128, #PB_Sprite_Texture )
StartDrawing ( SpriteOutput ( #boum ))
BackColor ( RGB (0,0,0))
Circle(64, 64, 64, RGB (255, 161, 0))
StopDrawing ()
CreateSprite3D ( #boum3D , #boum ) ; sprite3D( utilisant les capacitées de votre carte vidéo).
CreateSprite ( #irepere , 4, 4, 0 ) ; test utile pour le programmeur
StartDrawing ( SpriteOutput ( #irepere ))
BackColor ( RGB (0,0,0))
Box (0,0, 5, 5, RGB (190, 27, 27))
StopDrawing ()
CreateSprite ( #pointA ,32, 32, #PB_Sprite_Texture )
StartDrawing ( SpriteOutput ( #pointA ))
BackColor ( RGB (0,0,0)):DrawingMode(#PB_2DDrawing_Transparent)
FrontColor ( RGB (255, 153, 0)) :DrawText (0+1, 0+1, "+10")
FrontColor ( RGB (255, 224,0)) :DrawText (0, 0, "+10")
StopDrawing ()
CreateSprite3D ( #pointA3D , #pointA )
CreateSprite ( #pointB ,32,32, #PB_Sprite_Texture )
StartDrawing ( SpriteOutput ( #pointB ))
BackColor ( RGB (0,0,0)):DrawingMode(#PB_2DDrawing_Transparent)
FrontColor ( RGB (255, 153, 0)) :DrawText (0+1, 0+1, "+20")
FrontColor ( RGB (255, 224,0)) :DrawText (0, 0, "+20")
StopDrawing ()
CreateSprite3D ( #pointB3D , #pointB )
CreateSprite ( #pointC ,32,32, #PB_Sprite_Texture )
StartDrawing ( SpriteOutput ( #pointC ))
BackColor ( RGB (0,0,0)):DrawingMode(#PB_2DDrawing_Transparent)
FrontColor ( RGB (255, 153, 0)) :DrawText (0+1, 0+1, "+30")
FrontColor ( RGB (255, 224,0)) :DrawText (0, 0, "+30")
StopDrawing ()
CreateSprite3D ( #pointC3D , #pointC )
CreateSprite ( #pointD ,32,32, #PB_Sprite_Texture )
StartDrawing ( SpriteOutput ( #pointD ))
BackColor ( RGB (0,0,0)):DrawingMode(#PB_2DDrawing_Transparent)
FrontColor ( RGB (255, 153, 0)) :DrawText (0+1, 0+1, "+100")
FrontColor ( RGB (255, 224,0)) :DrawText (0, 0, "+100")
StopDrawing ()
CreateSprite3D ( #pointD3D , #pointD )
CreateSprite ( #ilifeup ,64,64, #PB_Sprite_Texture )
StartDrawing ( SpriteOutput ( #ilifeup ))
BackColor ( RGB (0,0,0)):DrawingMode(#PB_2DDrawing_Transparent)
FrontColor ( RGB (164,21,21)) :DrawText (0+1, 0+1, "LIFE+1")
FrontColor ( RGB (253,201,255)) :DrawText (0, 0, "LIFE+1")
StopDrawing ()
CreateSprite3D ( #ilifeup3D , #ilifeup )
Global etape.b=0, pause.b, directionX.b, bouton1.b, lacheboutonX.b, level.b=1
Global Xgentil.w=400-32, Ygentil.w=ecranhauteur-96, vie.b=3, invuln.w=99, bonusvie.b, zoomboum.w, transpboum.w, zoomY.w
Global recharge.b, zutA.w
Global tousensemble.b, ordretirbrute.w, choixtirbrute.w, nbreis.b
Global speedbrut.b=1, nbrdetruit.w
Global dirbruteA.b ; direction des bruteA
Global dirbruteB.b ; direction des bruteB
Global dirbruteC.b ; direction des bruteC
Global extra.b,nombrextra.b, topdepartextra.b
nextlevel.b
MouseLocate(400, 300)
; ******************************************************************************************************
Repeat ; Boucle principale
; ******************************************************************************************************
Event= WindowEvent ()
;Event= WaitWindowEvent (100)
Start3D(); on place cette commande dès le début de la boucle principale.
ExamineKeyboard ()
; °°°°°°°°°°°°°°°°°°°°°°
;- Commandes: °°°°°°°°°°°°
If manette=1:ExamineJoystick():EndIf
; °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
If pause=0:ReleaseMouse(0); on récupère la souris pour le jeu
ExamineMouse()
EndIf
If pause>0:ReleaseMouse(1):EndIf; on libère la souris
If manette=0
If KeyboardPushed ( #PB_Key_P ) And pause=0:pause=1:EndIf
If KeyboardPushed ( #PB_Key_P )=0 And pause=1:pause=2:EndIf
If KeyboardPushed ( #PB_Key_P ) And pause=2:pause=3:EndIf
If KeyboardPushed ( #PB_Key_P )=0 And pause=3:pause=0:EndIf
EndIf
If manette=1
If JoystickButton(8) And pause=0:pause=1:EndIf
If JoystickButton(8)=0 And pause=1:pause=2:EndIf
If JoystickButton(8) And pause=2:pause=3:EndIf
If JoystickButton(8)=0 And pause=3:pause=0:EndIf
EndIf
; °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
directionX=0:bouton1=0
If manette=0
If KeyboardPushed ( #PB_Key_Right ):directionX=1:EndIf ; droite.
If KeyboardPushed ( #PB_Key_Left ):directionX=-1:EndIf ; gauche.
If KeyboardPushed ( #PB_Key_X ):bouton1=1:EndIf ; bouton action
EndIf
If manette=1
If JoystickAxisX()=1:directionX=1:EndIf ; droite.
If JoystickAxisX()=-1:directionX=-1:EndIf ; gauche.
If JoystickButton(1):bouton1=1:EndIf ; bouton action
EndIf
; °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
;- étapes: °°°°°°°°°°°°
If etape=0; *******
Affichageintro()
EndIf
If etape=1; *******
Affichagelevel(); dans cette procédure -> fabrication des étoiles et des brutes
EndIf
If etape=10; *******
;- fond étoilé
Affichagetoile()
Affichsoucoupe()
If extra=1 Or extra=2:Fsoucoupe(extra):extra=10:EndIf; ordre de Fabrication clone soucoupe volante
AffichagebruteA() ; ordre d'affichage des clones bruteA.
AffichagebruteB() ; ordre d'affichage des clones bruteB.
AffichagebruteC() ; ordre d'affichage des clones bruteC.
ordretirbrute=0
Affichagetirbrute() ; ordre d'affichage des clones tirs brute.
Affichageship(); vaisseau du joueur
Affichagescorep()
Affichagelifeup()
;- changement de niveau, explication:
; pour le 1er niveau, il y a 16 brutesA à détruire.
; pour le 2eme niveau, il y a 8 brutesA et 8 brutesB à détruire.
; pour le 3eme niveau, il y a 16 brutesA et 8 brutesB à détruire.
; 4 niveau-> Boss( non effectif)
; pour le 5eme niveau, il y a 16 brutesB à détruire.
; pour le 6eme niveau, il y a 8 brutesB et 8 brutesC à détruire.
; pour le 7eme niveau, il y a 8 brutesA et 8 brutesB et 8 brutesC à détruire.
; 8 niveau-> Boss( non effectif)
; ... et provisoire la même chose pour tout les niveau suivant.
If nextlevel=0
If (nbrdetruit>16-1 And level=1) Or (nbrdetruit>16-1 And level=2) Or (nbrdetruit>24-1 And level=3):nextlevel=1:EndIf
EndIf
If nextlevel=0
If level=4:nextlevel=1:EndIf; niveau du 1er Boss( non effectif, alors on zappe).
If level=8:nextlevel=1:EndIf; niveau du 2eme Boss( non effectif, alors on zappe).
If level=10:nextlevel=1:level=0:EndIf; niveau 10 terminus, alors on zappe et on propose de recommencer.
EndIf
If nextlevel=0
If (nbrdetruit>16-1 And level=5) Or (nbrdetruit>16-1 And level=6) Or (nbrdetruit>24-1 And level=7):nextlevel=1:EndIf
EndIf
If nextlevel=0
If (nbrdetruit>40-1 And level=9):nextlevel=1:EndIf; Or (nbrdetruit>16-1 And level=6) Or (nbrdetruit>24-1 And level=7):nextlevel=1:EndIf
EndIf
If nextlevel=1:nextlevel=0
If extra=0:nombrextra=0:topdepartextra=0
level+1:etape=1
dirbruteA=0:dirbruteB=0:dirbruteC=0; dans une même direction, pour un même but ;)
speedbrut=1:nbrdetruit=0
EndIf
EndIf
;- joueur gagne une vie
If (score>490 And bonusvie=0) Or (score>990 And bonusvie=1) Or (score>1490 And bonusvie=2) Or (score>1990 And bonusvie=3)
bonusvie+1:vie+1:Flifeup(Xgentil+11, Ygentil) ; joueur gagne une vie tout les 500 pts
EndIf
If (score>2490 And bonusvie=4) Or (score>2990 And bonusvie=5) Or (score>3490 And bonusvie=6) Or (score>3990 And bonusvie=7)
bonusvie+1:vie+1:Flifeup(Xgentil+11, Ygentil) ; joueur gagne une vie tout les 500 pts
EndIf
If (score>4500-10 And bonusvie=8) Or (score>5000-10 And bonusvie=9) Or (score>5500-10 And bonusvie=10) Or (score>6000-10 And bonusvie=11)
bonusvie+1:vie+1:Flifeup(Xgentil+11, Ygentil) ; joueur gagne une vie tout les 500 pts
EndIf
If (score>6500-10 And bonusvie=12) Or (score>7000-10 And bonusvie=13) Or (score>7500-10 And bonusvie=14) Or (score>8000-10 And bonusvie=15)
bonusvie+1:vie+1:Flifeup(Xgentil+11, Ygentil) ; joueur gagne une vie tout les 500 pts
EndIf
If (score>8500-10 And bonusvie=16) Or (score>9000-10 And bonusvie=17) Or (score>9500-10 And bonusvie=18) Or (score>10000-10 And bonusvie=19)
bonusvie+1:vie+1:Flifeup(Xgentil+11, Ygentil) ; joueur gagne une vie tout les 500 pts
EndIf
ClipSprite(#shipb, 0, 208, 64, 48):DisplayTransparentSprite( #shipb , 10, 10)
StartDrawing ( ScreenOutput ())
DrawingMode (1)
FrontColor ( RGB (255,255,255))
DrawingFont ( FontID (0))
score$= Str (score)
FrontColor ( RGB (154,154,154)) :DrawText (350+1, 5+1, "SCORE " +score$)
FrontColor ( RGB (234,234,234)) :DrawText (350, 5, "SCORE " +score$)
DrawingFont ( FontID (0))
hiscore$= Str (hiscore)
FrontColor ( RGB (255, 153, 0)) :DrawText (680+1, 5+1, "HI-SCORE ")
FrontColor ( RGB (255,224,0)) :DrawText (680, 5, "HI-SCORE ")
FrontColor ( RGB (255, 153, 0)) :DrawText (680+1,25+1, "" +hiscore$)
FrontColor ( RGB (255, 224, 0)) :DrawText (680,25, "" +hiscore$)
DrawingFont ( FontID (1))
vie$= Str (vie)
FrontColor ( RGB (164,21,21)) :DrawText (42+1, 4+1, " " +vie$)
FrontColor ( RGB (253,201,255)) :DrawText (42, 4, " " +vie$)
StopDrawing ()
; Si invuln=100, alors explosion 1.
; Si invuln=101, alors explosion 2.
If vie<1 And invuln<100:etape=20:EndIf
If etape=10 And tousensemble=1:tousensemble=0:topdepartextra=1
ForEach bruteA()
bruteA()\y+24
Next
ForEach bruteB()
bruteB()\y+24
Next
ForEach bruteC()
bruteC()\y+24
Next
EndIf
If etape=10 ; désigner la brute qui va tirer: il faut utiliser 2 variables globales: choixtirbrute et ordretirbrute
If pause=0:tempotirbrute+1:EndIf
If tempotirbrute>64:tempotirbrute=0:nbrdebrute=0
ForEach bruteA()
nbrdebrute+1
Next
ForEach bruteB()
nbrdebrute+1
Next
ForEach bruteC()
nbrdebrute+1
Next
choixtirbrute=Random(nbrdebrute); de 0 à 7...
choixtirbrute+1; ...et là +1, donc maintenant de 1 à nombre de brute présent à l'écran.
EndIf
EndIf
EndIf; If etape=10
If etape=20; *******
Affichagegameover()
EndIf
If KeyboardPushed ( #PB_Key_F ) And nbreis=0:nbreis+1:EndIf
If KeyboardPushed ( #PB_Key_F )=0 And nbreis=1:nbreis+1:EndIf
If KeyboardPushed ( #PB_Key_F ) And nbreis=2:nbreis+1:EndIf
If KeyboardPushed ( #PB_Key_F )=0 And nbreis=3:nbreis=0:EndIf
Gosub fps ; nombre d'image par seconde.
Stop3D(); on place cette commande à la fin de la boucle principale.
FlipBuffers(1)
ClearScreen(RGB(0,0,0))
; ******************************************************************************************************
If Event= #PB_Event_CloseWindow Or KeyboardPushed ( #PB_Key_Escape ):Fin():EndIf; si clique coin haut droit ou touche Esc, alors ferme fenêtre.
ForEver
fps:
If Val ( FormatDate ( "%ss" , Date ()))=sek
fps+1
Else
FPS$= Str (fps)
fps=0
EndIf
sek= Val ( FormatDate ( "%ss" , Date ()))
StartDrawing ( ScreenOutput ())
DrawingMode (1)
FrontColor ( RGB (255,255,255))
If nbreis=1 Or nbreis=2:DrawText (1,1, "FPS: " +FPS$)
vram=AvailableScreenMemory()
vram$= Str (vram)
FrontColor ( RGB (154,154,154)) :DrawText (1+1,80+1, "vram: " +vram$)
FrontColor ( RGB (234,234,234)) :DrawText (1,80, "vram: " +vram$)
zutA$= Str (zutA)
FrontColor ( RGB (154,154,154)) :DrawText (1+1,120+1, "zutA: " +zutA$)
FrontColor ( RGB (234,234,234)) :DrawText (1,120, "zutA: " +zutA$)
extra$= Str (extra)
FrontColor ( RGB (154,154,154)) :DrawText (1+1,140+1, "extra: " +extra$)
FrontColor ( RGB (234,234,234)) :DrawText (1,140, "extra: " +extra$)
EndIf
;zutA=0
StopDrawing ()
Return
IncludeFile "infiniaffichage.pbi"
Procedure.l Affichagelevel()
Static tempolevel.b
ForEach tirg() ; il faut supprimer tout les clones tirg.
DeleteElement(tirg())
Next
ForEach tirb() ; il faut supprimer tout les clones tirb.
DeleteElement(tirb())
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
StartDrawing ( ScreenOutput ())
DrawingMode (1)
DrawingFont ( FontID (1))
FrontColor ( RGB (255,255,255))
level$= Str (level)
FrontColor ( RGB (154,154,154)) :DrawText (276+1, 260+1, "NIVEAU " +level$)
FrontColor ( RGB (234,234,234)) :DrawText (276, 260, "NIVEAU " +level$)
StopDrawing ()
If level=5 Or level=10 Or level=15 Or level=20; après chaque boss, on nettoie l'espace, hum.
ForEach etoile()
DeleteElement(etoile())
Next
EndIf
If tempolevel<50 And pause=0:tempolevel+1
If tempolevel>49:tempolevel=0:etape=10
; 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
For t=1 To 10
Fetoile(0,1,0) ; installation des étoiles dans la partie gauche de l'écran.
Next
For t=1 To 10
Fetoile(1,1,0) ; installation des étoiles dans la partie droite de l'écran.
Next
;- ordre de fabrication brutes
; ordre de Fabrication des clones bruteA:
If level=1 Or level=2 Or level=3 Or level=7 Or level=9
For t=1 To 8
FbruteA(t,48*3) ; mis en en première ligne. Et ce n'est pas la plus confortable, voyez ;)
Next
EndIf
If level=1 Or level=3 Or level=9
For t=1 To 8
FbruteA(t,48*2)
Next
EndIf
If level=9
For t=1 To 8
FbruteA(t,48)
Next
EndIf
If level=9
For t=1 To 8
FbruteA(t,48*4) ; mis devant la première ligne.
Next
EndIf
If level=9
For t=1 To 8
FbruteA(t,48*5) ; mis devant ceux qui sont devant la première ligne. Heu... oui, on va arrêtez là ! :).
Next
EndIf
; ordre de Fabrication des clones bruteB:
If level=5 Or level=6
For t=1 To 8
FbruteB(t,48*3) ; mis en en première ligne.
Next
EndIf
If level=2 Or level=5 Or level=7
For t=1 To 8
FbruteB(t,48*2)
Next
EndIf
If level=3
For t=1 To 8
FbruteB(t,48) ; mis en en première ligne.
Next
EndIf
; ordre de Fabrication des clones bruteC:
If level=6
For t=1 To 8
FbruteC(t,48*2)
Next
EndIf
If level=7
For t=1 To 8
FbruteC(t,48)
Next
EndIf
EndIf
EndIf
EndProcedure
Procedure.l Fetoile(p,l,classe) ; Fabrication des etoiles
LastElement(etoile())
AddElement(etoile())
etoile()\id=p; étoile appartenant à la partie gauche( 0), ou droite( 1) de l'écran, afin d'éviter d'avoir une moitié de l'écran trop vide.
etoile()\taille=classe
If p=0:etoile()\x=Random(380):etoile()\x+20:EndIf; de 0 à 400
If p=1:etoile()\x=Random(400):etoile()\x+380:EndIf; de 400 à 800
If l=1:etoile()\y=Random(700):etoile()\y-100:EndIf; de 0 à 300 car fabriquer à partir de la procédure Affichagelevel()
If l=0:etoile()\y=-10:EndIf; -10 car fabriquer durant le jeu
EndProcedure
Procedure.l Ftirgentil(x,y) ; Fabrication des tirs du vaisseau du joueur
LastElement(tirg())
AddElement(tirg())
tirg()\x=x
tirg()\y=y
PlaySound(0, 0)
EndProcedure
Procedure.l Fsoucoupe(e)
LastElement(soucoupe())
AddElement(soucoupe())
soucoupe()\id=e
If soucoupe()\id=1:soucoupe()\x=-79:EndIf
If soucoupe()\id=2:soucoupe()\x=815:EndIf
;If nombrextra<3:nombrextra+1:EndIf; on augmente la vitesse de la soucoupe à chaque apparition( vitesse de départ maximale=3)
soucoupe()\speed=1;nombrextra ; je l'ai deconnecté car finalement, c'est peut être un peu injuste pour le joueur.
EndProcedure
Procedure.l FbruteA(x,y) ; Fabrication des clones bruteA
LastElement(bruteA())
AddElement(bruteA())
; taille 32 colonnes +32 pour la séparation entre les bruteA, voyez.
bruteA()\x=x*64
bruteA()\y=y
bruteA()\blindage=1
EndProcedure
Procedure.l FbruteB(x,y) ; Fabrication des clones bruteB
LastElement(bruteB())
AddElement(bruteB())
; taille 32 colonnes +32 pour la séparation entre les bruteB, voyez.
bruteB()\x=x*64
bruteB()\y=y
bruteB()\blindage=2
EndProcedure
Procedure.l FbruteC(x,y) ; Fabrication des clones bruteC
LastElement(bruteC())
AddElement(bruteC())
; taille 32 colonnes +32 pour la séparation entre les bruteC, voyez.
bruteC()\x=x*64
bruteC()\y=y
bruteC()\blindage=3
EndProcedure
Procedure.l Ftirbrute(x,y) ; Fabrication des tirs ennemis provenant des clones bruteA
LastElement(tirb())
AddElement(tirb())
tirb()\x=x
tirb()\y=y
EndProcedure
Procedure.l Fscorep(x,y,nbrepoint) ; Fabrication des clones score personnalisés
LastElement(scorep())
AddElement(scorep())
scorep()\x=x
scorep()\y=y
scorep()\id=nbrepoint
EndProcedure
Procedure.l Flifeup(x,y) ; Fabrication des clones life
LastElement(lifeup())
AddElement(lifeup())
lifeup()\x=x
lifeup()\y=y
EndProcedure
Procedure.l Fin()
If IsSprite(#shipb):FreeSprite(#shipb):EndIf
If IsSprite(#envahisseurs):FreeSprite(#envahisseurs):EndIf
If IsSprite(#bouche):FreeSprite(#bouche):EndIf
If IsSprite(#tirbruteA1):FreeSprite(#tirbruteA1):EndIf
If IsSprite(#tirbruteA2):FreeSprite(#tirbruteA2):EndIf
If IsSprite(#boum):FreeSprite(#boum):EndIf
If IsSprite3D(#boum3D):FreeSprite3D(#boum3D):EndIf
If IsSprite(#pointA):FreeSprite(#pointA):EndIf
If IsSprite3D(#pointA3D):FreeSprite3D(#pointA3D):EndIf
If IsSprite(#pointB):FreeSprite(#pointB):EndIf
If IsSprite3D(#pointB3D):FreeSprite3D(#pointB3D):EndIf
If IsSprite(#pointC):FreeSprite(#pointC):EndIf
If IsSprite3D(#pointC3D):FreeSprite3D(#pointC3D):EndIf
If IsSprite(#pointD):FreeSprite(#pointD):EndIf
If IsSprite3D(#pointD3D):FreeSprite3D(#pointD3D):EndIf
If IsSprite(#ilifeup):FreeSprite(#ilifeup):EndIf
If IsSprite3D(#ilifeup3D):FreeSprite3D(#ilifeup3D):EndIf
End ; et c'est toujours un peu triste...
EndProcedure
Code : Tout sélectionner
; Ce code, regroupant toutes les procédures d'affichages, doit être sauvegardé sous le nom de infiniaffichage en .pbi
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
; 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 (700+1, 8+1, "version 0.5.1")
FrontColor ( RGB (234,234,234)) :DrawText (700, 8, "version 0.5.1")
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 choixclasse.b
ForEach etoile()
;zutA+1 ; test: connaitre le nombre d'étoile
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 pause=0:etoile()\y+1:EndIf
If etoile()\y>ecranhauteur And etoile()\boutonA=0:etoile()\boutonA=1
If etoile()\id=0
choixclasse=Random(18)
If choixclasse<13:Fetoile(0,0,0):EndIf ; étoile lointaine...
If choixclasse>12 And choixclasse<19:Fetoile(0,0,1):EndIf ; étoile rouge
EndIf
If etoile()\id=1
choixclasse=Random(18)
If choixclasse<13:Fetoile(1,0,0):EndIf ; étoile lointaine...
If choixclasse>12 And choixclasse<19:Fetoile(1,0,1):EndIf ; étoile rouge
EndIf
EndIf
If etoile()\y>650 And etoile()\boutonA=1:DeleteElement(etoile()):EndIf
Next
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=ecranhauteur-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<800-64:Xgentil+6; va à 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 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>(800-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>ecranhauteur-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>(800-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>ecranhauteur-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>(800-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>ecranhauteur-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>ecranhauteur: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
Code : Tout sélectionner
envahisseurs
Code : Tout sélectionner
infiniship
Merci Ouaf-OuafOuaf-Ouaf a écrit :Loooooooul trop ranma le boss. Hum je doit vraiment être nul j'me bute même pas une ligne d ennemis
J'vais essayer de persister un peu pour me tapper le boss ^^.
[ Apres un deuxieme essaisn j'me suis fait ken au lvl 3 ]
L'idée dechire taouuuut
Il meritrait d'etre un peu plus travaillé.
Pour la varieté entre les niveaux, j'avais bcp aimé ce jeu :
http://www.kidsdomain.com/down/mac/spacejunkie.html
Les aliens ont des chemins differents à tout les lvls.
Je trouve le rythme general un peu mou. La cadence pour envoyer des missiles, le deplacement des enemis.
il faut que tu répare cette injustice !( t'as pas une vieille manette playstation qui traine quelque part dans un tiroir ?)Ouaf-Ouaf a écrit :La souris ça s'rait plus cool pour controler (j'ai pas de manette)
Nop, j'vais quand même prospecter parmis les gens qui sont penchés console, y a ptet moyen qu'on m'en legue une ^^.il faut que tu répare cette injustice !( t'as pas une vieille manette playstation qui traine quelque part dans un tiroir ?)
Effectivement, j'avais ecris le gros du post la veille sans avoir eu le "courage" de tester cette nouvelle version. Je pensais qu'il servait dans un niveau special.Le berger n'est pas vraiment un boss, faut le voir plutôt comme un bonus( comme le pompon qu'il fallait attraper étant petit dans les fêtes foraines de notre enfance).
Pour la planète, il faudrait la faire défiler un peu plus rapidement que les étoilesOuaf-Ouaf a écrit :Un truc qui pourrait etre marrant à tester :
chopper des photos de l'espace sur google, (une planète par ex) les rendres plus graphiques en renforcants les contrastes, en mettant un contour, pour etre plus dans l'esprit de tes ETs par exemple, et les faires defiler avec une taille et vitesse variable :p
Plus dur, la même avec des nebuleuses.
Le prog assemble des couches de differentes photos, pour creer un sprite aleatoire.
Avec un data des niveaux d'gris, t'peux même colorer le sprite avec une palette choisie :p
Ca peut etre kiffant. Sur mon prog la generation d'un sprite assez grand (486*600 je crois) avec des dizaines de couches se fait super rapidement,
un truc similaire en thread pour creer des elements defilants dans l'fond devrait pas poser de problèmes.
J'sais pas ce que t'en penses mais perso j'aimerais bien essayer un jour.
++
Code : Tout sélectionner
etoile()\y+1
Code : Tout sélectionner
Global NewList planete.objet()
Code : Tout sélectionner
Declare Fplanete(p,l,classe) ; ordre donné depuis Affichagelevel()
Declare Affichageplanete()
Code : Tout sélectionner
For t=1 To 10
Fetoile(0,1,0) ; installation des étoiles dans la partie gauche de l'écran.
Next
For t=1 To 10
Fetoile(1,1,0) ; installation des étoiles dans la partie droite de l'écran.
Next
Fplanete(Random(1),1,0); ici Ouaf-Ouaf
Code : Tout sélectionner
Procedure.l Fplanete(p,l,classe) ; Fabrication de la planete
LastElement(planete())
AddElement(planete())
planete()\id=p; éplanete appartenant à la partie gauche( 0), ou droite( 1) de l'écran.
planete()\taille=classe
If p=0:planete()\x=Random(380):planete()\x+20:EndIf; de 0 à 400
If p=1:planete()\x=Random(400):planete()\x+380:EndIf; de 400 à 800
If l=1:planete()\y=Random(700):planete()\y-512:EndIf; de 0 à 300 car fabriquer à partir de la procédure Affichagelevel()
If l=0:planete()\y=-256:EndIf; -10 car fabriquer durant le jeu
EndProcedure
Code : Tout sélectionner
Procedure.l Affichageplanete()
Static choixclasse.b
ForEach planete()
;zutA+1 ; test: connaitre le nombre d'étoile
If planete()\taille=0:ClipSprite(#iplanet, 0, 0, 256, 256):DisplayTransparentSprite( #iplanet , etoile()\x, etoile()\y):EndIf
If planete()\taille=1:ClipSprite(#iplanet, 0, 256, 256, 256):DisplayTransparentSprite( #iplanet , etoile()\x, etoile()\y):EndIf
If pause=0:planete()\y+2:EndIf; ici, Ouaf-Ouaf, çà va 2 fois plus vite !
If planete()\y>ecranhauteur And planete()\boutonA=0:planete()\boutonA=1
If etoile()\id=0
choixclasse=Random(18)
Fplanete(Random(1),0,0); le 3ème chiffre concerne la classe( 0= 1ere planète ; 1= 2eme planète, ect....)
EndIf
If planete()\y>ecranhauteur And planete()\boutonA=1:DeleteElement(planete()):EndIf
Next
EndProcedure
Code : Tout sélectionner
If etape=10; *******
;- fond étoilé
Affichagetoile()
Affichageplanete(); ici, Ouaf-Ouaf
Affichsoucoupe()
Code : Tout sélectionner
;
; Les Listes Chaînées (Linked Lists), tout une aventure ! Et plus encore...
; vers l'infini 0.5.1 - video game - PC - mode fenêtre - 17/03/2009 - source PureBasic 4.30
; France - pseudo: beauregard
; touches flêchées gauche et droite, X( tir) et F( image/seconde)
; problème à résoudre:
; RedimensionnementAuto qui redimensionne sans que le joueur redimensionne quoique ce soit: c'est pas net.
; prochains objectifs:
; -> rajouter des étoiles plus claire et plus rapide aussi.
; -> boss de fin de niveau( grande soucoupe protégé par de petits blocs destructibles + séquence de tirs orientés)...
; ... et ré-utiliser tête 3eme envahisseur( rajout d'une bouche rire).
; -> après avoir terminé 3 niveaux, affrontement avec ce boss( à chaque rencontre: +de blocs +de tirs orientés, vitesse...)
If InitMouse ()=0 Or InitKeyboard ()=0 Or InitSprite ()=0 Or InitSprite3D ()=0
MessageRequester ( "Error" , "Can't open DirectX 7 or later" , 0)
End
EndIf
If InitSound() = 0
MessageRequester("Error", "Can't open DirectX 7 Or Sound Card is not present", 0)
End
EndIf
;Buffer$=Space(128)
;mciSendString_("open 5.MID type sequencer alias mid",Buffer$,128,0)
;mciSendString_("play mid",0,0,0)
Global manette.b
If InitJoystick():manette=1:joyInfoEx.JOYINFOEX:joyInfoEx\dwSize = SizeOf(JOYINFOEX):EndIf
UsePNGImageDecoder()
; °°°°°°°°°°°°°°°°°°°° fonte °°°°°°°°°°°°°°°°°°°°°°°°°°
LoadFont ( 0 , "Comic Sans Ms" ,16, #PB_Font_Bold)
LoadFont ( 1 , "Comic Sans Ms" ,30, #PB_Font_Bold)
LoadFont ( 2 , "Comic Sans Ms" ,10, #PB_Font_Bold)
Enumeration ; ici, on donne un petit nom à nos sprites( non, chuis pas un numéro !):
#shipb
#envahisseurs
#bouche ; pour le 3eme
#tirbruteA1
#tirbruteA2
#boum:#boum3D
#boun:#boun3D
#pointA:#pointA3D ; 10
#pointB:#pointB3D ; 20
#pointC:#pointC3D ; 30
#pointD:#pointD3D ; 100
#ilifeup:#ilifeup3D ; signifier au joueur qu'il gagne une vie supplémentaire.
#fleche:#fleche3D
#irepere
EndEnumeration
Structure objet ;- opération de clonage...
id.w ; id comme identité
x.w
y.w
tempoA.w
tempoB.w
boutonA.b
boutonB.b
boutonC.b
taille.w
clonetransp.w
speed.b
trembl.b
blindage.b ; utilisé pour bruteB et C
bobo.b
zoom.w
EndStructure
Global NewList bruteA.objet() ;
Global NewList bruteB.objet() ;
Global NewList bruteC.objet() ;
Global NewList soucoupe.objet()
Global NewList scorep.objet()
Global NewList lifeup.objet()
Global NewList baoum.objet()
Global NewList tirb.objet() ; tir brute
Global NewList tirg.objet() ; tir gentil
Global NewList etoile.objet() ; fond
Declare Affichageintro()
Declare Affichagelevel()
Declare Fetoile(p,l,classe) ; ordre donné depuis Affichagelevel(). p comme partie de l'écran concerné( gauche et droite)
Declare Affichagetoile()
Declare Ftirgentil(x,y)
Declare Affichagetirgentil()
Declare Affichageship()
Declare Fsoucoupe(e); Si extra=1 alors la soucoupe surgit par la gauche. Si extra=2 alors la soucoupe surgit par la droite.
Declare Affichsoucoupe()
Declare FbruteA(x,y)
Declare AffichagebruteA()
Declare FbruteB(x,y)
Declare AffichagebruteB()
Declare FbruteC(x,y)
Declare AffichagebruteC()
Declare Ftirbrute(x,y)
Declare Affichagetirbrute()
Declare Affichagegameover()
Declare Fscorep(x,y,nbrepoint)
Declare Affichagescorep()
Declare Fbaoum(x,y,p)
Declare Affichagebaoum()
Declare Flifeup(x,y)
Declare Affichagelifeup()
Declare cdirection(joyCaps,joyInfoEx)
Declare Fin()
If OpenWindow ( 0 , 0, 0, 800, 700, "vers l'infini 0.5.1" , #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar| #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_ScreenCentered | #PB_Window_ScreenCentered )
OpenWindowedScreen ( WindowID ( 0 ), 0, 0, 800, 700, 0, 1, 1) ; un ecran graphique dans la fenêtre toute simple.
SetWindowColor(0, RGB (0, 0, 0))
EndIf
KeyboardMode(#PB_Keyboard_International)
;Sprite3DQuality(1)
Global ecranhauteur.w=700
Global score.d, hiscore.d, newhiscore.b
OpenFile(0, "infinisauv.dat"); cette commande fabrique un fichier .dat au nom de infinisauv s'il n'existe pas.
; lecture fichier de sauvegarde :
If ReadFile(0,"infinisauv.dat")
hiscore=ReadDouble(0);ReadCharacter(0);ReadByte(0)
CloseFile(0)
EndIf
; ici, vous pouvez activer la ligne suivante, à la condition de placer le fichier Lazer.wav( se trouvant dans le dossier data de WaponezII)
; dans le dossier où vous avez enregistrer ce code( vers l'infini)
; LoadSound(0, "Lazer.wav") ; un son un peu énervant hein ? Et oui, va falloir en trouver un autre...
; 5 images d'une taille de 64*64: vaisseau dirigé par le joueur.
; 16 images d'une taille de 64*48: vaisseau en démonstration pour l'intro.
; espace non encore utilisé d'une taille de 128*48.
; 1 image d'une taille de 128*48: titre du jeu
LoadSprite (#shipb,"infiniship.png")
LoadSprite (#envahisseurs,"envahisseurs.png")
;IncludeFile "infinidata.pbi"
If CreateSprite(#bouche, 8, 6, 0); un peu de pixel art: bouche ouverte pour le 3eme envahisseur.
StartDrawing(SpriteOutput(#bouche))
; 1ere ligne:
LineXY (0, 0, 7, 0, RGB (211,0,0))
; 2eme ligne:
Plot(0, 1, RGB (185, 227, 250)):Plot(7, 1, RGB (185, 227, 250))
LineXY (1, 1, 6, 1, RGB (255, 255, 255))
; 3eme et 4eme ligne:
LineXY (0, 2, 7, 2, RGB (176, 27, 37))
LineXY (0, 3, 7, 3, RGB (176, 27, 37))
; 5eme ligne:
Plot(0, 4, RGB (185, 227, 250)):Plot(1, 4, RGB (185, 227, 250))
Plot(6, 4, RGB (185, 227, 250)):Plot(7, 4, RGB (185, 227, 250))
LineXY (2, 4, 5, 4, RGB (255, 255, 255))
; 6eme ligne:
LineXY (0, 5, 7, 5, RGB (211,0,0))
StopDrawing ()
EndIf
CreateSprite ( #tirbruteA1 , 16, 16) ; tir ennemi: image 1
StartDrawing ( SpriteOutput ( #tirbruteA1 ))
BackColor ( RGB (0,0,0))
Ellipse(8, 8, 8, 8 ,RGB(225, 0, 0))
Ellipse(8, 8, 5, 5 ,RGB(255, 80, 80))
StopDrawing ()
CreateSprite ( #tirbruteA2 , 16, 16) ; tir ennemi: image 2
StartDrawing ( SpriteOutput ( #tirbruteA2 ))
BackColor ( RGB (0,0,0))
Ellipse(8, 8, 8-2, 8 ,RGB(225, 0, 0))
Ellipse(8, 8, 6-2, 6 ,RGB(255, 80, 80))
StopDrawing ()
;- explosion:
CreateSprite ( #boum ,128, 128, #PB_Sprite_Texture ) ; vaisseau amis
StartDrawing ( SpriteOutput ( #boum ))
BackColor ( RGB (0,0,0))
Circle(64, 64, 64, RGB (255, 161, 0)):Circle(64, 64, 56, RGB (255, 190, 55))
StopDrawing ()
CreateSprite3D ( #boum3D , #boum ) ; sprite3D( utilisant les capacitées de votre carte vidéo).
CreateSprite ( #boun ,128, 128, #PB_Sprite_Texture ) ; brute
StartDrawing ( SpriteOutput ( #boun ))
BackColor ( RGB (0,0,0))
Circle(64, 64, 64, RGB (255, 160, 135)):Circle(64, 64, 56, RGB (255, 190, 175))
StopDrawing ()
CreateSprite3D ( #boun3D , #boun ) ; sprite3D( utilisant les capacitées de votre carte vidéo).
CreateSprite ( #irepere , 4, 4, 0 ) ; test utile pour le programmeur
StartDrawing ( SpriteOutput ( #irepere ))
BackColor ( RGB (0,0,0))
Box (0,0, 5, 5, RGB (190, 27, 27))
StopDrawing ()
CreateSprite ( #pointA ,32, 32, #PB_Sprite_Texture )
StartDrawing ( SpriteOutput ( #pointA ))
BackColor ( RGB (0,0,0)):DrawingMode(#PB_2DDrawing_Transparent)
FrontColor ( RGB (255, 153, 0)) :DrawText (0+1, 0+1, "+10")
FrontColor ( RGB (255, 224,0)) :DrawText (0, 0, "+10")
StopDrawing ()
CreateSprite3D ( #pointA3D , #pointA )
CreateSprite ( #pointB ,32,32, #PB_Sprite_Texture )
StartDrawing ( SpriteOutput ( #pointB ))
BackColor ( RGB (0,0,0)):DrawingMode(#PB_2DDrawing_Transparent)
FrontColor ( RGB (255, 153, 0)) :DrawText (0+1, 0+1, "+20")
FrontColor ( RGB (255, 224,0)) :DrawText (0, 0, "+20")
StopDrawing ()
CreateSprite3D ( #pointB3D , #pointB )
CreateSprite ( #pointC ,32,32, #PB_Sprite_Texture )
StartDrawing ( SpriteOutput ( #pointC ))
BackColor ( RGB (0,0,0)):DrawingMode(#PB_2DDrawing_Transparent)
FrontColor ( RGB (255, 153, 0)) :DrawText (0+1, 0+1, "+30")
FrontColor ( RGB (255, 224,0)) :DrawText (0, 0, "+30")
StopDrawing ()
CreateSprite3D ( #pointC3D , #pointC )
CreateSprite ( #pointD ,32,32, #PB_Sprite_Texture )
StartDrawing ( SpriteOutput ( #pointD ))
BackColor ( RGB (0,0,0)):DrawingMode(#PB_2DDrawing_Transparent)
FrontColor ( RGB (255, 153, 0)) :DrawText (0+1, 0+1, "+50")
FrontColor ( RGB (255, 224,0)) :DrawText (0, 0, "+50")
StopDrawing ()
CreateSprite3D ( #pointD3D , #pointD )
CreateSprite ( #ilifeup ,64,64, #PB_Sprite_Texture )
StartDrawing ( SpriteOutput ( #ilifeup ))
BackColor ( RGB (0,0,0)):DrawingMode(#PB_2DDrawing_Transparent)
FrontColor ( RGB (164,21,21)) :DrawText (0+1, 0+1, "LIFE+1")
FrontColor ( RGB (253,201,255)) :DrawText (0, 0, "LIFE+1")
StopDrawing ()
CreateSprite3D ( #ilifeup3D , #ilifeup )
If CreateImage(0,24,16) ; image protection( lors de l'appui de la touche PrintScreen)
StartDrawing(ImageOutput(0))
Box(0,0, 8,16,RGB(0, 0, 255))
Box(8,0, 8,16,RGB(255,255,255))
Box(16,0, 8,16,RGB(255, 0, 0))
StopDrawing()
EndIf
Global etape.b=0, pause.b, directionX.b, bouton1.b, lacheboutonX.b, level.b=1 ;- level 7: trio gagnant
Global Xgentil.w=400-32, Ygentil.w=ecranhauteur-96, vie.b=3, invuln.w=99, bonusvie.b, zoomboum.w, transpboum.w, zoomY.w
Global recharge.b, zutA.w
Global tousensemble.b, ordretirbrute.w, choixtirbrute.w, nbreis.b
Global speedbrut.b=1, nbrdetruit.w
Global dirbruteA.b ; direction des bruteA
Global dirbruteB.b ; direction des bruteB
Global dirbruteC.b ; direction des bruteC
Global extra.b,nombrextra.b, topdepartextra.b
nextlevel.b
MouseLocate(400, 300)
; ******************************************************************************************************
Repeat ;- Boucle principale
; ******************************************************************************************************
Event= WindowEvent ()
;-
;- protection
; SetClipboardImage(0) ; Met une copie de l'#Image dans le presse-papier.
;Event= WaitWindowEvent (100)
Start3D(); on place cette commande dès le début de la boucle principale.
ExamineKeyboard ()
; °°°°°°°°°°°°°°°°°°°°°°
;- Commandes: °°°°°°°°°°°°
If manette=1:ExamineJoystick(0):EndIf
; °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
If pause=0:ReleaseMouse(0); on récupère la souris pour le jeu
ExamineMouse()
EndIf
If pause>0:ReleaseMouse(1):EndIf; on libère la souris
If manette=0
If KeyboardPushed ( #PB_Key_P ) And pause=0:pause=1:EndIf
If KeyboardPushed ( #PB_Key_P )=0 And pause=1:pause=2:EndIf
If KeyboardPushed ( #PB_Key_P ) And pause=2:pause=3:EndIf
If KeyboardPushed ( #PB_Key_P )=0 And pause=3:pause=0:EndIf
EndIf
If manette=1
If JoystickButton(0,8) And pause=0:pause=1:EndIf
If JoystickButton(0,8)=0 And pause=1:pause=2:EndIf
If JoystickButton(0,8) And pause=2:pause=3:EndIf
If JoystickButton(0,8)=0 And pause=3:pause=0:EndIf
EndIf
; °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
directionX=0:bouton1=0
If manette=0
If KeyboardPushed ( #PB_Key_Right ):directionX=1:EndIf ; droite.
If KeyboardPushed ( #PB_Key_Left ):directionX=-1:EndIf ; gauche.
If KeyboardPushed ( #PB_Key_X ):bouton1=1:EndIf ; bouton action
EndIf
If manette=1
If joyGetPosEx_(#JOYSTICKID1,joyInfoEx) = #JOYERR_NOERROR
cdirection(joyCaps,joyInfoEx)
EndIf
If JoystickAxisX(0)=1:directionX=1:EndIf ; droite.
If JoystickAxisX(0)=-1:directionX=-1:EndIf ; gauche.
If JoystickButton(0,1):bouton1=1:EndIf ; bouton action
EndIf
; °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
;- étapes: °°°°°°°°°°°°
If etape=0; *******
Affichageintro()
EndIf
If etape=1; *******
Affichagelevel(); dans cette procédure -> fabrication des étoiles et des brutes
EndIf
If etape=10; *******
;- fond étoilé
Affichagetoile()
Affichsoucoupe()
If extra=1 Or extra=2:Fsoucoupe(extra):extra=10:EndIf; ordre de Fabrication clone soucoupe volante
AffichagebruteA() ; ordre d'affichage des clones bruteA.
AffichagebruteB() ; ordre d'affichage des clones bruteB.
AffichagebruteC() ; ordre d'affichage des clones bruteC.
ordretirbrute=0
Affichagetirbrute() ; ordre d'affichage des clones tirs brute.
Affichageship(); vaisseau du joueur
Affichagebaoum():Affichagescorep()
Affichagelifeup()
;- changement de niveau, explication:
; pour le 1er niveau, il y a 16 brutesA à détruire.
; pour le 2eme niveau, il y a 8 brutesA et 8 brutesB à détruire.
; pour le 3eme niveau, il y a 16 brutesA et 8 brutesB à détruire.
; 4 niveau-> Boss( non effectif)
; pour le 5eme niveau, il y a 16 brutesB à détruire.
; pour le 6eme niveau, il y a 8 brutesB et 8 brutesC à détruire.
; pour le 7eme niveau, il y a 8 brutesA et 8 brutesB et 8 brutesC à détruire.
; 8 niveau-> Boss( non effectif)
; ... et provisoire la même chose pour tout les niveau suivant.
If nextlevel=0
If (nbrdetruit>16-1 And level=1) Or (nbrdetruit>16-1 And level=2) Or (nbrdetruit>24-1 And level=3):nextlevel=1:EndIf
EndIf
If nextlevel=0
If level=4:nextlevel=1:EndIf; niveau du 1er Boss( non effectif, alors on zappe).
If level=8:nextlevel=1:EndIf; niveau du 2eme Boss( non effectif, alors on zappe).
If level=10:nextlevel=1:level=0:EndIf; niveau 10 terminus, alors on zappe et on propose de recommencer.
EndIf
If nextlevel=0
If (nbrdetruit>16-1 And level=5) Or (nbrdetruit>16-1 And level=6) Or (nbrdetruit>24-1 And level=7):nextlevel=1:EndIf
EndIf
If nextlevel=0
If (nbrdetruit>40-1 And level=9):nextlevel=1:EndIf; Or (nbrdetruit>16-1 And level=6) Or (nbrdetruit>24-1 And level=7):nextlevel=1:EndIf
EndIf
If nextlevel=1:nextlevel=0
If extra=0:nombrextra=0:topdepartextra=0
level+1:etape=1
dirbruteA=0:dirbruteB=0:dirbruteC=0; dans une même direction, pour un même but ;)
speedbrut=1:nbrdetruit=0
EndIf
EndIf
;- joueur gagne une vie
If (score>490 And bonusvie=0) Or (score>990 And bonusvie=1) Or (score>1490 And bonusvie=2) Or (score>1990 And bonusvie=3)
bonusvie+1:vie+1:Flifeup(Xgentil+11, Ygentil) ; joueur gagne une vie tout les 500 pts
EndIf
If (score>2490 And bonusvie=4) Or (score>2990 And bonusvie=5) Or (score>3490 And bonusvie=6) Or (score>3990 And bonusvie=7)
bonusvie+1:vie+1:Flifeup(Xgentil+11, Ygentil) ; joueur gagne une vie tout les 500 pts
EndIf
If (score>4500-10 And bonusvie=8) Or (score>5000-10 And bonusvie=9) Or (score>5500-10 And bonusvie=10) Or (score>6000-10 And bonusvie=11)
bonusvie+1:vie+1:Flifeup(Xgentil+11, Ygentil) ; joueur gagne une vie tout les 500 pts
EndIf
If (score>6500-10 And bonusvie=12) Or (score>7000-10 And bonusvie=13) Or (score>7500-10 And bonusvie=14) Or (score>8000-10 And bonusvie=15)
bonusvie+1:vie+1:Flifeup(Xgentil+11, Ygentil) ; joueur gagne une vie tout les 500 pts
EndIf
If (score>8500-10 And bonusvie=16) Or (score>9000-10 And bonusvie=17) Or (score>9500-10 And bonusvie=18) Or (score>10000-10 And bonusvie=19)
bonusvie+1:vie+1:Flifeup(Xgentil+11, Ygentil) ; joueur gagne une vie tout les 500 pts
EndIf
ClipSprite(#shipb, 0, 208, 64, 48):DisplayTransparentSprite( #shipb , 10, 10)
StartDrawing ( ScreenOutput ())
DrawingMode (1)
FrontColor ( RGB (255,255,255))
DrawingFont ( FontID (0))
score$= Str (score)
FrontColor ( RGB (154,154,154)) :DrawText (350+1, 5+1, "SCORE " +score$)
FrontColor ( RGB (234,234,234)) :DrawText (350, 5, "SCORE " +score$)
DrawingFont ( FontID (0))
hiscore$= Str (hiscore)
FrontColor ( RGB (255, 153, 0)) :DrawText (680+1, 5+1, "HI-SCORE ")
FrontColor ( RGB (255,224,0)) :DrawText (680, 5, "HI-SCORE ")
FrontColor ( RGB (255, 153, 0)) :DrawText (680+1,25+1, "" +hiscore$)
FrontColor ( RGB (255, 224, 0)) :DrawText (680,25, "" +hiscore$)
DrawingFont ( FontID (1))
vie$= Str (vie)
FrontColor ( RGB (164,21,21)) :DrawText (42+1, 4+1, " " +vie$)
FrontColor ( RGB (253,201,255)) :DrawText (42, 4, " " +vie$)
StopDrawing ()
; Si invuln=100, alors explosion 1.
; Si invuln=101, alors explosion 2.
If vie<1 And invuln<100:etape=20:EndIf
If etape=10 And tousensemble=1:tousensemble=0:topdepartextra=1
ForEach bruteA()
bruteA()\y+24
Next
ForEach bruteB()
bruteB()\y+24
Next
ForEach bruteC()
bruteC()\y+24
Next
EndIf
If etape=10 ; désigner la brute qui va tirer: il faut utiliser 2 variables globales: choixtirbrute et ordretirbrute
If pause=0:tempotirbrute+1:EndIf
If tempotirbrute>64:tempotirbrute=0:nbrdebrute=0
ForEach bruteA()
nbrdebrute+1
Next
ForEach bruteB()
nbrdebrute+1
Next
ForEach bruteC()
nbrdebrute+1
Next
choixtirbrute=Random(nbrdebrute); de 0 à 7...
choixtirbrute+1; ...et là +1, donc maintenant de 1 à nombre de brute présent à l'écran.
EndIf
EndIf
EndIf; If etape=10
If etape=20; *******
Affichagegameover()
EndIf
If KeyboardPushed ( #PB_Key_F ) And nbreis=0:nbreis+1:EndIf
If KeyboardPushed ( #PB_Key_F )=0 And nbreis=1:nbreis+1:EndIf
If KeyboardPushed ( #PB_Key_F ) And nbreis=2:nbreis+1:EndIf
If KeyboardPushed ( #PB_Key_F )=0 And nbreis=3:nbreis=0:EndIf
If nbreis=1 Or nbreis=2:Gosub fps:EndIf ; nombre d'image par seconde.
Stop3D(); on place cette commande à la fin de la boucle principale.
FlipBuffers(1)
Delay(12) ;- là
ClearScreen(RGB(0,0,0))
; ******************************************************************************************************
If Event= #PB_Event_CloseWindow Or KeyboardPushed ( #PB_Key_Escape ):Fin():EndIf; si clique coin haut droit ou touche Esc, alors ferme fenêtre.
ForEver
fps:
If Val ( FormatDate ( "%ss" , Date ()))=sek
fps+1
Else
FPS$= Str (fps)
fps=0
EndIf
sek= Val ( FormatDate ( "%ss" , Date ()))
StartDrawing ( ScreenOutput ())
DrawingMode (1)
FrontColor ( RGB (255,255,255))
DrawText (1,1, "FPS: " +FPS$)
vram=AvailableScreenMemory()
vram$= Str (vram)
FrontColor ( RGB (154,154,154)) :DrawText (1+1,80+1, "vram: " +vram$)
FrontColor ( RGB (234,234,234)) :DrawText (1,80, "vram: " +vram$)
;zutA+1
zutA$= Str (zutA)
FrontColor ( RGB (154,154,154)) :DrawText (1+1,120+1, "zutA: " +zutA$)
FrontColor ( RGB (234,234,234)) :DrawText (1,120, "zutA: " +zutA$)
extra$= Str (extra)
FrontColor ( RGB (154,154,154)) :DrawText (1+1,140+1, "extra: " +extra$)
FrontColor ( RGB (234,234,234)) :DrawText (1,140, "extra: " +extra$)
;zutA=0
StopDrawing ()
Return
IncludeFile "infiniaffichage.pbi"
Procedure.l Affichagelevel()
Static tempolevel.b
ForEach tirg() ; il faut supprimer tout les clones tirg.
DeleteElement(tirg())
Next
ForEach tirb() ; il faut supprimer tout les clones tirb.
DeleteElement(tirb())
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
StartDrawing ( ScreenOutput ())
DrawingMode (1)
DrawingFont ( FontID (1))
FrontColor ( RGB (255,255,255))
level$= Str (level)
FrontColor ( RGB (154,154,154)) :DrawText (276+1, 260+1, "NIVEAU " +level$)
FrontColor ( RGB (234,234,234)) :DrawText (276, 260, "NIVEAU " +level$)
StopDrawing ()
If level=5 Or level=10 Or level=15 Or level=20; après chaque boss, on nettoie l'espace, hum.
ForEach etoile()
DeleteElement(etoile())
Next
EndIf
If tempolevel<50 And pause=0:tempolevel+1
If tempolevel>49:tempolevel=0:etape=10
; 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
For t=1 To 10
Fetoile(0,1,0) ; installation des étoiles dans la partie gauche de l'écran.
Next
For t=1 To 10
Fetoile(1,1,0) ; installation des étoiles dans la partie droite de l'écran.
Next
;- ordre de fabrication brutes
; ordre de Fabrication des clones bruteA:
If level=1 Or level=2 Or level=3 Or level=7 Or level=9
For t=1 To 8
FbruteA(t,48*3) ; mis en en première ligne. Et ce n'est pas la plus confortable, voyez ;)
Next
EndIf
If level=1 Or level=3 Or level=9
For t=1 To 8
FbruteA(t,48*2)
Next
EndIf
If level=9
For t=1 To 8
FbruteA(t,48)
Next
EndIf
If level=9
For t=1 To 8
FbruteA(t,48*4) ; mis devant la première ligne.
Next
EndIf
If level=9
For t=1 To 8
FbruteA(t,48*5) ; mis devant ceux qui sont devant la première ligne. Heu... oui, on va arrêtez là ! :).
Next
EndIf
; ordre de Fabrication des clones bruteB:
If level=5 Or level=6
For t=1 To 8
FbruteB(t,48*3) ; mis en en première ligne.
Next
EndIf
If level=2 Or level=5 Or level=7
For t=1 To 8
FbruteB(t,48*2)
Next
EndIf
If level=3
For t=1 To 8
FbruteB(t,48) ; mis en en première ligne.
Next
EndIf
; ordre de Fabrication des clones bruteC:
If level=6
For t=1 To 8
FbruteC(t,48*2)
Next
EndIf
If level=7
For t=1 To 8
FbruteC(t,48)
Next
EndIf
EndIf
EndIf
EndProcedure
Procedure.l Fetoile(p,l,classe) ; Fabrication des etoiles
LastElement(etoile())
AddElement(etoile())
etoile()\id=p; étoile appartenant à la partie gauche( 0), ou droite( 1) de l'écran, afin d'éviter d'avoir une moitié de l'écran trop vide.
etoile()\taille=classe
If p=0:etoile()\x=Random(380):etoile()\x+20:EndIf; de 0 à 400
If p=1:etoile()\x=Random(400):etoile()\x+380:EndIf; de 400 à 800
If l=1:etoile()\y=Random(700):etoile()\y-100:EndIf; de 0 à 300 car fabriquer à partir de la procédure Affichagelevel()
If l=0:etoile()\y=-10:EndIf; -10 car fabriquer durant le jeu
EndProcedure
Procedure.l Ftirgentil(x,y) ; Fabrication des tirs du vaisseau du joueur
LastElement(tirg())
AddElement(tirg())
tirg()\x=x
tirg()\y=y
;PlaySound(0, 0)
EndProcedure
Procedure.l Fsoucoupe(e)
LastElement(soucoupe())
AddElement(soucoupe())
soucoupe()\id=e
If soucoupe()\id=1:soucoupe()\x=-79:EndIf
If soucoupe()\id=2:soucoupe()\x=815:EndIf
;If nombrextra<3:nombrextra+1:EndIf; on augmente la vitesse de la soucoupe à chaque apparition( vitesse de départ maximale=3)
soucoupe()\speed=1;nombrextra ; je l'ai deconnecté car finalement, c'est peut être un peu injuste pour le joueur.
EndProcedure
Procedure.l FbruteA(x,y) ; Fabrication des clones bruteA
LastElement(bruteA())
AddElement(bruteA())
; taille 32 colonnes +32 pour la séparation entre les bruteA, voyez.
bruteA()\x=x*64
bruteA()\y=y
bruteA()\blindage=1
EndProcedure
Procedure.l FbruteB(x,y) ; Fabrication des clones bruteB
LastElement(bruteB())
AddElement(bruteB())
; taille 32 colonnes +32 pour la séparation entre les bruteB, voyez.
bruteB()\x=x*64
bruteB()\y=y
bruteB()\blindage=2
EndProcedure
Procedure.l FbruteC(x,y) ; Fabrication des clones bruteC
LastElement(bruteC())
AddElement(bruteC())
; taille 32 colonnes +32 pour la séparation entre les bruteC, voyez.
bruteC()\x=x*64
bruteC()\y=y
bruteC()\blindage=3
EndProcedure
Procedure.l Ftirbrute(x,y) ; Fabrication des tirs ennemis provenant des clones bruteA
LastElement(tirb())
AddElement(tirb())
tirb()\x=x
tirb()\y=y
EndProcedure
Procedure.l Fscorep(x,y,nbrepoint) ; Fabrication des clones score personnalisés
LastElement(scorep())
AddElement(scorep())
scorep()\x=x
scorep()\y=y
scorep()\id=nbrepoint
EndProcedure
Procedure.l Fbaoum(x,y,p) ; Fabrication explosion brute
LastElement(baoum())
AddElement(baoum())
baoum()\x=x
baoum()\y=y
baoum()\id=p
EndProcedure
Procedure.l Flifeup(x,y) ; Fabrication des clones life
LastElement(lifeup())
AddElement(lifeup())
lifeup()\x=x
lifeup()\y=y
EndProcedure
Procedure.l cdirection(*caps.JOYCAPS, *info.JOYINFOEX) ; joypad: utilisation de la croix directionnelle.
If *info\dwPOV=0 Or *info\dwPOV=4500 Or *info\dwPOV=31500:directionY=-1:EndIf; haut
If *info\dwPOV=18000 Or *info\dwPOV=22500 Or *info\dwPOV=13500:directionY=1:EndIf; bas
If *info\dwPOV=9000 Or *info\dwPOV=4500 Or *info\dwPOV=13500:directionX=1:EndIf; droite
If *info\dwPOV=27000 Or *info\dwPOV=31500 Or *info\dwPOV=22500:directionX=-1:EndIf; gauche
EndProcedure
Procedure.l Fin()
;mciSendString_("CLOSE MIDI",0,0,0)
If IsSprite(#shipb):FreeSprite(#shipb):EndIf
If IsSprite(#envahisseurs):FreeSprite(#envahisseurs):EndIf
If IsSprite(#bouche):FreeSprite(#bouche):EndIf
If IsSprite(#tirbruteA1):FreeSprite(#tirbruteA1):EndIf
If IsSprite(#tirbruteA2):FreeSprite(#tirbruteA2):EndIf
If IsSprite(#boum):FreeSprite(#boum):EndIf
If IsSprite3D(#boum3D):FreeSprite3D(#boum3D):EndIf
If IsSprite(#boun):FreeSprite(#boun):EndIf
If IsSprite3D(#boun3D):FreeSprite3D(#boun3D):EndIf
If IsSprite(#pointA):FreeSprite(#pointA):EndIf
If IsSprite3D(#pointA3D):FreeSprite3D(#pointA3D):EndIf
If IsSprite(#pointB):FreeSprite(#pointB):EndIf
If IsSprite3D(#pointB3D):FreeSprite3D(#pointB3D):EndIf
If IsSprite(#pointC):FreeSprite(#pointC):EndIf
If IsSprite3D(#pointC3D):FreeSprite3D(#pointC3D):EndIf
If IsSprite(#pointD):FreeSprite(#pointD):EndIf
If IsSprite3D(#pointD3D):FreeSprite3D(#pointD3D):EndIf
If IsSprite(#ilifeup):FreeSprite(#ilifeup):EndIf
If IsSprite3D(#ilifeup3D):FreeSprite3D(#ilifeup3D):EndIf
End ; et c'est toujours un peu triste...
EndProcedure