Code : Tout sélectionner
; ce programme a été realisé par Dobro
; en pure basic 3.93
; et codé grace a JAPBE version 2.5.3.2
; n'oubliez pas de mettre Midas11.dll dans le repertoire "\PureBasic\Compilers"
;- Message a Dobro
;{ ; Message de Dobro
; hello !
; je me suis amuser a programmer ce truc
; ce programme peut eventuellement servir d'exemple
; pour un debutant en programmation "Jeux 2D"
; il y a toutes les bases dedans
; animation de sprite , collision, utilisation des structures (simplifié)
; j'ai crée les sprites avec un soft de 3D celebre (3dsMax7 version de demo)
; les sons on ete piqué dans le dossier "media" de Dark Basic (ils sont libre en principe)
; Merci a Oliv pour sa version de text qui ondule fait en été 2004 (apres un petit chalenge entre nous !)
; pendant que beaucoups d'autres de la comunauté purebasic etaient en train de bronzer !! (grrrr)
;
; le but :
; des aliens debarquent du haut de l'ecran , et vous tirent dessus
; nous ont tire sur les aliens (apres tout ils ont commencé)
; reste a gerer un compteur de points avec sauvegarde du score (facile a faire)
; de temps en temps une boite (gellule dans le listing)
; descend du haut pour redonner de la vie
; attention on peut la detruire en tirant dessus
; c'est fait expres !! hé! hé!
;
; je veux pas que ce listing apparaisse
; sur l'espece de site , pseudo officiel "2Dev"
; par contre ce listing peut apparaitre partout ailleurs !! :-D
;
;
; et du programme qu'il genere
; ammeliorez le , changez le , eclatez vous !!
; j'ai toujours pas de connection internet digne de ce nom
; je passe de temps en temps sur le forum
; pour me tenir au courant
; j'ai une autre passion qui se met en route
; la "detection"
; si! si! vous savez ces petit appareils qui valent une fortune
; qui permettent de detecter les metaux precieux ou pas
; planqué dans le sol par nos ancetre !!
; vous avez du voir ces gens sur les plage en train de chgercher des bijoux
; ben ce loisir peut se pratiquer n'importe ou (ou presque)
; dans les bois , les pres
; "et on entend dans les champ........"
; comme quoi mem privé d'internet on peut vivre des moment agreable !!
; amitié a tous !! ....
;... Michel
; le module (musique) est de Bruno's Music Box 3
; n'oubliez pas de mettre Midas11.dll dans le repertoire "\PureBasic\Compilers"
; pour en profiter
; la routine d'ondulation de text est la creation d'un "QI 250" :Oliv !!!
;}
Declare TimerProc(hwnd.l, uMsg.l, idEvent.l, dwTime.l)
Declare Ondulation(Texte.s,r,v,b)
FontID = LoadFont(0, "Tahoma", 10, #PB_Font_HighQuality)
;- Initialisations
;{ ; INITs
UseJPEGImageDecoder()
Global vitt1, vitt2, vitt3,vittx_missile3,vitt3,x_joueur,y_joueur
;{;chargement des images pour les Sprites
id_vaisseau_joueur = LoadImage( 1, "vaisseau_joueur.bmp") ; vaisseau joueur
id_vaisseau_joueur_droit = LoadImage( 2, "vaisseau_joueur2_droite.bmp") ; vaisseau joueur
id_vaisseau_joueur_gauche= LoadImage( 3, "vaisseau_joueur2_gauche.bmp") ; vaisseau joueur
id_missile_base=LoadImage(4 , "missile_base1.bmp") ; missile_base
;id_missile_base2=LoadImage(5 , "missile_base2.bmp") ; missile_base
id_sprite_ennemi1=LoadImage(6 , "vaisseau_ennemi1.bmp") ; vaisseau ennemi1
id_sprite_ennemi2=LoadImage(7 , "vaisseau_ennemi2.bmp") ; vaisseau ennemi2
id_sprite_ennemi3=LoadImage(8, "vaisseau_ennemi3.bmp") ; vaisseau ennemi3
id_missile_ennemi1=LoadImage(9, "missile_ennemi1.bmp") ; missile ennemi1
id_missile_ennemi2=LoadImage(10, "missile_ennemi2.bmp") ; missile ennemi2
id_missile_ennemi3=LoadImage(11, "missile_ennemi3.bmp") ; missile ennemi3
;}
;{ charge l'explosion
Dim id_explosion(50)
For t=12 To 44
id_explosion(t)=LoadImage(t, "explosion"+Str(t-12)+".bmp")
Next t
;}
;{charge gellule_vie
id_gellule_vie=LoadImage(45, "gellule_vie.bmp") ;
;}
;{; initialisation des variables et constantes
#dobro=1
#Police=1
nbr=0
nbspritefond=500
sprite_vaiseau_fond=nbspritefond+1 ; 501
sprite_joueur_g=nbspritefond+2 ; 502
sprite_joueur_d=nbspritefond+3 ;503
sprite_joueur=nbspritefond+4 ;504
missile_base2=nbspritefond+6 ;506
base_ennemi1=nbspritefond+10 ; de 510
fin_ennemi1=base_ennemi1+10 ; a 520
base_ennemi2=nbspritefond+30 ; de 530
fin_ennemi2=base_ennemi2+10 ; a 540
base_ennemi3=nbspritefond+50 ; de 550
fin_ennemi3=base_ennemi3+10 ; a 560
base_missile_ennemi1=nbspritefond+70 ; de 570
fin_missile_ennemi1=base_missile_ennemi1+10 ; a 580
base_missile_ennemi2=nbspritefond+90 ; de 590
fin_missile_ennemi2=base_missile_ennemi2+10 ; a 600
base_missile_ennemi3=nbspritefond+110 ; de 610
fin_missile_ennemi3=base_missile_ennemi3+10 ; a 620
base_explosion=nbspritefond+130 ; de 630
fin_explosion=base_explosion+32 ; a 662
sprite_gellule_vie=nbspritefond+165 ; 665
missile_base=nbspritefond+170 ;670
fin_missile_base=missile_base+50 ;720
; OLIV
; Variables
#pi=3.14159265
#HauteurSin = 10 ; Coef qui joue sur la hauteur de la sinusoide
#LargeurSin = 20 ; Coef qui joue sur la largeur de la sinusoide
#VitesseAngle = 2 * #pi / 50 ; vitesse de modification de l'angle de départ du texte
#Vitesse = 25 ; Temps du Delay() qui ralentit/augmente l'animation.
Global Angle.f, FontID
;}
;{; les STRUCTURES
Structure ennemi_1
x.w
y.w
vie.w
EndStructure
Structure ennemi_2
x.w
y.w
vie.w
EndStructure
Structure ennemi_3
x.w
y.w
vie.w
EndStructure
Structure missile_ennemi_1
x.w
y.w
vie.w
vittx.w
vitty.w
EndStructure
Structure missile_ennemi_2
x.w
y.w
vie.w
vittx.w
vitty.w
EndStructure
Structure missile_ennemi_3
x.w
y.w
vie.w
vittx.w
vitty.w
EndStructure
Structure joueur
x.w
y.w
vie.w
EndStructure
Structure missile_joueur
x.w
y.w
vie.w
EndStructure
Structure fond
x.w
y.w
vittx.w
vitty.w
EndStructure
Structure explose
x.w
y.w
vie.w
EndStructure
Structure gellule_vie
x.w
y.w
vie.w
EndStructure
;}
;{; Les TABLEAUX
; ; Fond
Dim fond.fond(1024)
; joueur
Dim joueur.joueur(1)
Dim missile_joueur.missile_joueur(50)
Dim explosion_j(50)
Dim x_explosion(50)
Dim y_explosion(50)
; missile ennemi
Dim missile_ennemi1.missile_ennemi_1(10)
Dim missile_ennemi2.missile_ennemi_2(10)
Dim missile_ennemi3.missile_ennemi_3(10)
; ennemi1
Dim ennemi1.ennemi_1(10)
; ennemi2
Dim ennemi2.ennemi_2(10)
; ennemi3
Dim ennemi3.ennemi_3(10)
Dim explosion.explose(10)
Dim gellule_vie.gellule_vie(1)
; ; chemin precalculé 1
; Dim chemin1(10000)
;}
;{ initialisation Fenetre et clavier et joystick
InitKeyboard() :; j'espere qu'il y a un clavier au moins !!
Resultat = InitJoystick()
Resultat = InitSound()
If InitModule() = 0
MessageRequester("Error", "MIDAS11.dll pas present !") : End
EndIf
; ***********************************
Resultat = InitSprite()
FontID = LoadFont(#Police, "arial", 18, #PB_Font_Bold )
EcranX = GetSystemMetrics_(#SM_CXSCREEN)-100:;=largeur de l'ecran
EcranY = GetSystemMetrics_(#SM_CYSCREEN)-100:;=hauteur de l'ecran
WindowID = OpenWindow(1, 0, 0, EcranX, EcranY, #PB_Window_SystemMenu |#PB_Window_MinimizeGadget| #PB_Window_BorderLess |#PB_Window_ScreenCentered , "Space_i Programmé par Dobro en Purebasic 3.93")
WindowID = WindowID(1)
Result = OpenWindowedScreen(WindowID,0,0, EcranX, EcranY, 1, 0,0)
KeyboardMode(1)
;}
;{; Charge les sons
LoadSound(1, "explose.wav")
LoadSound(2, "joueur_mort.wav")
LoadSound(3, "reanime.wav")
LoadSound(4, "tir_ennemi_1.wav")
LoadSound(5, "tir_ennemi_2.wav")
LoadSound(6, "tir_ennemi_3.wav")
LoadSound(7, "tir_joueur.wav")
;}
;{; Charge la musique
LoadModule(0, "FREE_FRO.MOD")
;}
;{;GACHETTE_TIMER
;- GACHETTE_TIMER
SetTimer_(WindowID, 1, 20, @TimerProc()) ; envoie un evenement cadence de tir (vaisseau 1)
SetTimer_(WindowID, 2, 500, @TimerProc()) ; envoie un evenement toutes les 800 millisecondes (apparition ennemi)
SetTimer_(WindowID, 3, 50, @TimerProc()) ; envoie un evenement cadence de tir (vaisseau 2)
SetTimer_(WindowID, 4, 100, @TimerProc()) ; envoie un evenement cadence de tir (vaisseau 3)
SetTimer_(WindowID, 5, 30000, @TimerProc()) ; envoie un evenement pour apparition d'une gellule de vie
;}
;{ ************ precalcul des colonnes pour affichage des ennemis ********************
For uu=0 To 10
ennemi1(uu)\x=64+Random(EcranX-128)-64 ; test
ennemi1(uu)\y=0 ; test
ennemi2(uu)\x=64+Random(EcranX-128)-64 ; test
ennemi2(uu)\y=0 ; test
ennemi3(uu)\x=64+Random(EcranX-128) -64 ; test
ennemi3(uu)\y=0 ; test
gellule_vie(1)\x=64+Random(EcranX-128) -64
Next uu
;}; **********************************************************************************************
;- dessin des etoiles (fond)
;{ ; creation des etoiles (fond)
For sprite=1 To nbspritefond
CreateSprite(sprite, 2, 2,0)
StartDrawing( SpriteOutput(sprite) )
Box(0, 0, 2, 2,RGB(Random(255)-150,Random(255)-150,Random(255)-150))
StopDrawing()
fond(sprite)\x=Random(EcranX) : fond(sprite)\y=Random(EcranY)
Next sprite
;}
;{; creation du sprite joueur
CreateSprite(sprite_joueur, 64, 64,0)
StartDrawing( SpriteOutput(sprite_joueur) )
DrawImage(id_vaisseau_joueur, 0, 0 )
StopDrawing()
;}
;{; creation du sprite missile_base
For a=missile_base To fin_missile_base
CreateSprite(a, 16,32,0)
StartDrawing( SpriteOutput(a) )
DrawImage( id_missile_base, 0, 0 )
StopDrawing()
Next a
;}
;{; creation du sprite missile_base2
; CreateSprite(missile_base2, 16,16,0)
; StartDrawing( SpriteOutput(missile_base2) )
; DrawImage( id_missile_base2, 0, 0 )
; StopDrawing()
;}
;{; creation du sprite joueur droit
CreateSprite(sprite_joueur_d, 64, 64,0)
StartDrawing( SpriteOutput(sprite_joueur_d) )
DrawImage( id_vaisseau_joueur_droit , 0, 0 )
StopDrawing()
;}
;{; creation du sprite joueur gauche
CreateSprite(sprite_joueur_g, 64, 64,0)
StartDrawing( SpriteOutput(sprite_joueur_g) )
DrawImage( id_vaisseau_joueur_gauche , 0, 0 )
StopDrawing()
;}
;{; creation du sprite ennemi1
For t=base_ennemi1 To fin_ennemi1
CreateSprite(t, 64, 64,0)
StartDrawing( SpriteOutput(t) )
DrawImage(id_sprite_ennemi1, 0, 0 )
StopDrawing()
Next t
;}
;{; creation du sprite ennemi2
For t=base_ennemi2 To fin_ennemi2
CreateSprite(t, 64, 64,0)
StartDrawing( SpriteOutput(t) )
DrawImage(id_sprite_ennemi2, 0, 0 )
StopDrawing()
Next t
;}
;{; creation du sprite ennemi3
For t=base_ennemi3 To fin_ennemi3
CreateSprite(t, 64, 64,0)
StartDrawing( SpriteOutput(t) )
DrawImage(id_sprite_ennemi3, 0, 0 )
StopDrawing()
Next t
;}
;{; creation du sprite missile_ennemi1
For t1=base_missile_ennemi1 To fin_missile_ennemi1
CreateSprite(t1, 16, 32,0)
StartDrawing( SpriteOutput(t1) )
DrawImage(id_missile_ennemi1, 0, 0 )
StopDrawing()
Next t1
;}
;{; creation du sprite missile_ennemi2
For t2=base_missile_ennemi2 To fin_missile_ennemi2
CreateSprite(t2, 32, 32,0)
StartDrawing( SpriteOutput(t2) )
DrawImage(id_missile_ennemi2, 0, 0 )
StopDrawing()
Next t2
;}
;{; creation du sprite missile_ennemi3
For t3=base_missile_ennemi3 To fin_missile_ennemi3
CreateSprite(t3, 32, 32,0)
StartDrawing( SpriteOutput(t3) )
DrawImage(id_missile_ennemi3, 0, 0 )
StopDrawing()
Next t3
;}
;{; creation du sprite explosion
For im= base_explosion To fin_explosion
CreateSprite(im, 64, 64,0)
StartDrawing( SpriteOutput(im) )
att=im-618
DrawImage(id_explosion(att), 0, 0 )
StopDrawing()
Next im
;}
;{; creation du sprite gellule_vie
CreateSprite(sprite_gellule_vie, 64, 64,0)
StartDrawing( SpriteOutput(sprite_gellule_vie) )
DrawImage(id_gellule_vie, 0, 0 )
StopDrawing()
;}
;{; attribue 15 vies au joueur
joueur(1)\vie=15
joueur(1)\x=(EcranX/2)-64
joueur(1)\y=EcranY-64
;}
;}
PlayModule(0)
;-Boucle principale
;{ ;boucle_principale
Repeat
Event=WindowEvent()
Delay(2)
; l'ordre d'affichage des sprites determine leur hauteur !!
Gosub test_clavier
Gosub test_joystick
Gosub affiche_sprite_fond
Gosub tir_joueur
Gosub affiche_sprite_ennemis
Gosub affiche_sprite_joueur
Gosub collision
Gosub affiche_explosion
Gosub hazard
Gosub affiche_gellule_vie
If mort=1 And compteur<=200
SetTimer_(WindowID, 1, 100000, @TimerProc()) ; envoie un evenement cadence de tir (vaisseau 1)
SetTimer_(WindowID, 2, 100000, @TimerProc()) ; envoie un evenement (apparition ennemi)
SetTimer_(WindowID, 3, 100000, @TimerProc()) ; envoie un evenement cadence de tir (vaisseau 2)
SetTimer_(WindowID, 4, 100000, @TimerProc()) ; envoie un evenement cadence de tir (vaisseau 3)
SetTimer_(WindowID, 5, 100000, @TimerProc()) ; envoie un evenement pour apparition d'une gellule de vie
Ondulation("tu es mort c'est dommage non ???? ",255,255,255)
compteur=compteur+1
; ******** on remet les variable a 0 ********
explosion1=0: explosion2=0: explosion3=0: explosion5=0: explosion6=0: explosion7=0: explosion8=0: explosion9=0: explosion10=0
For eneo=0 To 10
ennemi1(eneo)\vie=0
ennemi2(eneo)\vie=0
ennemi3(eneo)\vie=0
Next eneo
; *********************************************
EndIf
If mort=1 And compteur>200
Ondulation("appuis sur escape pour recommencer ",255,255,0)
EndIf
FlipBuffers():; affiche l'ecran
ClearScreen(0, 0, 0) :;efface l'ecran
direction=0
Until Event=#PB_Event_CloseWindow
End
;}
;- sous program !! ***************************************
;{ ; ************************ sous prg *************************************************
;{; test_clavier:
test_clavier:
; remet les variable a zero avant observetion
; feu=0 ; la variable qui commande le tir
; ************************************************
ExamineKeyboard()
If mort=0 ; le joueur vit toujours ?
If KeyboardPushed( #PB_Key_Up ) ; press touche haut
; Debug "press touche haut"
joueur(1)\y=joueur(1)\y-16
If joueur(1)\y<0: joueur(1)\y=0:EndIf
EndIf
If KeyboardPushed( #PB_Key_Down ) ; press touche bas
; Debug " press touche bas"
joueur(1)\y= joueur(1)\y+16
If joueur(1)\y>EcranY-64: joueur(1)\y=EcranY-64:EndIf
EndIf
If KeyboardPushed( #PB_Key_Left ) ; press touche gauche
;Debug " press touche gauche"
joueur(1)\x= joueur(1)\x-16
If joueur(1)\x<0: joueur(1)\x=0:EndIf
direction=1
DisplayTransparentSprite(sprite_joueur_g, joueur(1)\x, joueur(1)\y)
EndIf
If KeyboardPushed( #PB_Key_Right ) ; press touche droit
;Debug " press touche droit"
joueur(1)\x=joueur(1)\x+16
If joueur(1)\x>EcranX-64: joueur(1)\x=EcranX-64:EndIf
direction=1
DisplayTransparentSprite(sprite_joueur_d, joueur(1)\x, joueur(1)\y)
EndIf
If KeyboardPushed( #PB_Key_Space ) ; press touche espace (feu)
;Debug " press touche espace"
missile_joueur(iip)\x= joueur(1)\x+24 ; recup la position X du joueur
missile_joueur(iip)\y= joueur(1)\y ; recup la position Y du joueur
missile_joueur(iip)\vie=1 ; active le missile joueur
compteur_tir=compteur_tir+1
If compteur_tir>5 ; ceci evite d'entendre trop souvent le son du tir du joueur
compteur_tir=0
PlaySound(7)
EndIf
iip=iip+1 ; augmente le compteur de missile joueur (0 a 50)
If iip>50 :iip=0:EndIf
EndIf
EndIf
If KeyboardReleased( #PB_Key_Escape ) And mort=1 ; press touche escape (reanime le joueur)
;Debug " press touche escape"
joueur(1)\x=(EcranX/2)-64 ; place sur l'ecran du joueur
joueur(1)\y=EcranY-64
joueur(1)\vie=15 ; active le joueur
mort=0
compteur=0
; relance les timers
SetTimer_(WindowID, 1, 20, @TimerProc()) ; envoie un evenement cadence de tir (vaisseau 1)
SetTimer_(WindowID, 2, 500, @TimerProc()) ; envoie un evenement toutes les 800 millisecondes (apparition ennemi)
SetTimer_(WindowID, 3, 50, @TimerProc()) ; envoie un evenement cadence de tir (vaisseau 2)
SetTimer_(WindowID, 4, 100, @TimerProc()) ; envoie un evenement cadence de tir (vaisseau 3)
SetTimer_(WindowID, 5, 30000, @TimerProc()) ; envoie un evenement pour apparition d'une gellule de vie
PlaySound(3)
EndIf
Return
;}
;{ ; test_joystick
test_joystick:
ExamineJoystick()
joyx=JoystickAxisX()
If mort=0
If joyx =-1 ; joystick vers la gauche
joueur(1)\x= joueur(1)\x-16
If joueur(1)\x<0: joueur(1)\x=0:EndIf
direction=1
DisplayTransparentSprite(sprite_joueur_g, joueur(1)\x, joueur(1)\y)
EndIf
If joyx =1 ; joystick vers la droite
joueur(1)\x= joueur(1)\x+16
If joueur(1)\x>EcranX-64: joueur(1)\x=EcranX-64:EndIf
direction=1
DisplayTransparentSprite(sprite_joueur_d, joueur(1)\x, joueur(1)\y)
EndIf
joyy=JoystickAxisY()
If joyy =-1 ; joystick vers la gauche
joueur(1)\y= joueur(1)\y-16
If joueur(1)\y<0: joueur(1)\y=0:EndIf
direction=1
DisplayTransparentSprite(sprite_joueur_g, joueur(1)\x, joueur(1)\y)
EndIf
If joyy =1 ; joystick vers la droite
joueur(1)\y= joueur(1)\y+16
If joueur(1)\y>EcranY-64: joueur(1)\y=EcranY-64:EndIf
direction=1
DisplayTransparentSprite(sprite_joueur_d, joueur(1)\x, joueur(1)\y)
EndIf
boutton=JoystickButton(1) ; on regarde le bouton 1 (sur 8 )
If boutton<>0
iip=iip+1
If iip>50 :iip=1:EndIf
missile_joueur(iip)\x=x_joueur+24 ; releve la position X du joueur
missile_joueur(iip)\y=y_joueur ; releve la position Y du joueur
missile_joueur(iip)\vie=1
EndIf
EndIf
Return
;}
;{ ; affiche_sprite_fond etoile:
affiche_sprite_fond:
For sprite=1 To nbspritefond-3 Step 3
DisplaySprite(sprite, fond(sprite)\x, fond(sprite)\y)
fond(sprite)\y= fond(sprite)\y+1
If fond(sprite)\y>=EcranY
fond(sprite)\y=1
EndIf
Next sprite
For sprite=2 To nbspritefond-3 Step 3
DisplaySprite(sprite, fond(sprite)\x, fond(sprite)\y)
fond(sprite)\y= fond(sprite)\y+2
If fond(sprite)\y>=EcranY
fond(sprite)\y=1
EndIf
Next sprite
For sprite=3 To nbspritefond-3 Step 3
DisplaySprite(sprite, fond(sprite)\x, fond(sprite)\y)
fond(sprite)\y= fond(sprite)\y+3
If fond(sprite)\y>=EcranY
fond(sprite)\y=1
EndIf
Next sprite
Return
;}
;{; affiche_sprite_joueur:
affiche_sprite_joueur:
If direction=0
If joueur(1)\vie>0
DisplayTransparentSprite(sprite_joueur, joueur(1)\x, joueur(1)\y)
EndIf
If joueur(1)\vie<=0
joueur(1)\y=EcranY+164 ; on met le joueur en dehors de l'ecran
mort=1 ; sert a desactiver le clavier et le joystic
EndIf
EndIf
Return
;}
;{; tir_joueur:
tir_joueur:
For tot=0 To iip
If missile_joueur(tot)\vie=1 ; si le missile est actif (il a ete tiré)
DisplaySprite(missile_base+tot, missile_joueur(tot)\x, missile_joueur(tot)\y) ; on l'affiche
pas=Random(1)*8 ; avec un ecartement variant
missile_joueur(tot)\y=missile_joueur(tot)\y-16 ; sinon il monte vers le haut (le tt decale l'affichage )
If missile_joueur(tot)\y<=0 ; arrive en haut de l'ecran
missile_joueur(tot)\y=EcranY+65 ; on le met hors de la vue (en bas)
missile_joueur(tot)\vie=0 ; on le desactive
EndIf
EndIf
Next tot
Return
;}
;{;affiche_sprite_ennemis:
affiche_sprite_ennemis:
vitt1=8 ; vitesse de descente du sprite ennemi 1
Gosub affiche_missile_ennemi1
For ttt1=0 To 10 Step 1
If ennemi1(ttt1)\vie=1
ennemi1(ttt1)\y=ennemi1(ttt1)\y+vitt1
DisplayTransparentSprite(ttt1+510, ennemi1(ttt1)\x, ennemi1(ttt1)\y)
If ennemi1(ttt1)\y> EcranY
ennemi1(ttt1)\vie=0
EndIf
EndIf
Next ttt1
vitt2=4 ; vitesse de descente du sprite ennemi 2
Gosub affiche_missile_ennemi2
For ttt2=0 To 10 Step 1
If ennemi2(ttt2)\vie=1
ennemi2(ttt2)\y=ennemi2(ttt2)\y+vitt2
DisplayTransparentSprite(ttt2+530, ennemi2(ttt2)\x, ennemi2(ttt2)\y)
If ennemi2(ttt2)\y> EcranY
ennemi2(ttt2)\vie=0
EndIf
EndIf
Next ttt2
vitt3=4 ; vitesse de descente du sprite ennemi 3
Gosub affiche_missile_ennemi3
For ttt3=0 To 10 Step 1
If ennemi3(ttt3)\vie=1
ennemi3(ttt3)\y=ennemi3(ttt3)\y+vitt3
DisplayTransparentSprite(ttt3+550, ennemi3(ttt3)\x, ennemi3(ttt3)\y)
If ennemi3(ttt3)\y> EcranY
ennemi3(ttt3)\vie=0
EndIf
EndIf
Next ttt3
Return
;}
;{; affiche_missile_ennemi1:
affiche_missile_ennemi1:
For tta=0 To iipa Step 1
If missile_ennemi1(tta)\vie=1
DisplaySprite(tta+570, missile_ennemi1(tta)\x, missile_ennemi1(tta)\y+8)
missile_ennemi1(tta)\y=missile_ennemi1(tta)\y+vitt1+16 ; sinon il descend vers le bas (vitesse de descente)
If missile_ennemi1(tta)\y>=EcranY ; arrive en bas de l'ecran
missile_ennemi1(tta)\y=EcranY+65 ; on le met hors de la vue (en bas)
missile_ennemi1(tta)\vie=0
EndIf
EndIf
Next tta
Return
;}
;{; affiche_missile_ennemi2:
affiche_missile_ennemi2:
For ttb=0 To iipb Step 1
If missile_ennemi2(ttb)\vie=1
DisplaySprite(ttb+590, missile_ennemi2(ttb)\x, missile_ennemi2(ttb)\y+13)
; ymiss_ennemi2(ttb)=ymiss_ennemi2(ttb)+vitt2+16 ; sinon il descend vers le bas (vitesse de descente)
; ***** cherche a toucher le joueur *****
missile_ennemi2(ttb)\x=missile_ennemi2(ttb)\x+missile_ennemi2(ttb)\vittx
missile_ennemi2(ttb)\y=missile_ennemi2(ttb)\y+missile_ennemi2(ttb)\vitty
; ************************
If missile_ennemi2(ttb)\y>=EcranY ; arrive en bas de l'ecran
missile_ennemi2(ttb)\y=EcranY+65 ; on le met hors de la vue (en haut)
missile_ennemi2(ttb)\vie=0
EndIf
EndIf
Next ttb
Return
;}
;{; affiche_missile_ennemi3:
affiche_missile_ennemi3:
For ttc=0 To iipc Step 1
If missile_ennemi3(ttc)\vie=1
DisplaySprite(ttc+610, missile_ennemi3(ttc)\x, missile_ennemi3(ttc)\y+13)
; ymiss_ennemi3(ttc)=ymiss_ennemi3(ttc)+vitt3+16 ; sinon il descend vers le bas (vitesse de descente)
; ***** cherche a toucher le joueur *****
missile_ennemi3(ttc)\x=missile_ennemi3(ttc)\x+missile_ennemi3(ttc)\vittx
missile_ennemi3(ttc)\y=missile_ennemi3(ttc)\y+missile_ennemi3(ttc)\vitty
; ************************
If missile_ennemi3(ttc)\y>=EcranY ; arrive en bas de l'ecran
missile_ennemi3(ttc)\y=EcranY+65 ; on le met hors de la vue (en haut)
missile_ennemi3(ttc)\vie=0
EndIf
EndIf
Next ttc
Return
;}
;{; affiche_explosion:
affiche_explosion:
If explosion1=1
DisplaySprite(base_explosion+ss1, x_explosion1, y_explosion1+13)
ss1=ss1+1 :If ss1=32:ss1=0:explosion1=0: EndIf
EndIf
If explosion2=1
DisplaySprite(base_explosion+ss2, x_explosion2, y_explosion2+13)
ss2=ss2+1 :If ss2=32:ss2=0:explosion2=0: EndIf
EndIf
If explosion3=1
DisplaySprite(base_explosion+ss3, x_explosion3,y_explosion3+13)
ss3=ss3+1 :If ss3=32:ss3=0:explosion3=0: EndIf
EndIf
If explosion4=1
DisplaySprite(base_explosion+ss4, x_explosion4,y_explosion4+13)
ss4=ss4+1 :If ss4=32:ss4=0:explosion4=0: EndIf
EndIf
If explosion5=1
DisplaySprite(base_explosion+ss5, x_explosion5,y_explosion5+13)
ss5=ss5+1 :If ss5=32:ss5=0:explosion5=0: EndIf
EndIf
If explosion6=1
DisplaySprite(base_explosion+ss6, x_explosion6,y_explosion6+13)
ss6=ss6+1 :If ss6=32:ss6=0:explosion6=0: EndIf
EndIf
If explosion7=1
DisplaySprite(base_explosion+ss7, x_explosion7,y_explosion7+13)
ss7=ss7+1 :If ss7=32:ss7=0:explosion7=0: EndIf
EndIf
For jjj=0 To 50 ; on examine les 50 missiles du joueur
If explosion_j(jjj)=1
DisplaySprite(base_explosion+ss8, x_explosion(jjj),y_explosion(jjj)+13)
ss8=ss8+1 :If ss8=32:ss8=0:explosion_j(jjj)=0: EndIf
EndIf
; If explosion9=1
; DisplaySprite(base_explosion+ss9, x_explosion9,y_explosion9+13)
; ss9=ss9+1 :If ss9=32:ss9=0:explosion9=0: EndIf
; EndIf
; If explosion10=1
; DisplaySprite(base_explosion+ss10, x_explosion10,y_explosion10+13)
; ss10=ss10+1 :If ss10=32:ss10=0:explosion10=0: EndIf
; EndIf
Next jjj
Return
;}
;{; lit_chemin:
lit_chemin:
; Resultat = OpenFile(1, "chemin.ini")
; While Eof(1)=0 :; tant que fin de fichier pas atteinte
; coord= ReadWord() :;lit la coordonee x
; chemin1(ind)= coord
; ind=ind+1
; Wend
Return
;}
;{; collision
collision:
For ddcol=0 To 10 ; il y a 10 missile par ennemi et aussi 10 ennemi par type (1 ou 2 ou 3)
; collision vaisseau joueur avec vaisseau ennemi1
If SpritePixelCollision(sprite_joueur, joueur(1)\x, joueur(1)\y, 510+ddcol, ennemi1(ddcol)\x, ennemi1(ddcol)\y) <>0 And ennemi1(ddcol)\y>0;touche le sprite joueur
explosion1=1 ; active l'explosion
x_explosion1=ennemi1(ddcol)\x ; recupere les coordonées de l'ennemi pour afficher l'explosion
y_explosion1=ennemi1(ddcol)\y ; au bon endroits
ennemi1(ddcol)\x=Random(2000) ; vire le sprite (ses coordonées)
ennemi1(ddcol)\y=-Random(2000) ; en dehors de l'ecran
ennemi1(ddcol)\vie=0 ; tue le sprite qui a touché le joueur
joueur(1)\vie=joueur(1)\vie-1 ;retire une vie au joueur
PlaySound(1)
EndIf
;
; collision vaisseau joueur avec vaisseau ennemi2
If SpritePixelCollision(sprite_joueur, joueur(1)\x, joueur(1)\y, ddcol+530, ennemi2(ddcol)\x, ennemi2(ddcol)\y)<>0 And ennemi2(ddcol)\y>0;touche le sprite joueur
explosion2=1 ; active l'explosion
x_explosion2=ennemi2(ddcol)\x ; recupere les coordonées de l'ennemi pour afficher l'explosion
y_explosion2=ennemi2(ddcol)\y ; au bon endroits
ennemi2(ddcol)\x=Random(2000) ; vire le sprite (ses coordonées)
ennemi2(ddcol)\y=-Random(2000) ; en dehors de l'ecran (pour plus qu'il le considere dans la collision) .. (And ennemi2(ddcol)\y>0)
ennemi2(ddcol)\vie=0 ; tue le sprite qui a touché le joueur
joueur(1)\vie=joueur(1)\vie-1 ;retire une vie au joueur
PlaySound(1)
EndIf
; collision vaisseau joueur avec vaisseau ennemi3
If SpritePixelCollision(sprite_joueur, joueur(1)\x, joueur(1)\y, ddcol+550, ennemi3(ddcol)\x, ennemi3(ddcol)\y)<>0 And ennemi3(ddcol)\y>0 ;touche le sprite joueur
explosion3=1 ; active l'explosion
x_explosion3=ennemi3(ddcol)\x ; recupere les coordonées de l'ennemi pour afficher l'explosion
y_explosion3=ennemi3(ddcol)\y ; au bon endroits
ennemi3(ddcol)\x=Random(2000) ; vire le sprite (ses coordonées)
ennemi3(ddcol)\y=-Random(2000) ; en dehors de l'ecran
ennemi3(ddcol)\vie=0 ; tue le sprite qui a touché le joueur
joueur(1)\vie=joueur(1)\vie-1 ;retire une vie au joueur
PlaySound(1)
EndIf
;collision vaisseau joueur avec gellulle vie
If SpritePixelCollision(sprite_joueur, joueur(1)\x, joueur(1)\y,sprite_gellule_vie, gellule_vie(1)\x, gellule_vie(1)\y)<>0 And gellule_vie(1)\y>0 ;touche le sprite joueur
gellule_vie(1)\vie=0
joueur(1)\vie=joueur(1)\vie+5 ;ajoute 5 vies au joueur
PlaySound(3)
EndIf
; collision vaisseau joueur avec missile_ennemi1
If SpritePixelCollision(sprite_joueur, joueur(1)\x, joueur(1)\y, ddcol+570, missile_ennemi1(ddcol)\x, missile_ennemi1(ddcol)\y)<>0 And missile_ennemi1(ddcol)\y>0 ;touche le sprite joueur
explosion5=1 ; active l'explosion
x_explosion5=joueur(1)\x ; recupere les coordonée pour afficher l'explosion
y_explosion5=joueur(1)\y ; au bon endroits
missile_ennemi1(ddcol)\x=0 ; envoi le missile en dehors de l'ecran (ses coordonées)
missile_ennemi1(ddcol)\y=-Random(2000)
joueur(1)\vie=joueur(1)\vie-1 ;retire une vie au joueur
PlaySound(1)
EndIf
; collision vaisseau joueur avec missile_ennemi2
If SpritePixelCollision(sprite_joueur, joueur(1)\x, joueur(1)\y, ddcol+590, missile_ennemi2(ddcol)\x, missile_ennemi2(ddcol)\y)<>0 And missile_ennemi2(ddcol)\y>0;touche le sprite joueur
explosion6=1 ; active l'explosion
x_explosion6=joueur(1)\x ; recupere les coordonée pour afficher l'explosion
y_explosion6=joueur(1)\y ; au bon endroits
missile_ennemi2(ddcol)\x=0 ; envoi le missile en dehors de l'ecran (ses coordonées)
missile_ennemi2(ddcol)\y=-Random(2000)
joueur(1)\vie=joueur(1)\vie-1 ;retire une vie au joueur
PlaySound(1)
EndIf
; collision vaisseau joueur avec missile_ennemi3
If SpritePixelCollision(sprite_joueur, joueur(1)\x, joueur(1)\y, ddcol+590, missile_ennemi3(ddcol)\x, missile_ennemi3(ddcol)\y)<>0 And missile_ennemi3(ddcol)\y>0;touche le sprite joueur
explosion7=1 ; active l'explosion
x_explosion7=joueur(1)\x ; recupere les coordonée pour afficher l'explosion
y_explosion7=joueur(1)\y ; au bon endroits
missile_ennemi3(ddcol)\x=0 ; envoi le missile en dehors de l'ecran (ses coordonées)
missile_ennemi3(ddcol)\y=-Random(2000)
joueur(1)\vie=joueur(1)\vie-1 ;retire une vie au joueur
PlaySound(1)
EndIf
For zzz=0 To 50 ; on examine les 50 missiles du joueur
; missile joueur avec collision ennemi1
If SpritePixelCollision(missile_base+zzz, missile_joueur(zzz)\x, missile_joueur(zzz)\y, ddcol+510, ennemi1(ddcol)\x, ennemi1(ddcol)\y)<>0 And ennemi1(ddcol)\y>0;a t'on touché le sprite ennemi ?
explosion_j(zzz)=1 ; alors on active l'explosion
x_explosion(zzz)=ennemi1(ddcol)\x ; recupere les coordonée pour afficher l'explosion
y_explosion(zzz)=ennemi1(ddcol)\y ; au bon endroits
ennemi1(ddcol)\x=Random(2000)
ennemi1(ddcol)\y=-Random(2000)
ennemi1(ddcol)\vie=0
missile_joueur(zzz)\vie=0
missile_joueur(zzz)\y=-Random(2000)
PlaySound(1)
EndIf
; missile joueur avec collision ennemi2
If SpritePixelCollision(missile_base+zzz, missile_joueur(zzz)\x, missile_joueur(zzz)\y, ddcol+510, ennemi2(ddcol)\x, ennemi2(ddcol)\y)<>0 And ennemi2(ddcol)\y>0 ;a t'on touché le sprite ennemi ?
explosion_j(zzz)=1 ; active l'explosion
x_explosion(zzz)=ennemi2(ddcol)\x ; recupere les coordonée pour afficher l'explosion
y_explosion(zzz)=ennemi2(ddcol)\y ; au bon endroits
ennemi2(ddcol)\x=Random(2000)
ennemi2(ddcol)\y=-Random(2000)
ennemi2(ddcol)\vie=0
missile_joueur(zzz)\vie=0
missile_joueur(zzz)\y=-Random(2000)
PlaySound(1)
EndIf
; missile joueur avec collision ennemi3
If SpritePixelCollision(missile_base+zzz, missile_joueur(zzz)\x, missile_joueur(zzz)\y, ddcol+510, ennemi3(ddcol)\x, ennemi3(ddcol)\y)<>0 And ennemi3(ddcol)\y>0;a t'on touché le sprite ennemi ?
explosion_j(zzz)=1 ; active l'explosion
x_explosion(zzz)=ennemi3(ddcol)\x ; recupere les coordonée pour afficher l'explosion
y_explosion(zzz)=ennemi3(ddcol)\y ; au bon endroits
ennemi3(ddcol)\x=Random(2000)
ennemi3(ddcol)\y=-Random(2000)
ennemi3(ddcol)\vie=0
missile_joueur(zzz)\vie=0
missile_joueur(zzz)\y=Random(2000)
PlaySound(1)
EndIf
; missile joueur avec collision gellule_vie
If SpritePixelCollision(missile_base+zzz, missile_joueur(zzz)\x, missile_joueur(zzz)\y, sprite_gellule_vie, gellule_vie(1)\x, gellule_vie(1)\y)<>0 And gellule_vie(1)\y>0 ;a t'on touché le sprite ennemi ?
gellule_vie(1)\vie=Random(2000)
gellule_vie(1)\y=-Random(2000)
missile_joueur(zzz)\vie=0
missile_joueur(zzz)\y=-Random(2000)
PlaySound(1)
EndIf
Next zzz
; ddcol=ddcol+1:If ddcol>10:ddcol=0:EndIf
Next ddcol
Return
;}
;{; hazard:
hazard:
; tire au hasard une colonne pour les sprites disparus !!
For uu=0 To 10
If ennemi1(uu)\vie=0
ennemi1(uu)\x=64+Random(EcranX-128)-64 ; test
EndIf
If ennemi2(uu)\vie=0
ennemi2(uu)\x=64+Random(EcranX-128)-64 ; test
EndIf
If ennemi3(uu)\vie=0
ennemi3(uu)\x=64+Random(EcranX-128)-64 ; test
EndIf
Next uu
If gellule_vie(1)\vie=0
gellule_vie(1)\x=64+Random(EcranX-128) -64
gellule_vie(1)\y=-64
EndIf
Return
;}
;{; affiche_gellule_vie
affiche_gellule_vie:
If gellule_vie(1)\vie=1 ; gellule est activé
DisplaySprite(sprite_gellule_vie, gellule_vie(1)\x, gellule_vie(1)\y) ; on l'affiche
gellule_vie(1)\y=gellule_vie(1)\y+8 ; elle descend
If gellule_vie(1)\y>EcranY; si elle est sorti de l'ecran
gellule_vie(1)\vie=0 ; on la desactive
gellule_vie(1)\y=EcranY+64 ; on la met hors ecran
EndIf
EndIf
Return
;}
;}
; *************************** fin sous program *************************************
Procedure TimerProc(hwnd.l, uMsg.l, idEvent.l, dwTime.l)
Shared iip2,x_ennemi1,y_ennemi1,x_ennemi2,y_ennemi2,x_ennemi3,y_ennemi3,ennemi_vie,iipa,iipb,iipc
Shared vittx_missile3,vitt3,x_joueur,y_joueur,vitty_missile3,x_dist2,x_dist3
Select uMsg
Case #WM_TIMER
Select idEvent
Case 1
;{; ; Ici, le tir automatique de l' ennemi 1 (si ennemi vivant !!)
ttyy1=Random(10)
;ttyy=1 ; ennemi numero 1 tir
If ennemi1(ttyy1)\vie =1 ; si un ennemi est vivant
iipa=iipa+1 :If iipa>10:iipa=1:EndIf
missile_ennemi1(iipa)\x=ennemi1(ttyy1)\x+16 ; releve la position X de l'ennemi 1
missile_ennemi1(iipa)\y=ennemi1(ttyy1)\y ; releve la position Y de l'ennemi 1
If missile_ennemi1(iipa)\vie=0 ;verifie que le missile n'existe pas deja
missile_ennemi1(iipa)\vie=1 ; active le missile
Else ; si le missile existe
iipa=iipa+1 :If iipa>10:iipa=1:EndIf ; augmente le numero de missile
missile_ennemi1(iipa)\vie=1 ; active le missile
EndIf
PlaySound(4)
EndIf
;}
Case 2
;{; ***************** active un ennemis *****************
; ennemi_vie1=1 ; determine quel sprite ennemi est actif ( ennemi_vie1,2,3)
de1_s=Random(3) ; determine quel type de sprite ennemi est actif (1,2,3) Random(3) est tres dur a jouer !!
de1_n=Random(10) ; numero du sprite 1
de2_n=Random(10) ; numero du sprite 2
de3_n=Random(10) ; numero du sprite 3
; de1_s=3 ; on force le sprite 1 (test)
If de1_s=1
If ennemi1(de1_n)\vie=0 ; verifie que le sprite n'existe pas deja
ennemi1(de1_n)\vie=1
ennemi1(de1_n)\y=0 ; place l'ennemi en haut de l'ecran
EndIf
EndIf
If de1_s=2
If ennemi2(de2_n)\vie=0 ; verifie que le sprite n'existe pas deja
ennemi2(de2_n)\vie=1
ennemi2(de2_n)\y=0 ; place l'ennemi en haut de l'ecran
EndIf
EndIf
If de1_s=3
If ennemi3(de3_n)\vie=0 ; verifie que le sprite n'existe pas deja
ennemi3(de3_n)\vie=1
ennemi3(de3_n)\y=0 ; place l'ennemi en haut de l'ecran
EndIf
EndIf
;}
; ************************************************************
Case 3
;{; ; Ici, le tir automatique de l' ennemi 2 (si ennemi vivant !!)
ttyy2=Random(10)
;ttyy2=1 ; ennemi numero 1 (de type 2) tir
If ennemi2(ttyy2)\vie =1 ; si un ennemi (de type 2) est vivant
iipb=iipb+1 :If iipb>10:iipb=1:EndIf
missile_ennemi2(iipb)\x=ennemi2(ttyy2)\x+16 ; releve la position X de l'ennemi 2
missile_ennemi2(iipb)\y=ennemi2(ttyy2)\y ; releve la position Y de l'ennemi 2
;{; ****** change le sens x ou y du missile2 ********
If missile_ennemi2(iipb)\x>joueur(1)\x ; si le missile est a droite du joueur
x_dist2=missile_ennemi2(iipb)\x-joueur(1)\x
missile_ennemi2(iipb)\vittx=0-x_dist2/10 ; change le sens x du missile (tir vers la gauche)
EndIf
; la variable "vittx_missile2" contient le sens du deplacement du missile en X
If missile_ennemi2(iipb)\x<joueur(1)\x ; si le missile est a gauche du joueur
x_dist2=joueur(1)\x -missile_ennemi2(iipb)\x
missile_ennemi2(iipb)\vittx=x_dist2/10 ; change le sens x du missile (tir vers la droite)
EndIf
; ****** change le sens y du missile ********
If missile_ennemi2(iipb)\y>joueur(1)\y ; si le missile est au dessus du joueur
missile_ennemi2(iipb)\vitty=0-vitt2*3 ; change le sens y du missile (tir vers le bas)
EndIf
; la variable "vitty_missile2" contient le sens du deplacement du missile en Y
If missile_ennemi2(iipb)\y<joueur(1)\y ; si le missile est au dessous du joueur
missile_ennemi2(iipb)\vitty=vitt2*3 ; change le sens y du missile (tir vers le haut)
EndIf
; **********************************************
;}
If missile_ennemi2(iipb)\vie=0 ;verifie que le missile n'existe pas deja
missile_ennemi2(iipb)\vie=1 ; active le missile
Else ; si le missile existe
iipb=iipb+1 :If iipb>10:iipb=1:EndIf ; augmente le numero de missile
missile_ennemi2(iipb)\vie=1 ; active le missile
EndIf
PlaySound(5)
EndIf
;}
Case 4
;{; ; Ici, le tir automatique de l' ennemi 3 (si ennemi vivant !!)
ttyy3=Random(10)
;ttyy3=1 ; ennemi numero 1 (de type 3) tir
If ennemi3(ttyy3)\vie =1 ; si un ennemi (de type 3) est vivant
iipc=iipc+1 :If iipc>10:iipc=1:EndIf
missile_ennemi3(iipc)\x=ennemi3(ttyy3)\x+16 ; releve la position X de l'ennemi 3
missile_ennemi3(iipc)\y=ennemi3(ttyy3)\y ; releve la position Y de l'ennemi 3
;{; ****** change le sens x ou y du missile3 ********
If missile_ennemi3(iipc)\x>joueur(1)\x ; si le missile est a droite du joueur
x_dist3=missile_ennemi3(iipc)\x-joueur(1)\x
missile_ennemi3(iipc)\vittx=0-x_dist3/10 ; change le sens x du missile (tir vers la gauche)
EndIf
; la variacle "vittx_missile3" contient le sens du deplacement du missile en X
If missile_ennemi3(iipc)\x<joueur(1)\x ; si le missile est a gauche du joueur
x_dist3=joueur(1)\x -missile_ennemi3(iipc)\x
missile_ennemi3(iipc)\vittx=x_dist3/10 ; change le sens x du missile (tir vers la droite)
EndIf
; ****** change le sens y du missile ********
If missile_ennemi3(iipc)\y>joueur(1)\y ; si le missile est au dessus du joueur
missile_ennemi3(iipc)\vitty=0-vitt3*3 ; change le sens y du missile (tir vers le bas)
EndIf
; la variable "vitty_missile3" contient le sens du deplacement du missile en Y
If missile_ennemi3(iipc)\y<joueur(1)\y ; si le missile est au dessous du joueur
missile_ennemi3(iipc)\vitty=vitt3*3 ; change le sens y du missile (tir vers le haut)
EndIf
; **********************************************
;}
If missile_ennemi3(iipc)\vie=0 ;verifie que le missile n'existe pas deja
missile_ennemi3(iipc)\vie=1 ; active le missile
Else ; si le missile existe
iipc=iipc+1 :If iipc>10:iipc=1:EndIf ; augmente le numero de missile
missile_ennemi3(iipc)\vie=1 ; active le missile
EndIf
PlaySound(6)
EndIf
;}
Case 5
;{; active la gellule de vie
gellule_vie(1)\vie=1
;}
EndSelect
EndSelect
EndProcedure
Procedure Ondulation(Texte.s,r,v,b)
; procedure realisé par OLIV
StartDrawing(ScreenOutput()) ; Pour pouvoir utiliser les commandes des dessin 2D.
DrawingMode(1) ; On selectionne le mode pour ne pas avoir de fond derrière les lettres.
FrontColor(r,v, b) ; On change la couleur.
DrawingFont(FontID()) ; On change la police
Angle + #VitesseAngle ; Angle de départ de la sinusoide en radian
If Angle >= 2 * #pi
Angle = 0
EndIf
; On affiche toute les lettres
PosX = 10 ; Position du caractère
For n = 1 To Len(Texte) ; Pour chaque lettre du texte
Lettre.s = Mid(Texte, n, 1) ; on récupère la lettre à la position n
PosY = 50 + #HauteurSin * Sin(Angle + PosX / #LargeurSin) ; on calcul la position en Y de la lettre
; On part du centre de l'image (50) puis on ajoute un sin
; #HauteurSin fait varier l'amplitude du mouvement
; l'angle mis dans le sinus est d'abord composé de l'angle de départ d'affichage du texte (Angle)
; puis on augmente l'angle au fur et à mesure que l'on affiche des lettres avec le coefficient #LargeurSin qui permet de faire varier la largeur de la sinusoide
Locate(PosX, PosY)
DrawText(Lettre)
PosX + TextLength(Lettre)
Next
StopDrawing() ; On signife que l'on arrête les fonctions dessin 2D.
EndProcedure