Code : Tout sélectionner
;
; Les Listes Chaînées (Linked Lists), tout une aventure ! Et plus encore...
; vers l'infini 0.6.1 - video game - PC - mode fenêtre - 09/10/2009 - source PureBasic 4.40 beta 4
; France - pseudo: beauregard
; touches flêchées gauche et droite, X( tir) et F( image/seconde)
ExamineDesktops()
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()
;- Initialisation
Global FullScreen.b
;- choixxxxxxxxxxxxxxxxxxxxxxxxxx
Resultat = MessageRequester("vers l'infini","Full Screen ?",#PB_MessageRequester_YesNo)
If Resultat = 6
FullScreen=#True
Else
FullScreen=#False
EndIf
Global EcranX.w=768, EcranY.w=768
Global zutA.w, zutB.w, zutC.w, zutD.w
If Fullscreen = #True
; If OpenScreen (1024, EcranY, 32,"vers l'infini 0.6", FipMode| refreshrate,60)=0;, flipmode( #PB_Screen_WaitSynchronization)); flipmode(),refreshrate)=0
;If OpenScreen (1024, EcranY, 32,"vers l'infini 0.6", l,60)=0
If OpenScreen (1024, EcranY, 32,"vers l'infini 0.6", 1,60)=0
MessageRequester ( "Error" , "Can't open a 1024*768 - 32 bit screen !" , 0)
End
EndIf
Else
If OpenWindow(0, 0,0, EcranX, EcranY ,"vers l'infini 0.52", #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, EcranX, EcranY, 0, 1, 1, 1);,flipmode)
SetWindowColor(0, RGB (0, 0, 0))
EndIf
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)
#Jeu_Traitement_Seconde = 25
#Jeu_Avance = 1000 / #Jeu_Traitement_Seconde
; ******************************************************************************************************
Repeat ;- Boucle principale
; ******************************************************************************************************
If FullScreen = #False
Event= WindowEvent ()
EndIf
; Vitesse du jeux
Jeu_Temps_Actuel = ElapsedMilliseconds()
If Jeu_Temps_Actuel > Jeu_Temps_Memoire
Jeu_Temps_Memoire + #Jeu_Avance
Jeu_Avance = 1
Else
Jeu_Avance = 0
EndIf
If Jeu_Avance
;-
;- 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()
Delay(1)
Else
;Delay(16)
Delay(1) ;- là
EndIf
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.i 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.i 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.i 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.i 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.i 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.i 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.i 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.i Ftirbrute(x,y) ; Fabrication des tirs ennemis provenant des clones bruteA
LastElement(tirb())
AddElement(tirb())
tirb()\x=x
tirb()\y=y
EndProcedure
Procedure.i 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.i Fbaoum(x,y,p) ; Fabrication explosion brute
LastElement(baoum())
AddElement(baoum())
baoum()\x=x
baoum()\y=y
baoum()\id=p
EndProcedure
Procedure.i Flifeup(x,y) ; Fabrication des clones life
LastElement(lifeup())
AddElement(lifeup())
lifeup()\x=x
lifeup()\y=y
EndProcedure
Procedure.i 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.i 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