C'est comme un boeuf(le boeuf musical bien sûr!)



Code : Tout sélectionner
Declare Ondulation(x,Y,Texte.s,r,v,b)
; ***** variables a OLIV *********
; Variables
#HauteurSin = 25 ; Coef qui joue sur la hauteur de la sinusoide
#LargeurSin = 50 ; Coef qui joue sur la largeur de la sinusoide
#VitesseAngle = 1 * #PI / 50 ; vitesse de modification de l'angle de départ du texte
#Vitesse = 50 ; Temps du Delay() qui ralentit/augmente l'animation.
#font =1
#font2=2
Global angle.f, long_text_bas
; ****************************************
Global angle1,amplitude
Global amplitude1=2
Texte.s="PUREBASIC 4.10"
;************************** raster palette ****************************
Global Dim palette.l(500)
For i = 0 To 500
angle.f = angle + ((2 * #PI) / 500)
palette(i) = RGB (Abs (Cos (angle + (4*#PI/6))* 255),Abs (Cos (angle + #PI/3)* 255), Abs (Cos (angle)* 255))
Next
Vitesse.f = 8.2 ;donne scroling vert ou hori suivant
amplitude3.f =120 ; profondeur des dents
pas.f = 0.3 ; nombre de dent de scie
ss=2
; ******************************************************
Buffer$=Space(128)
mciSendString_("open 5.MID type sequencer alias mid",Buffer$,128,0)
mciSendString_("play mid",0,0,0)
InitSprite() ; Initialise les sprites
InitKeyboard() ; Initialise le clavier
LoadFont ( #font , "Arial" ,40)
LoadFont(#font2, "arial", 20 ,#PB_Font_Italic )
#sprite=1 ; on donne un numero au sprite
depx=4 ; deplacement horizontal
depy=4 ; deplacement vertical
etx=0
ety=0
passsx=5
passsy=5
yex=2
yey=2
passsx1=8
passsy1=8
yex1=2
yey1=2
passsx2=2
passsy2=2
yex2=2
yey2=2
If ExamineDesktops() ; Liste les bureaux
Width = DesktopWidth(0) ; Largeur actuelle
Height = DesktopHeight(0) ; Hauteur actuelle
Depth = DesktopDepth(0) ; Profondeur de couleurs actuelle
CentreX=Width/2
EcranY3=Width
Rien$ = "BERNARD 13" ; Titre de l'application à B13
If OpenScreen(Width, Height, Depth, "Intro") ; Ouvre l'écran
CreateSprite(#sprite,32,32) ; on cree un sprite de 32 par 32
StartDrawing(SpriteOutput(#sprite)) ; on va dessiner dedans !!
Circle(16,16,16,RGB(0,0,255)) ; un rond bleu
StopDrawing() ; voila notre sprite est pret !! :D
; on va pouvoir l'apeler par son nom !! (#sprite)
xsprite_pas=10 ; ceci va determiner le sens du sprite pour les X et sa vitesse de deplacement
ysprite_pas=10; ceci va determiner le sens du sprite pour les Y et sa vitesse de deplacement
CreateImage(100, Width, Height) ; on cree un image de la taille de l'ecran (on exagere un peu :D)
StartDrawing( ImageOutput(100)) ; on va dessiner dans une image reperé "100"
FrontColor(RGB($0,$FF,$FF)) ; couleur d'ecriture
BackColor(RGB(0, 0, 0)) ; couleur de fons
DrawingFont(FontID(#font2))
DrawingMode(1)
DrawText(0,0,Texte.s) ; on ecrit "PUREBASIC 4.10" dedans notre image
StopDrawing()
; ceci va lire l'image ligne par ligne et recreer autant d'image qu'il y a de ligne !!
For t=0 To 100
GrabImage(100, t, 0, t, 250,1) ; voila on prend un ligne et on en fait une image d'une ligne de large 1 pixel de haut
Next t ; on a un bon stock de ligne la :D 101 pour etre exact :)
Repeat ; Boucle
ExamineKeyboard() ; Scanne l'état du clavier
StartDrawing(ScreenOutput()) ; Démarre le dessin dans le buffer
; ************************ Raster arriere plan :D ***********************************
artichaut = artichaut+Cos( 36)/10
artison =artison+Sin( 36)
a = Sin ((x3 + artichaut)/(500 + Sin (x3/100)*100)) * 75 + 75
For Y3=1 To EcranY3-1
artichaut = Cos ((Y3 + artison)/(300 + Cos (Y3/100)*100)) * 75 + 75
coul = a + artichaut
If coul > 500
coul = coul-500
EndIf
coul = palette (coul)
i=Y3
amplitude3= amplitude3+ss
If amplitude3>120:ss=-ss:EndIf
If amplitude3<-120:ss=-0.001:ss=-ss:EndIf
x3=(CentreX)+ Sin((angle3 + i* pas*10 ) * 0.0174533) * amplitude3
LineXY(x3+Sin((angle3 + i* pas*3 ) * 0.0174533) * amplitude3 ,Y3,x+500+Sin((angle3 + i* pas*5 ) * 0.0174533) * amplitude3 ,Y3,coul)
Next Y3
angle3=angle3 + Vitesse
; ********************************************************************************
For y1= 0 To 100 ; on va ré afficher nos 101 lignes mais en les positionant par rapport a une sinuzoide :=
DrawingFont(FontID(#font2))
angle1=angle1+1 :If angle1=360*10: angle1=0 :EndIf
x1+(Sin(angle1*2*#PI/50)*amplitude1) ; le X varie en fonction de Sin()
DrawImage( ImageID(y1), x1+y1, y1,Width,1)
Next y1 ; voila voila !! :D
;--------------- simulateur d'antenne cassée --------------------
recep +20 ;pas de la figne de synchro
If recep>Height-4 ;il elle est en bas
recep =2 ;on la remet en haut
EndIf
LineXY(0,recep,Width,recep,RGB(110,110,110)) ;lignes synchro
LineXY(0,recep-1,Width,recep-1,RGB(90,90,90))
LineXY(0,recep+1,Width,recep+1,RGB(90,90,90))
LineXY(0,recep-2,Width,recep-2,RGB(70,70,70))
LineXY(0,recep+2,Width,recep+3,RGB(70,70,70))
hh=Height-200 ; determine la bande du 16/9 eme
vv=Width
For etoile =0 To 10000 ;nombre de fourmis
etx=Random(vv) ;position aleatoire des fourmis en coordonné x
ety=Random(hh)+100 ;position aleatoire des fourmis en coordonné y
cr=Random(255)+100
cv=Random(255)+100
cb=Random(255)+100
Plot (etx,ety,RGB(r,v,b)) ;plusieur "plot" pour donner du relief a la foumis
Plot (etx+1,ety,RGB(cr-20,cv-20,cb-20))
Plot (etx-1,ety,RGB(cr-20,cv-20,cb-20))
Plot (etx,ety+1,RGB(cr-20,cv-20,cb-20))
Plot (etx,ety-1,RGB(cr-20,cv-20,cb-20))
Plot (etx+1,ety+1,RGB(cr-100,cv-100,cb-100))
Plot (etx-1,ety-1,RGB(cr-100,cv-100,cb-100))
Plot (etx-1,ety+1,RGB(cr-100,cv-100,cb-100))
Plot (etx+1,ety-1,RGB(cr-100,cv-100,cb-100))
Next
LineXY(0,ety,Width,ety,RGB(150,150,150)) ;ligne horizontal parasite
LineXY(0,ety-1,Width,ety-1,RGB(120,120,120))
LineXY(0,ety+1,Width,ety+1,RGB(120,120,120))
;--------- fin du simulateur d antenne cassée ------------------
DrawText((Width/2 - TextWidth(Rien$)/2)+a, (Height/2 - TextHeight(Rien$)/2)+b, "BERNARD 13", $FFFFFF, $000000) ; Dessine
a+depx ;on deplace la position du texte sur l horizontal
b+depy ;on deplace la position du texte sur la vertical
If (Width/2 - TextWidth(Rien$)/2)+a>Width-TextWidth(Rien$) ;si le texte depasse la largeure de l' écran
depx=-depx ;on inverse le pas horizontal en négatif
EndIf
If (Width/2 - TextWidth(Rien$)/2)+a<0 ;si le texte depasse a gauche de l' écran
depx=-depx ;on inverse le pas horizontal en positif
EndIf
If (Height/2 - TextHeight(Rien$)/2)+b>Height-TextHeight(Rien$);si le texte depasse la hauteur de l' écran
depy=-depy ;on inverse le pas vertical en negatif
EndIf
If (Height/2 - TextHeight(Rien$)/2)+b<0 ;si le texte depasse en base de l' écran
depy=-depy ;on inverse le pas vertical en positif
EndIf
;------------- routine boulles en rotation ---------
rot.f+0.1
For colon= 0 To 8 ;nombre de ligne de boulles en rotation!! ou collone pitain je sais plus
For ligne =0 To 8 ;nombre de collone de boulles en rotation!! ou ligne repitain je sais pas
posx=(colon*50)-200 ; pfff ca me gonffle les comment...
posy=(ligne*50)-300
ix=Cos(rot) * posx - Sin(rot) * posy
iy=Sin(rot) * posx + Cos(rot) * posy
iz1=Sin(rot) * iy + Cos(rot) * 100
cix=1000*ix/(1000-iz1)
ciy=1000*(Cos(rot) * iy - Sin(rot) * 100)/(1000-iz1)
Circle(cix+100+Width/2,ciy+ 100+Height/2, 20 ,RGB(150,50,50))
Circle(cix+102+Width/2,ciy+ 98+Height/2, 16 ,RGB(170,70,70))
Circle(cix+104+Width/2,ciy+ 96+Height/2, 12 ,RGB(190,90,90))
Circle(cix+107+Width/2,ciy+ 92+Height/2, 4 ,RGB(250,250,250))
Next ligne
Next colon
;-------------- fin boulles en rotation --------
;-------------bebut spectre------------
avx+passsx*veroux
avy+passsy*verouy
yyex=yex*veroux
yyey=yey*verouy
varix=Random(100)
variy=Random(100)
varix1=Random(100)
variy1=Random(100)
varix2=Random(100)
variy2=Random(100)
If avx>Width-150 Or avx<0 Or varix=50
passsx=-passsx
veroux=1
verouy=0
yex=-yex
EndIf
If avy>Height-150 Or avy<0 Or variy=50
passsy=-passsy
veroux=0
verouy=1
yey=-yey
EndIf
avx0=avx
avy0=avy
yyex0=yyex
yyey0=yyey
coul=$0000ff
Gosub spectre
avx1+passsx1*veroux1
avy1+passsy1*verouy1
yyex1=yex1*veroux1
yyey1=yey1*verouy1
If avx1>Width-150 Or avx1<0 Or varix1=50
passsx1=-passsx1
veroux1=1
verouy1=0
yex1=-yex1
EndIf
If avy1>Height-150 Or avy1<0 Or variy1=50
passsy1=-passsy1
veroux1=0
verouy1=1
yey1=-yey1
EndIf
avx0=avx1
avy0=avy1
yyex0=yyex1
yyey0=yyey1
coul=$ff0000
Gosub spectre
avx2+passsx2*veroux2
avy2+passsy2*verouy2
yyex2=yex2*veroux2
yyey2=yey2*verouy2
If avx2>Width-150 Or avx2<0 Or varix2=50
passsx2=-passsx2
veroux2=1
verouy2=0
yex2=-yex2
EndIf
If avy2>Height-150 Or avy2<0 Or variy2=50
passsy2=-passsy2
veroux2=0
verouy2=1
yey2=-yey2
EndIf
avx0=avx2
avy0=avy2
yyex0=yyex2
yyey0=yyey2
coul=$00ff00
Gosub spectre
;--------------fin spetcre--------------
;Moi RV et mon pixel blanc
Plot(10,10,RGB(255,255,255)) ; un point aux coordonnées 10,10 (coin en haut a gauche) de couleur rgb(255,255,255) blanc donc
StopDrawing() ; C'est fini
; on va tester si le sprite va sortir de l'ecran
; et fabriquer un rebond par inversion de la coordonée au cas ou ...
x_sprite=x_sprite + xsprite_pas ; on lance l'animation de la coordonées X
y_sprite=y_sprite + ysprite_pas ; on lance l'animation de la coordonées Y
; on test les sorties d'ecran
If x_sprite>Width-32 Or x_sprite<0 ; si la coordonée X du sprite est superieur a la largeur de l'ecran (sortie a droite) ou plus petit que zero (sortie a gauche)
; le "-32" sert a ce que la detection de la sortie se fasse a droite du Sprite
xsprite_pas=-xsprite_pas ; on inverse le sens des x , ce qui aura pour consequence de faire aller le Sprite dans l'autre sens des X
EndIf
If y_sprite>Height-32 Or y_sprite<0 ; si la coordonée Y du sprite est superieur a la lhauteur de l'ecran (sortie en bas) ou plus petit que zero (sortie en haut)
; le "-32" sert a ce que la detection de la sortie se fasse au dessous du Sprite
ysprite_pas=-ysprite_pas ; on inverse le sens des Y , ce qui aura pour consequence de faire aller le Sprite dans l'autre sens des Y
EndIf
DisplayTransparentSprite(#sprite,x_sprite,y_sprite) ; on affiche le Sprite aux coordonées
son=Random(1000)+500
text.s="petite demo pour Bernard 13"
xt=xt+2 :If xt>Width:xt=-500:EndIf ; le text arrive a droite ? on le remet a gauche !!
yt=Height-125 ; emplacement verticale de la sinuzoide
Ondulation(xt,yt,text.s,cr,cv,cb) ; appel de la procedure a OLIV on donne les coordonées que l'on veux, le text, et la couleur
FlipBuffers() ; Inverse les buffers
ClearScreen(0) ; Efface l'écran
Until KeyboardPushed(#PB_Key_Escape) ; On s'en va!!!
mciSendString_("CLOSE MIDI",0,0,0)
EndIf
EndIf
End ; Adios!
spectre:
Circle(100+avx0, 100+avy0, 20 ,coul)
Box(80+avx0,100+avy0, 40, 25 ,coul)
Circle(88+avx0, 122+avy0, 3 ,RGB(0,0,0))
Circle(100+avx0, 122+avy0, 3 ,RGB(0,0,0))
Circle(112+avx0, 122+avy0, 3 ,RGB(0,0,0))
Box(85+avx0,122+avy0, 6, 3,RGB(0,0,0))
Box(97+avx0,122+avy0, 6, 3,RGB(0,0,0))
Box(109+avx0,122+avy0, 6, 3,RGB(0,0,0))
Circle(108+avx0, 95+avy0, 5 ,RGB(255,255,255))
Circle(94+avx0, 95+avy0, 5 ,RGB(255,255,255))
Circle(108+avx0+yyex0, 95+avy0+yyey0, 3 ,RGB(0,0,0))
Circle(94+avx0+yyex0, 95+avy0+yyey0, 3 ,RGB(0,0,0))
Return
Procedure Ondulation(x,Y,Texte.s,r,v,b)
; procedure realisé par OLIV
StartDrawing ( ScreenOutput ()) ; Pour pouvoir utiliser les commandes des dessin 2D.
DrawingFont ( FontID ( #font )) ; On change la police
DrawingMode (1) ; On selectionne le mode pour ne pas avoir de fond derrière les lettres.
FrontColor ( RGB (r,v,b) ) ; On change la couleur.
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
DrawText (x+posx, Y+posy,Lettre)
posx + TextWidth (Lettre)
Next
StopDrawing () ; On signife que l'on arrête les fonctions dessin 2D.
EndProcedure
Code : Tout sélectionner
Declare Ondulation(x,Y,Texte.s,r,v,b)
; ***** variables a OLIV *********
; Variables
#HauteurSin = 25 ; Coef qui joue sur la hauteur de la sinusoide
#LargeurSin = 50 ; Coef qui joue sur la largeur de la sinusoide
#VitesseAngle = 1 * #PI / 50 ; vitesse de modification de l'angle de départ du texte
#Vitesse = 50 ; Temps du Delay() qui ralentit/augmente l'animation.
#font =1
#font2=2
Global angle.f, long_text_bas
; ****************************************
Global angle1,amplitude
Global amplitude1=2
Texte.s="PUREBASIC 4.10"
;************************** raster palette ****************************
Global Dim palette.l(500)
For i = 0 To 500
angle.f = angle + ((2 * #PI) / 500)
palette(i) = RGB (Abs (Cos (angle + (4*#PI/6))* 255),Abs (Cos (angle + #PI/3)* 255), Abs (Cos (angle)* 255))
Next
Vitesse.f = 8.2 ;donne scroling vert ou hori suivant
amplitude3.f =120 ; profondeur des dents
pas.f = 0.3 ; nombre de dent de scie
ss=2
; ******************************************************
Buffer$=Space(128)
mciSendString_("open 5.MID type sequencer alias mid",Buffer$,128,0)
mciSendString_("play mid",0,0,0)
InitSprite() ; Initialise les sprites
InitKeyboard() ; Initialise le clavier
LoadFont ( #font , "Arial" ,40)
LoadFont(#font2, "arial", 20 ,#PB_Font_Italic )
#sprite=1 ; on donne un numero au sprite
depx=4 ; deplacement horizontal
depy=4 ; deplacement vertical
etx=0
ety=0
passsx=5
passsy=5
yex=2
yey=2
If ExamineDesktops() ; Liste les bureaux
Width = DesktopWidth(0) ; Largeur actuelle
Height = DesktopHeight(0) ; Hauteur actuelle
Depth = DesktopDepth(0) ; Profondeur de couleurs actuelle
CentreX=Width/2
EcranY3=Width
Rien$ = "BERNARD 13" ; Titre de l'application à B13
If OpenScreen(Width, Height, Depth, "Intro") ; Ouvre l'écran
CreateSprite(#sprite,32,32) ; on cree un sprite de 32 par 32
StartDrawing(SpriteOutput(#sprite)) ; on va dessiner dedans !!
Circle(88+avx, 125+avy, 5 ,RGB(0,0,0))
Circle(100+avx, 125+avy, 5 ,RGB(0,0,0))
Circle(112+avx, 125+avy, 5 ,RGB(0,0,0))
Circle(16,16,16,RGB(0,0,255)) ; un rond bleu
StopDrawing() ; voila notre sprite est pret !! :D
; on va pouvoir l'apeler par son nom !! (#sprite)
xsprite_pas=10 ; ceci va determiner le sens du sprite pour les X et sa vitesse de deplacement
ysprite_pas=10; ceci va determiner le sens du sprite pour les Y et sa vitesse de deplacement
CreateImage(100, Width, Height) ; on cree un image de la taille de l'ecran (on exagere un peu :D)
StartDrawing( ImageOutput(100)) ; on va dessiner dans une image reperé "100"
FrontColor(RGB($0,$FF,$FF)) ; couleur d'ecriture
BackColor(RGB(0, 0, 0)) ; couleur de fons
DrawingFont(FontID(#font2))
DrawingMode(1)
DrawText(0,0,Texte.s) ; on ecrit "PUREBASIC 4.10" dedans notre image
StopDrawing()
; ceci va lire l'image ligne par ligne et recreer autant d'image qu'il y a de ligne !!
For t=0 To 100
GrabImage(100, t, 0, t, 250,1) ; voila on prend un ligne et on en fait une image d'une ligne de large 1 pixel de haut
Next t ; on a un bon stock de ligne la :D 101 pour etre exact :)
;-Préparation Raster
Structure s_Raster
CentreX.l
CentreY.l
Vitesse.f
Angle.f
Amplitude.l
Pas.f
Fond.l
Sprite.l[30]
EndStructure
Structure s_Texte
Texte.s
depx.l
depy.l
x.l
y.l
Mx.l
My.l
EndStructure
Declare DeplaceTexte(*T.s_Texte)
Global Raster.s_Raster
Define.s_Texte TexteRaster
With TexteRaster
\Texte = "Comtois"
\depx = 2
\depy = 2
\x = Width/2
\y = height/2
\Mx = Width
\My = height
EndWith
Raster\Fond = CreateSprite(#PB_Any,480,480)
StartDrawing(SpriteOutput(Raster\Fond))
For l=0 To 479
Restore couleur
For i = 0 To 479
Read coul
Plot(l,i,coul)
Next i
Next l
StopDrawing()
With Raster
UseBuffer(\Fond)
For i = 0 To 29
\Sprite[i] = GrabSprite(#PB_Any, i * 8, i* 16, 240 - i * 8, 16)
Next
UseBuffer(-1)
FreeSprite(\Fond)
\CentreX = (Width - SpriteWidth(\Sprite[0])) / 2
\CentreY = (Height - SpriteHeight(\Sprite[0])) / 2
\Vitesse = 6
\Angle = 0
\Amplitude = 120
\Pas = 3.8
EndWith
Repeat ; Boucle
ExamineKeyboard() ; Scanne l'état du clavier
StartDrawing(ScreenOutput()) ; Démarre le dessin dans le buffer
addecr1 = DrawingBuffer()
; ************************ Raster arriere plan :D ***********************************
artichaut = artichaut+Cos( 36)/10
artison =artison+Sin( 36)
a = Sin ((x3 + artichaut)/(500 + Sin (x3/100)*100)) * 75 + 75
For Y3=1 To EcranY3-1
artichaut = Cos ((Y3 + artison)/(300 + Cos (Y3/100)*100)) * 75 + 75
coul = a + artichaut
If coul > 500
coul = coul-500
EndIf
coul = palette (coul)
i=Y3
amplitude3= amplitude3+ss
If amplitude3>120:ss=-ss:EndIf
If amplitude3<-120:ss=-0.001:ss=-ss:EndIf
x3=(CentreX)+ Sin((angle3 + i* pas*10 ) * 0.0174533) * amplitude3
LineXY(x3+Sin((angle3 + i* pas*3 ) * 0.0174533) * amplitude3 ,Y3,x+500+Sin((angle3 + i* pas*5 ) * 0.0174533) * amplitude3 ,Y3,coul)
Next Y3
angle3=angle3 + Vitesse
; ********************************************************************************
For y1= 0 To 100 ; on va ré afficher nos 101 lignes mais en les positionant par rapport a une sinuzoide :=
DrawingFont(FontID(#font2))
angle1=angle1+1 :If angle1=360*10: angle1=0 :EndIf
x1+(Sin(angle1*2*#PI/50)*amplitude1) ; le X varie en fonction de Sin()
DrawImage( ImageID(y1), x1+y1, y1,Width,1)
Next y1 ; voila voila !! :D
;--------------- simulateur d'antenne cassée --------------------
recep +20 ;pas de la figne de synchro
If recep>Height-4 ;il elle est en bas
recep =2 ;on la remet en haut
EndIf
LineXY(0,recep,Width,recep,RGB(110,110,110)) ;lignes synchro
LineXY(0,recep-1,Width,recep-1,RGB(90,90,90))
LineXY(0,recep+1,Width,recep+1,RGB(90,90,90))
LineXY(0,recep-2,Width,recep-2,RGB(70,70,70))
LineXY(0,recep+2,Width,recep+3,RGB(70,70,70))
hh=Height-200 ; determine la bande du 16/9 eme
vv=Width
For etoile =0 To 10000 ;nombre de fourmis
etx=Random(vv) ;position aleatoire des fourmis en coordonné x
ety=Random(hh)+100 ;position aleatoire des fourmis en coordonné y
cr=Random(255)+100
cv=Random(255)+100
cb=Random(255)+100
Plot (etx,ety,RGB(r,v,b)) ;plusieur "plot" pour donner du relief a la foumis
Plot (etx+1,ety,RGB(cr-20,cv-20,cb-20))
Plot (etx-1,ety,RGB(cr-20,cv-20,cb-20))
Plot (etx,ety+1,RGB(cr-20,cv-20,cb-20))
Plot (etx,ety-1,RGB(cr-20,cv-20,cb-20))
Plot (etx+1,ety+1,RGB(cr-100,cv-100,cb-100))
Plot (etx-1,ety-1,RGB(cr-100,cv-100,cb-100))
Plot (etx-1,ety+1,RGB(cr-100,cv-100,cb-100))
Plot (etx+1,ety-1,RGB(cr-100,cv-100,cb-100))
Next
LineXY(0,ety,Width,ety,RGB(150,150,150)) ;ligne horizontal parasite
LineXY(0,ety-1,Width,ety-1,RGB(120,120,120))
LineXY(0,ety+1,Width,ety+1,RGB(120,120,120))
;--------- fin du simulateur d antenne cassée ------------------
DrawText((Width/2 - TextWidth(Rien$)/2)+a, (Height/2 - TextHeight(Rien$)/2)+b, "BERNARD 13", $FFFFFF, $000000) ; Dessine
a+depx ;on deplace la position du texte sur l horizontal
b+depy ;on deplace la position du texte sur la vertical
If (Width/2 - TextWidth(Rien$)/2)+a>Width-TextWidth(Rien$) ;si le texte depasse la largeure de l' écran
depx=-depx ;on inverse le pas horizontal en négatif
EndIf
If (Width/2 - TextWidth(Rien$)/2)+a<0 ;si le texte depasse a gauche de l' écran
depx=-depx ;on inverse le pas horizontal en positif
EndIf
If (Height/2 - TextHeight(Rien$)/2)+b>Height-TextHeight(Rien$);si le texte depasse la hauteur de l' écran
depy=-depy ;on inverse le pas vertical en negatif
EndIf
If (Height/2 - TextHeight(Rien$)/2)+b<0 ;si le texte depasse en base de l' écran
depy=-depy ;on inverse le pas vertical en positif
EndIf
;------------- routine boulles en rotation ---------
rot.f+0.1
For colon= 0 To 8 ;nombre de ligne de boulles en rotation!! ou collone pitain je sais plus
For ligne =0 To 8 ;nombre de collone de boulles en rotation!! ou ligne repitain je sais pas
posx=(colon*50)-200 ; pfff ca me gonffle les comment...
posy=(ligne*50)-300
ix=Cos(rot) * posx - Sin(rot) * posy
iy=Sin(rot) * posx + Cos(rot) * posy
iz1=Sin(rot) * iy + Cos(rot) * 100
cix=1000*ix/(1000-iz1)
ciy=1000*(Cos(rot) * iy - Sin(rot) * 100)/(1000-iz1)
Circle(cix+100+Width/2,ciy+ 100+Height/2, 20 ,RGB(150,50,50))
Circle(cix+102+Width/2,ciy+ 98+Height/2, 16 ,RGB(170,70,70))
Circle(cix+104+Width/2,ciy+ 96+Height/2, 12 ,RGB(190,90,90))
Circle(cix+107+Width/2,ciy+ 92+Height/2, 4 ,RGB(250,250,250))
Next ligne
Next colon
;-------------- fin boulles en rotation --------
;-------------bebut spectre------------
avx+passsx*veroux
avy+passsy*verouy
yyex=yex*veroux
yyey=yey*verouy
varix=Random(100)
variy=Random(100)
If avx>Width-150 Or avx<0 Or varix=50
passsx=-passsx
veroux=1
verouy=0
yex=-yex
EndIf
If avy>Height-150 Or avy<0 Or variy=50
passsy=-passsy
veroux=0
verouy=1
yey=-yey
EndIf
Circle(100+avx, 100+avy, 20 ,RGB(20,250,50))
Box(80+avx,100+avy, 40, 25 ,RGB(20,250,50))
Circle(88+avx, 122+avy, 3 ,RGB(0,0,0))
Circle(100+avx, 122+avy, 3 ,RGB(0,0,0))
Circle(112+avx, 122+avy, 3 ,RGB(0,0,0))
Box(85+avx,122+avy, 6, 3,RGB(0,0,0))
Box(97+avx,122+avy, 6, 3,RGB(0,0,0))
Box(109+avx,122+avy, 6, 3,RGB(0,0,0))
Circle(108+avx, 95+avy, 5 ,RGB(255,255,255))
Circle(94+avx, 95+avy, 5 ,RGB(255,255,255))
Circle(108+avx+yyex, 95+avy+yyey, 3 ,RGB(0,0,0))
Circle(94+avx+yyex, 95+avy+yyey, 3 ,RGB(0,0,0))
;--------------fin spetcre--------------
;Moi RV et mon pixel blanc
Plot(10,10,RGB(255,255,255)) ; un point aux coordonnées 10,10 (coin en haut a gauche) de couleur rgb(255,255,255) blanc donc
;-Texte Raster
DeplaceTexte(@TexteRaster)
StopDrawing() ; C'est fini
; on va tester si le sprite va sortir de l'ecran
; et fabriquer un rebond par inversion de la coordonée au cas ou ...
x_sprite=x_sprite + xsprite_pas ; on lance l'animation de la coordonées X
y_sprite=y_sprite + ysprite_pas ; on lance l'animation de la coordonées Y
; on test les sorties d'ecran
If x_sprite>Width-32 Or x_sprite<0 ; si la coordonée X du sprite est superieur a la largeur de l'ecran (sortie a droite) ou plus petit que zero (sortie a gauche)
; le "-32" sert a ce que la detection de la sortie se fasse a droite du Sprite
xsprite_pas=-xsprite_pas ; on inverse le sens des x , ce qui aura pour consequence de faire aller le Sprite dans l'autre sens des X
EndIf
If y_sprite>Height-32 Or y_sprite<0 ; si la coordonée Y du sprite est superieur a la lhauteur de l'ecran (sortie en bas) ou plus petit que zero (sortie en haut)
; le "-32" sert a ce que la detection de la sortie se fasse au dessous du Sprite
ysprite_pas=-ysprite_pas ; on inverse le sens des Y , ce qui aura pour consequence de faire aller le Sprite dans l'autre sens des Y
EndIf
DisplayTransparentSprite(#sprite,x_sprite,y_sprite) ; on affiche le Sprite aux coordonées
son=Random(1000)+500
text.s="petite demo pour Bernard 13"
xt=xt+2 :If xt>Width:xt=-500:EndIf ; le text arrive a droite ? on le remet a gauche !!
yt=Height-125 ; emplacement verticale de la sinuzoide
Ondulation(xt,yt,text.s,cr,cv,cb) ; appel de la procedure a OLIV on donne les coordonées que l'on veux, le text, et la couleur
;-Raster
With Raster
For i = 0 To 29
DisplaySprite(\Sprite[i], \CentreX + i * 4, \CentreY + Sin((\Angle + i * \Pas * 2) * 0.0174533) * \Amplitude)
Next i
\Angle + \Vitesse
EndWith
FlipBuffers() ; Inverse les buffers
ClearScreen(0) ; Efface l'écran
Until KeyboardPushed(#PB_Key_Escape) ; On s'en va!!!
mciSendString_("CLOSE MIDI",0,0,0)
EndIf
EndIf
End ; Adios!
Procedure Ondulation(x,Y,Texte.s,r,v,b)
; procedure realisé par OLIV
StartDrawing ( ScreenOutput ()) ; Pour pouvoir utiliser les commandes des dessin 2D.
DrawingFont ( FontID ( #font )) ; On change la police
DrawingMode (1) ; On selectionne le mode pour ne pas avoir de fond derrière les lettres.
FrontColor ( RGB (r,v,b) ) ; On change la couleur.
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
DrawText (x+posx, Y+posy,Lettre)
posx + TextWidth (Lettre)
Next
StopDrawing () ; On signife que l'on arrête les fonctions dessin 2D.
EndProcedure
Procedure DeplaceTexte(*T.s_Texte)
With *T
\x+\depx ;on deplace la position du texte sur l horizontal
\y+\depy ;on deplace la position du texte sur la vertical
If \x + TextWidth(\Texte)>\Mx ;si le texte depasse la largeure de l' écran
\x=\Mx - TextWidth(\Texte)
\depx=-\depx ;on inverse le pas horizontal en négatif
ElseIf \x<0 ;si le texte depasse a gauche de l' écran
\x=0
\depx=-\depx ;on inverse le pas horizontal en positif
EndIf
If \y + TextHeight(\Texte)>\My;si le texte depasse la hauteur de l' écran
\y=\My - TextHeight(\Texte)
\depy=-\depy ;on inverse le pas vertical en negatif
ElseIf \y<0 ;si le texte depasse en base de l' écran
\y=0
\depy=-\depy ;on inverse le pas vertical en positif
EndIf
DrawingMode(#PB_2DDrawing_Transparent)
DrawText(\x, \y, \Texte, $FFFF00, $000000) ; Dessine
EndWith
EndProcedure
DataSection
couleur :
Data.l $13, $30, $50, $70, $8E, $AE, $CF, $EC
Data.l $FF, $EB, $CF, $AF, $8E, $71, $50, $30
Data.l $0, $30914, $61632, $92454, $D3373, $104193, $144FB5, $185CD2
Data.l $1A65E7, $185CD2, $144FB4, $114193, $D3373, $A2554, $51632, $30A15
Data.l $1D2D, $314B, $4569, $5785, $6BA3, $7EC1, $90DC, $9CEE
Data.l $90DB, $7FC2, $6BA3, $5785, $4569, $314B, $1D2C, $D12
Data.l $62518, $B3E27, $F5837, $136F46, $178755, $1CA165, $1FB673, $22C67D
Data.l $20B773, $1CA166, $178755, $136F46, $F5837, $B3F28, $62518, $30F0A
Data.l $152516, $233E25, $315735, $3F6D43, $4D8652, $5B9F62, $67B56F, $70C478
Data.l $67B56E, $5BA062, $4D8752, $3E6D43, $325635, $243E26, $152417, $80F0A
Data.l $152209, $24390F, $324F15, $3F651A, $4E7C20, $5C9226, $69A62C, $72B42F
Data.l $69A62C, $5C9226, $4E7C20, $40641A, $324F15, $24390E, $152209, $90E04
Data.l $22230B, $393A13, $50511A, $666621, $7C7E29, $939631, $A7AA38, $B5B83C
Data.l $A7AA37, $939631, $7C7E2A, $656621, $50521B, $393A13, $22230B, $E0E05
Data.l $423411, $5E4919, $785D1F, $927226, $AD872D, $C89C34, $DFAE3B, $EFBB3F
Data.l $DEAE3B, $C79C34, $AD872D, $927227, $785D1F, $5D4A18, $423412, $271E0A
Data.l $251A12, $3E2C1E, $573C2A, $6E4D35, $875F41, $A0704D, $B68058, $C58A5F
Data.l $B58057, $A0704D, $875F41, $6E4D35, $573D29, $3E2B1E, $251A12, $F0A07
Data.l $211513, $372321, $4E302D, $633D39, $784C46, $8F5953, $A3665F, $B06E66
Data.l $A3655E, $8F5A53, $794B46, $623D39, $4E312D, $372220, $211514, $D0808
Data.l $C0609, $1D0F14, $311921, $44232F, $562C3B, $693649, $7D4056, $8E4961
Data.l $9A4F6A, $8E4962, $7D4056, $693648, $562C3B, $44232F, $311921, $1D0F14
Data.l $1D101B, $311B2D, $44263F, $573050, $6B3B62, $7E4673, $8F4F83, $9B568E
Data.l $8F5083, $7E4673, $6A3B61, $573050, $45263E, $301B2D, $1D101A, $C070B
Data.l $C0912, $1E142C, $31214A, $452F69, $583C84, $6D49A3, $8157C0, $9262DA
Data.l $9E6BED, $9262DB, $8157C0, $6D4AA2, $583C85, $462F69, $32224B, $1E152C
Data.l $211D42, $2E2A5D, $3B3676, $484190, $564EAB, $635AC5, $6E63DC, $766BEC
Data.l $6E64DC, $6259C6, $554EAB, $48418F, $3B3676, $2F2A5C, $211D41, $141227
Data.l $18003F, $220058, $2C0070, $350089, $3F00A3, $4900BD, $5100D2, $5700E1
Data.l $5100D1, $4800BC, $3F00A3, $350089, $2C0070, $220059, $18003E, $E0025
Data.l $23003E, $320059, $3F0071, $4D008A, $5C00A3, $6A00BD, $7600D3, $7F00E2
Data.l $7700D2, $6A00BD, $5C00A4, $4D0089, $400071, $320058, $23003F, $150025
Data.l $220029, $310039, $3E0049, $4B0059, $59006A, $66007A, $720088, $7B0092
Data.l $730088, $67007A, $59006A, $4A0059, $3E0049, $300039, $220028, $140018
Data.l $22031C, $310328, $3D0433, $4B053E, $59064A, $670755, $73085F, $7B0966
Data.l $73085F, $670855, $590649, $4A053E, $3D0433, $300428, $22021C, $140111
Data.l $220511, $300718, $3E081E, $4A0B25, $590D2C, $670E33, $721038, $7B113D
Data.l $721039, $670E33, $590C2C, $4A0A25, $3E091F, $300718, $220510, $14030A
Data.l $29130E, $3A1B13, $4B2219, $5A291F, $6C3125, $7C382A, $8B3E2F, $954332
Data.l $8B3F2F, $7C382A, $6C3025, $5A291E, $4A2219, $3B1A14, $2A130E, $190B08
Data.l $E0800, $221400, $382100, $4F2F00, $643B00, $7A4800, $915500, $A56100
Data.l $B36900, $A56000, $925600, $7B4800, $643B00, $4F2F00, $382100, $221300
Data.l $120D00, $2C2100, $4A3800, $684E00, $836300, $A17A00, $BF9000, $D9A400
Data.l $EBB200, $D9A400, $BF9100, $A17A00, $836400, $684E00, $4A3900, $2C2200
Data.l $D0D00, $1D1F00, $323400, $464900, $595C00, $6C7100, $808500, $929700
Data.l $9EA400, $919700, $808600, $6C7100, $585B00, $464800, $323300, $1E1F00
Data.l $1B2C00, $273E00, $314F00, $3B6000, $477300, $528500, $5C9400, $629F00
Data.l $5B9400, $518500, $477300, $3C6100, $315000, $263E00, $1B2C00, $101A00
Data.l $50E00, $B2100, $133700, $1A4D00, $216200, $287800, $308F00, $36A200
Data.l $3BB000, $37A200, $308E00, $297900, $216200, $1A4E00, $133800, $B2100
Data.l $93722, $D4D31, $11633F, $15794C, $198F5A, $1DA669, $20B975, $22C67D
Data.l $20B975, $1CA568, $18905B, $15784C, $11633E, $D4E30, $93723, $62114
Data.l $4344, $5F62, $7A7D, $9497, $B0B4, $CCD0, $E3E8, $F4F9
Data.l $E3E8, $CCD0, $B1B5, $9597, $7A7D, $6062, $4344, $2829
Data.l $2B42, $3E5E, $4E77, $5F90, $71AC, $82C7, $91DD, $9CEE
Data.l $92DE, $83C7, $71AD, $5F91, $4E77, $3D5D, $2B41, $1A27
Data.l $20812, $4132C, $81F48, $B2C66, $F3881, $12469E, $1552BC, $185DD5
Data.l $1A65E7, $185DD5, $1552BB, $12459F, $F3881, $B2D66, $82049, $5132C
Data.l $40011, $8002A, $D0046, $120063, $17007C, $1C0099, $2200B5, $2600CE
Data.l $2900DF, $2500CE, $2100B5, $1C0099, $17007C, $120063, $D0046, $80029
EndDataSection
Code : Tout sélectionner
Declare Ondulation(x,Y,Texte.s,r,v,b)
; ***** variables a OLIV *********
; Variables
#HauteurSin = 25 ; Coef qui joue sur la hauteur de la sinusoide
#LargeurSin = 50 ; Coef qui joue sur la largeur de la sinusoide
#VitesseAngle = 1 * #PI / 50 ; vitesse de modification de l'angle de départ du texte
#Vitesse = 50 ; Temps du Delay() qui ralentit/augmente l'animation.
#font =1
#font2=2
Global angle.f, long_text_bas
; ****************************************
Global angle1,amplitude
Global amplitude1=2
Texte.s="PUREBASIC 4.10"
;************************** raster palette ****************************
Global Dim palette.l(500)
For i = 0 To 500
angle8.f = angle8 + ((2 * #PI) / 500)
palette(i) = RGB (Abs (Cos (angle8 + (4*#PI/6))* 255),Abs (Cos (angle8 + #PI/3)* 255), Abs (Cos (angle8)* 255))
Next
Vitesse.f = 8.2 ;donne scroling vert ou hori suivant
amplitude3.f =120 ; profondeur des dents
pas.f = 0.3 ; nombre de dent de scie
ss=2
; ******************************************************
Buffer$=Space(128)
mciSendString_("open 5.MID type sequencer alias mid",Buffer$,128,0)
mciSendString_("play mid",0,0,0)
InitSprite() ; Initialise les sprites
InitKeyboard() ; Initialise le clavier
LoadFont ( #font , "Arial" ,40)
LoadFont(#font2, "arial", 20 ,#PB_Font_Italic )
#sprite=1 ; on donne un numero au sprite
#sprite_raster=1000
depx=4 ; deplacement horizontal
depy=4 ; deplacement vertical
etx=0
ety=0
passsx=5
passsy=5
yex=2
yey=2
passsx1=6
passsy1=6
yex1=2
yey1=2
passsx2=2
passsy2=2
yex2=2
yey2=2
bpas=1
If ExamineDesktops() ; Liste les bureaux
Width = DesktopWidth(0) ; Largeur actuelle
Height = DesktopHeight(0) ; Hauteur actuelle
Depth = DesktopDepth(0) ; Profondeur de couleurs actuelle
CentreX=Width/2
EcranY3=Width
Rien$ = "BERNARD 13" ; Titre de l'application à B13
If OpenScreen(Width, Height, Depth, "Intro") ; Ouvre l'écran
CreateSprite(#sprite,32,32) ; on cree un sprite de 32 par 32
StartDrawing(SpriteOutput(#sprite)) ; on va dessiner dedans !!
Circle(16,16,16,RGB(0,0,255)) ; un rond bleu
StopDrawing() ; voila notre sprite est pret !! :D
; on va pouvoir l'apeler par son nom !! (#sprite)
xsprite_pas=10 ; ceci va determiner le sens du sprite pour les X et sa vitesse de deplacement
ysprite_pas=10; ceci va determiner le sens du sprite pour les Y et sa vitesse de deplacement
CreateImage(100, Width, Height) ; on cree un image de la taille de l'ecran (on exagere un peu :D)
StartDrawing( ImageOutput(100)) ; on va dessiner dans une image reperé "100"
FrontColor(RGB($0,$FF,$FF)) ; couleur d'ecriture
BackColor(RGB(0, 0, 0)) ; couleur de fons
DrawingFont(FontID(#font2))
DrawingMode(1)
DrawText(0,0,Texte.s) ; on ecrit "PUREBASIC 4.10" dedans notre image
StopDrawing()
; ceci va lire l'image ligne par ligne et recreer autant d'image qu'il y a de ligne !!
For t=0 To 100
GrabImage(100, t, 0, t, 250,1) ; voila on prend un ligne et on en fait une image d'une ligne de large 1 pixel de haut
Next t ; on a un bon stock de ligne la :D 101 pour etre exact :)
; *********** Raster a Comtois ******************
ClearScreen(RGB(0,0,0))
StartDrawing(ScreenOutput())
For l=0 To 479
Restore Couleur
For i = 0 To 479
Read coul
Plot(l,i,coul)
Next i
Next l
StopDrawing()
For i = 0 To 30
GrabSprite(#sprite_raster+i , i * 8, i* 16, 240 - i * 8, 16)
Next
CentreX5 = (Width - SpriteWidth(1)) / 2
CentreY5 = (Height - SpriteHeight(1)) / 2
Vitesse5.f = 1.3
angle5.f = 0
amplitude5 = 120
pas5.f = 3.8
; *******************************************
Repeat ; Boucle
ExamineKeyboard() ; Scanne l'état du clavier
; *********** Raster a Comtois ******************
For i = 0 To 30
DisplaySprite(#sprite_raster+i, CentreX5 + i * 4+ ( CentreX5-Width/6 ), CentreY5 + Sin((angle5 + i * pas5 * 2) * 0.0174533) * amplitude5)
DisplaySprite(#sprite_raster+i, CentreX5 + i * 4-500, CentreY5 + Sin((angle5 + i * pas5 * 2) * 0.0174533) * amplitude5)
Next i
; *******************************************
StartDrawing(ScreenOutput()) ; Démarre le dessin dans le buffer
angle5 + Vitesse5
; ************************ Raster arriere plan :D ***********************************
artichaut = artichaut+Cos( 36)/10
artison =artison+Sin( 36)
a = Sin ((x3 + artichaut)/(500 + Sin (x3/100)*100)) * 75 + 75
For Y3=1 To EcranY3-1
artichaut = Cos ((Y3 + artison)/(300 + Cos (Y3/100)*100)) * 75 + 75
coul = a + artichaut
If coul > 500
coul = coul-500
EndIf
coul = palette (coul)
i=Y3
amplitude3= amplitude3+ss
If amplitude3>120:ss=-ss:EndIf
If amplitude3<-120:ss=-0.001:ss=-ss:EndIf
x3=(CentreX)+ Sin((angle3 + i* pas*10 ) * 0.0174533) * amplitude3
LineXY(x3+Sin((angle3 + i* pas*3 ) * 0.0174533) * amplitude3 ,Y3,x+500+Sin((angle3 + i* pas*5 ) * 0.0174533) * amplitude3 ,Y3,coul)
Next Y3
angle3=angle3 + Vitesse
; ********************************************************************************
For y1= 0 To 100 ; on va ré afficher nos 101 lignes mais en les positionant par rapport a une sinuzoide :=
DrawingFont(FontID(#font2))
angle1=angle1+1 :If angle1=360*10: angle1=0 :EndIf
x1+(Sin(angle1*2*#PI/50)*amplitude1) ; le X varie en fonction de Sin()
DrawImage( ImageID(y1), x1+y1, y1,Width,1)
Next y1 ; voila voila !! :D
;--------------- simulateur d'antenne cassée --------------------
recep +20 ;pas de la figne de synchro
If recep>Height-4 ;il elle est en bas
recep =2 ;on la remet en haut
EndIf
LineXY(0,recep,Width,recep,RGB(110,110,110)) ;lignes synchro
LineXY(0,recep-1,Width,recep-1,RGB(90,90,90))
LineXY(0,recep+1,Width,recep+1,RGB(90,90,90))
LineXY(0,recep-2,Width,recep-2,RGB(70,70,70))
LineXY(0,recep+2,Width,recep+3,RGB(70,70,70))
hh=Width-100
vv=Height-200 ; determine la bande du 16/9 eme
For etoile =0 To 10000 ;nombre de fourmis
etx=Random(hh)+50 ;position aleatoire des fourmis en coordonné x
ety=Random(vv)+100 ;position aleatoire des fourmis en coordonné y
cr=Random(255)+100
cv=Random(255)+100
cb=Random(255)+100
Plot (etx,ety,RGB(r,v,b)) ;plusieur "plot" pour donner du relief a la foumis
Plot (etx+1,ety,RGB(cr-20,cv-20,cb-20))
Plot (etx-1,ety,RGB(cr-20,cv-20,cb-20))
Plot (etx,ety+1,RGB(cr-20,cv-20,cb-20))
Plot (etx,ety-1,RGB(cr-20,cv-20,cb-20))
Plot (etx+1,ety+1,RGB(cr-100,cv-100,cb-100))
Plot (etx-1,ety-1,RGB(cr-100,cv-100,cb-100))
Plot (etx-1,ety+1,RGB(cr-100,cv-100,cb-100))
Plot (etx+1,ety-1,RGB(cr-100,cv-100,cb-100))
Next
LineXY(0,ety,Width,ety,RGB(150,150,150)) ;ligne horizontal parasite
LineXY(0,ety-1,Width,ety-1,RGB(120,120,120))
LineXY(0,ety+1,Width,ety+1,RGB(120,120,120))
;--------- fin du simulateur d antenne cassée ------------------
DrawText((Width/2 - TextWidth(Rien$)/2)+a, (Height/2 - TextHeight(Rien$)/2)+b, "BERNARD 13", $FFFFFF, $000000) ; Dessine
a+depx ;on deplace la position du texte sur l horizontal
b+depy ;on deplace la position du texte sur la vertical
If (Width/2 - TextWidth(Rien$)/2)+a>Width-TextWidth(Rien$) ;si le texte depasse la largeure de l' écran
depx=-depx ;on inverse le pas horizontal en négatif
EndIf
If (Width/2 - TextWidth(Rien$)/2)+a<0 ;si le texte depasse a gauche de l' écran
depx=-depx ;on inverse le pas horizontal en positif
EndIf
If (Height/2 - TextHeight(Rien$)/2)+b>Height-TextHeight(Rien$);si le texte depasse la hauteur de l' écran
depy=-depy ;on inverse le pas vertical en negatif
EndIf
If (Height/2 - TextHeight(Rien$)/2)+b<0 ;si le texte depasse en base de l' écran
depy=-depy ;on inverse le pas vertical en positif
EndIf
;------------- routine boulles en rotation ---------
rot.f+0.1
For colon= 0 To 8 ;nombre de ligne de boulles en rotation!! ou collone pitain je sais plus
For ligne =0 To 8 ;nombre de collone de boulles en rotation!! ou ligne repitain je sais pas
posx=(colon*50)-200 ; pfff ca me gonffle les comment...
posy=(ligne*50)-300
ix=Cos(rot) * posx - Sin(rot) * posy
iy=Sin(rot) * posx + Cos(rot) * posy
iz1=Sin(rot) * iy + Cos(rot) * 100
cix=1000*ix/(1000-iz1)
ciy=1000*(Cos(rot) * iy - Sin(rot) * 100)/(1000-iz1)
Circle(cix+100+Width/2,ciy+ 100+Height/2, 20 ,RGB(150,50,50))
Circle(cix+102+Width/2,ciy+ 98+Height/2, 16 ,RGB(170,70,70))
Circle(cix+104+Width/2,ciy+ 96+Height/2, 12 ,RGB(190,90,90))
Circle(cix+107+Width/2,ciy+ 92+Height/2, 4 ,RGB(250,250,250))
Next ligne
Next colon
;-------------- fin boulles en rotation --------
;-------------bebut spectre------------
avx+passsx*veroux
avy+passsy*verouy
yyex=yex*veroux
yyey=yey*verouy
varix=Random(100)
variy=Random(100)
varix1=Random(100)
variy1=Random(100)
varix2=Random(100)
variy2=Random(100)
If avx>Width-150 Or avx<0 Or varix=50
passsx=-passsx
veroux=1
verouy=0
yex=-yex
EndIf
If avy>Height-150 Or avy<0 Or variy=50
passsy=-passsy
veroux=0
verouy=1
yey=-yey
EndIf
avx0=avx
avy0=avy
yyex0=yyex
yyey0=yyey
coul=$0000FF
Gosub spectre
avx1+passsx1*veroux1
avy1+passsy1*verouy1
yyex1=yex1*veroux1
yyey1=yey1*verouy1
If avx1>Width-150 Or avx1<0 Or varix1=50
passsx1=-passsx1
veroux1=1
verouy1=0
yex1=-yex1
EndIf
If avy1>Height-150 Or avy1<0 Or variy1=50
passsy1=-passsy1
veroux1=0
verouy1=1
yey1=-yey1
EndIf
avx0=avx1
avy0=avy1
yyex0=yyex1
yyey0=yyey1
coul=$FF0000
Gosub spectre
avx2+passsx2*veroux2
avy2+passsy2*verouy2
yyex2=yex2*veroux2
yyey2=yey2*verouy2
If avx2>Width-150 Or avx2<0 Or varix2=50
passsx2=-passsx2
veroux2=1
verouy2=0
yex2=-yex2
EndIf
If avy2>Height-150 Or avy2<0 Or variy2=50
passsy2=-passsy2
veroux2=0
verouy2=1
yey2=-yey2
EndIf
avx0=avx2
avy0=avy2
yyex0=yyex2
yyey0=yyey2
coul=$00FF00
Gosub spectre
;--------------fin spetcre--------------
;debut pacman
Circle(100+deppac, 100, 25 ,RGB(250,255,00))
bo+bpas
deppac+5
If deppac>1300
deppac=0
EndIf
If bo>10 Or bo<0
bpas=-bpas
EndIf
If bo=0
bo1=0: bo2=0: bo3=0: bo4=0: bo5=0: bo6=0: bo7=0: bo8=0: bo9=0: bo10=0
EndIf
If bo=1
bo1=1: bo2=0: bo3=0: bo4=0: bo5=0: bo6=0: bo7=0: bo8=0: bo9=0: bo10=0
EndIf
If bo=2
bo1=1: bo2=1: bo3=0: bo4=0: bo5=0: bo6=0: bo7=0: bo8=0: bo9=0: bo10=0
EndIf
If bo=3
bo1=1: bo2=1: bo3=1: bo4=0: bo5=0: bo6=0: bo7=0: bo8=0: bo9=0: bo10=0
EndIf
If bo=4
bo1=1: bo2=1: bo3=1: bo4=1: bo5=0: bo6=0: bo7=0: bo8=0: bo9=0: bo10=0
EndIf
If bo=5
bo1=1: bo2=1: bo3=1: bo4=1: bo5=1: bo6=0: bo7=0: bo8=0: bo9=0: bo10=0
EndIf
If bo=6
bo1=1: bo2=1: bo3=1: bo4=1: bo5=1: bo6=1: bo7=0: bo8=0: bo9=0: bo10=0
EndIf
If bo=7
bo1=1: bo2=1: bo3=1: bo4=1: bo5=1 :bo6=1: bo7=1: bo8=0: bo9=0: bo10=0
EndIf
If bo=8
bo1=1: bo2=1: bo3=1: bo4=1: bo5=1: bo6=1: bo7=1: bo8=1: bo9=0: bo10=0
EndIf
If bo=9
bo1=1: bo2=1: bo3=1: bo4=1: bo5=1: bo6=1: bo7=1: bo8=1: bo9=1: bo10=0
EndIf
If bo=10
bo1=1: bo2=1: bo3=1: bo4=1: bo5=1: bo6=1: bo7=1: bo8=1: bo9=1: bo10=0
EndIf
LineXY(100*bo1+deppac,100*bo1,125*bo1+deppac,100*bo1,RGB(0,0,0))
LineXY(100*bo1+deppac,100*bo1,125*bo1+deppac,101*bo1,RGB(0,0,0))
LineXY(100*bo2+deppac,100*bo2,125*bo2+deppac,99*bo2,RGB(0,0,0))
LineXY(100*bo2+deppac,100*bo2,125*bo2+deppac,102*bo2,RGB(0,0,0))
LineXY(100*bo3+deppac,100*bo3,125*bo3+deppac,98*bo3,RGB(0,0,0))
LineXY(100*bo3+deppac,100*bo3,125*bo3+deppac,103*bo3,RGB(0,0,0))
LineXY(100*bo4+deppac,100*bo4,125*bo4+deppac,97*bo4,RGB(0,0,0))
LineXY(100*bo4+deppac,100*bo4,125*bo4+deppac,104*bo4,RGB(0,0,0))
LineXY(100*bo5+deppac,100*bo5,125*bo5+deppac,96*bo5,RGB(0,0,0))
LineXY(100*bo5+deppac,100*bo5,125*bo5+deppac,105*bo5,RGB(0,0,0))
LineXY(100*bo6+deppac,100*bo6,125*bo6+deppac,95*bo6,RGB(0,0,0))
LineXY(100*bo6+deppac,100*bo6,125*bo6+deppac,106*bo6,RGB(0,0,0))
LineXY(100*bo7+deppac,100*bo7,125*bo7+deppac,94*bo7,RGB(0,0,0))
LineXY(100*bo7+deppac,100*bo7,125*bo7+deppac,107*bo7,RGB(0,0,0))
LineXY(100*bo8+deppac,100*bo8,125*bo8+deppac,93*bo8,RGB(0,0,0))
LineXY(100*bo8+deppac,100*bo8,125*bo8+deppac,108*bo8,RGB(0,0,0))
LineXY(100*bo9+deppac,100*bo9,125*bo9+deppac,92*bo9,RGB(0,0,0))
LineXY(100*bo9+deppac,100*bo9,125*bo9+deppac,109*bo9,RGB(0,0,0))
LineXY(100*bo10+deppac,100*bo10,125*bo10+deppac,91*bo10,RGB(0,0,0))
LineXY(100*bo10+deppac,100*bo10,125*bo10+deppac,110*bo10,RGB(0,0,0))
;fin pacman
;Moi RV et mon pixel blanc
Plot(10,10,RGB(255,255,255)) ; un point aux coordonnées 10,10 (coin en haut a gauche) de couleur rgb(255,255,255) blanc donc
StopDrawing() ; C'est fini
; on va tester si le sprite va sortir de l'ecran
; et fabriquer un rebond par inversion de la coordonée au cas ou ...
x_sprite=x_sprite + xsprite_pas ; on lance l'animation de la coordonées X
y_sprite=y_sprite + ysprite_pas ; on lance l'animation de la coordonées Y
; on test les sorties d'ecran
If x_sprite>Width-32 Or x_sprite<0 ; si la coordonée X du sprite est superieur a la largeur de l'ecran (sortie a droite) ou plus petit que zero (sortie a gauche)
; le "-32" sert a ce que la detection de la sortie se fasse a droite du Sprite
xsprite_pas=-xsprite_pas ; on inverse le sens des x , ce qui aura pour consequence de faire aller le Sprite dans l'autre sens des X
EndIf
If y_sprite>Height-32 Or y_sprite<0 ; si la coordonée Y du sprite est superieur a la lhauteur de l'ecran (sortie en bas) ou plus petit que zero (sortie en haut)
; le "-32" sert a ce que la detection de la sortie se fasse au dessous du Sprite
ysprite_pas=-ysprite_pas ; on inverse le sens des Y , ce qui aura pour consequence de faire aller le Sprite dans l'autre sens des Y
EndIf
DisplayTransparentSprite(#sprite,x_sprite,y_sprite) ; on affiche le Sprite aux coordonées
son=Random(1000)+500
text.s="petite demo pour Bernard 13"
xt=xt+2 :If xt>Width:xt=-500:EndIf ; le text arrive a droite ? on le remet a gauche !!
yt=Height-125 ; emplacement verticale de la sinuzoide
Ondulation(xt,yt,text.s,cr,cv,cb) ; appel de la procedure a OLIV on donne les coordonées que l'on veux, le text, et la couleur
FlipBuffers() ; Inverse les buffers
ClearScreen(0) ; Efface l'écran
Until KeyboardPushed(#PB_Key_Escape) ; On s'en va!!!
mciSendString_("CLOSE MIDI",0,0,0)
EndIf
EndIf
End ; Adios!
spectre:
Circle(100+avx0, 100+avy0, 20 ,coul)
Box(80+avx0,100+avy0, 40, 25 ,coul)
Circle(88+avx0, 122+avy0, 3 ,RGB(0,0,0))
Circle(100+avx0, 122+avy0, 3 ,RGB(0,0,0))
Circle(112+avx0, 122+avy0, 3 ,RGB(0,0,0))
Box(85+avx0,122+avy0, 6, 3,RGB(0,0,0))
Box(97+avx0,122+avy0, 6, 3,RGB(0,0,0))
Box(109+avx0,122+avy0, 6, 3,RGB(0,0,0))
Circle(108+avx0, 95+avy0, 5 ,RGB(255,255,255))
Circle(94+avx0, 95+avy0, 5 ,RGB(255,255,255))
Circle(108+avx0+yyex0, 95+avy0+yyey0, 3 ,RGB(0,0,0))
Circle(94+avx0+yyex0, 95+avy0+yyey0, 3 ,RGB(0,0,0))
Return
Procedure Ondulation(x,Y,Texte.s,r,v,b)
; procedure realisé par OLIV
StartDrawing ( ScreenOutput ()) ; Pour pouvoir utiliser les commandes des dessin 2D.
DrawingFont ( FontID ( #font )) ; On change la police
DrawingMode (1) ; On selectionne le mode pour ne pas avoir de fond derrière les lettres.
FrontColor ( RGB (r,v,b) ) ; On change la couleur.
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
DrawText (x+posx, Y+posy,Lettre)
posx + TextWidth (Lettre)
Next
StopDrawing () ; On signife que l'on arrête les fonctions dessin 2D.
EndProcedure
DataSection
Couleur :
Data.l $13, $30, $50, $70, $8E, $AE, $CF, $EC
Data.l $FF, $EB, $CF, $AF, $8E, $71, $50, $30
Data.l $0, $30914, $61632, $92454, $D3373, $104193, $144FB5, $185CD2
Data.l $1A65E7, $185CD2, $144FB4, $114193, $D3373, $A2554, $51632, $30A15
Data.l $1D2D, $314B, $4569, $5785, $6BA3, $7EC1, $90DC, $9CEE
Data.l $90DB, $7FC2, $6BA3, $5785, $4569, $314B, $1D2C, $D12
Data.l $62518, $B3E27, $F5837, $136F46, $178755, $1CA165, $1FB673, $22C67D
Data.l $20B773, $1CA166, $178755, $136F46, $F5837, $B3F28, $62518, $30F0A
Data.l $152516, $233E25, $315735, $3F6D43, $4D8652, $5B9F62, $67B56F, $70C478
Data.l $67B56E, $5BA062, $4D8752, $3E6D43, $325635, $243E26, $152417, $80F0A
Data.l $152209, $24390F, $324F15, $3F651A, $4E7C20, $5C9226, $69A62C, $72B42F
Data.l $69A62C, $5C9226, $4E7C20, $40641A, $324F15, $24390E, $152209, $90E04
Data.l $22230B, $393A13, $50511A, $666621, $7C7E29, $939631, $A7AA38, $B5B83C
Data.l $A7AA37, $939631, $7C7E2A, $656621, $50521B, $393A13, $22230B, $E0E05
Data.l $423411, $5E4919, $785D1F, $927226, $AD872D, $C89C34, $DFAE3B, $EFBB3F
Data.l $DEAE3B, $C79C34, $AD872D, $927227, $785D1F, $5D4A18, $423412, $271E0A
Data.l $251A12, $3E2C1E, $573C2A, $6E4D35, $875F41, $A0704D, $B68058, $C58A5F
Data.l $B58057, $A0704D, $875F41, $6E4D35, $573D29, $3E2B1E, $251A12, $F0A07
Data.l $211513, $372321, $4E302D, $633D39, $784C46, $8F5953, $A3665F, $B06E66
Data.l $A3655E, $8F5A53, $794B46, $623D39, $4E312D, $372220, $211514, $D0808
Data.l $C0609, $1D0F14, $311921, $44232F, $562C3B, $693649, $7D4056, $8E4961
Data.l $9A4F6A, $8E4962, $7D4056, $693648, $562C3B, $44232F, $311921, $1D0F14
Data.l $1D101B, $311B2D, $44263F, $573050, $6B3B62, $7E4673, $8F4F83, $9B568E
Data.l $8F5083, $7E4673, $6A3B61, $573050, $45263E, $301B2D, $1D101A, $C070B
Data.l $C0912, $1E142C, $31214A, $452F69, $583C84, $6D49A3, $8157C0, $9262DA
Data.l $9E6BED, $9262DB, $8157C0, $6D4AA2, $583C85, $462F69, $32224B, $1E152C
Data.l $211D42, $2E2A5D, $3B3676, $484190, $564EAB, $635AC5, $6E63DC, $766BEC
Data.l $6E64DC, $6259C6, $554EAB, $48418F, $3B3676, $2F2A5C, $211D41, $141227
Data.l $18003F, $220058, $2C0070, $350089, $3F00A3, $4900BD, $5100D2, $5700E1
Data.l $5100D1, $4800BC, $3F00A3, $350089, $2C0070, $220059, $18003E, $E0025
Data.l $23003E, $320059, $3F0071, $4D008A, $5C00A3, $6A00BD, $7600D3, $7F00E2
Data.l $7700D2, $6A00BD, $5C00A4, $4D0089, $400071, $320058, $23003F, $150025
Data.l $220029, $310039, $3E0049, $4B0059, $59006A, $66007A, $720088, $7B0092
Data.l $730088, $67007A, $59006A, $4A0059, $3E0049, $300039, $220028, $140018
Data.l $22031C, $310328, $3D0433, $4B053E, $59064A, $670755, $73085F, $7B0966
Data.l $73085F, $670855, $590649, $4A053E, $3D0433, $300428, $22021C, $140111
Data.l $220511, $300718, $3E081E, $4A0B25, $590D2C, $670E33, $721038, $7B113D
Data.l $721039, $670E33, $590C2C, $4A0A25, $3E091F, $300718, $220510, $14030A
Data.l $29130E, $3A1B13, $4B2219, $5A291F, $6C3125, $7C382A, $8B3E2F, $954332
Data.l $8B3F2F, $7C382A, $6C3025, $5A291E, $4A2219, $3B1A14, $2A130E, $190B08
Data.l $E0800, $221400, $382100, $4F2F00, $643B00, $7A4800, $915500, $A56100
Data.l $B36900, $A56000, $925600, $7B4800, $643B00, $4F2F00, $382100, $221300
Data.l $120D00, $2C2100, $4A3800, $684E00, $836300, $A17A00, $BF9000, $D9A400
Data.l $EBB200, $D9A400, $BF9100, $A17A00, $836400, $684E00, $4A3900, $2C2200
Data.l $D0D00, $1D1F00, $323400, $464900, $595C00, $6C7100, $808500, $929700
Data.l $9EA400, $919700, $808600, $6C7100, $585B00, $464800, $323300, $1E1F00
Data.l $1B2C00, $273E00, $314F00, $3B6000, $477300, $528500, $5C9400, $629F00
Data.l $5B9400, $518500, $477300, $3C6100, $315000, $263E00, $1B2C00, $101A00
Data.l $50E00, $B2100, $133700, $1A4D00, $216200, $287800, $308F00, $36A200
Data.l $3BB000, $37A200, $308E00, $297900, $216200, $1A4E00, $133800, $B2100
Data.l $93722, $D4D31, $11633F, $15794C, $198F5A, $1DA669, $20B975, $22C67D
Data.l $20B975, $1CA568, $18905B, $15784C, $11633E, $D4E30, $93723, $62114
Data.l $4344, $5F62, $7A7D, $9497, $B0B4, $CCD0, $E3E8, $F4F9
Data.l $E3E8, $CCD0, $B1B5, $9597, $7A7D, $6062, $4344, $2829
Data.l $2B42, $3E5E, $4E77, $5F90, $71AC, $82C7, $91DD, $9CEE
Data.l $92DE, $83C7, $71AD, $5F91, $4E77, $3D5D, $2B41, $1A27
Data.l $20812, $4132C, $81F48, $B2C66, $F3881, $12469E, $1552BC, $185DD5
Data.l $1A65E7, $185DD5, $1552BB, $12459F, $F3881, $B2D66, $82049, $5132C
Data.l $40011, $8002A, $D0046, $120063, $17007C, $1C0099, $2200B5, $2600CE
Data.l $2900DF, $2500CE, $2100B5, $1C0099, $17007C, $120063, $D0046, $80029
EndDataSection
Profite s'en pour ajouter EnableExplicit et lancer le programme avec le débogueurDobro a écrit :j'essaie de mettre un peu d'orde la dedans
houla , ben un autre jour heincomtois a écrit :Profite s'en pour ajouter EnableExplicit et lancer le programme avec le débogueurDobro a écrit :j'essaie de mettre un peu d'orde la dedans
Code : Tout sélectionner
Structure oliv
angle.f
long_text_bas.l
xt.l
yt.l
text.s
cr.w
cv.w
cb.w
EndStructure
Global Dim oliv.oliv(1)
Declare Ondulation(x,Y,Texte.s,r,v,b)
; ***** variables a OLIV *********
; Variables
#HauteurSin = 25 ; Coef qui joue sur la hauteur de la sinusoide
#LargeurSin = 50 ; Coef qui joue sur la largeur de la sinusoide
#VitesseAngle = 1 * #PI / 50 ; vitesse de modification de l'angle de départ du texte
#Vitesse = 50 ; Temps du Delay() qui ralentit/augmente l'animation.
#font =1
#font2=2
; ****************************************
Structure dobro_fumee
angle.l
amplitude.f
Texte.s
pas.f
i.f
Vitesse.f
a.f
artichaut.f
artison.f
ss.f
coul.w
x.l
EndStructure
Dim dobro_fumee.dobro_fumee(1)
;************************** raster fumee palette ****************************
Global Dim palette.l(500)
For i = 0 To 500
angle88 = angle88 + ((2 * #PI) / 500)
palette(i) = RGB (Abs (Cos (angle88+ (4*#PI/6))* 255),Abs (Cos (angle88 + #PI/3)* 255), Abs (Cos (angle88)* 255))
Next
dobro_fumee(1)\Vitesse.f = 8.2 ;donne scrolling vert ou hori suivant
dobro_fumee(1)\amplitude.f =120 ; profondeur des dents
dobro_fumee(1)\pas.f = 0.3 ; nombre de dent de scie
dobro_fumee(1)\ss.f=5
; ******************************************************
Structure dobro_titre
angle.l
x.l
amplitude.l
EndStructure
Dim dobro_titre.dobro_titre(1)
dobro_titre(1)\angle=0
dobro_titre(1)\amplitude=2
dobro_titre(1)\x=0
Structure balle_bleue
x.l
Y.l
xpas.l
ypas.l
EndStructure
Dim balle_bleue. balle_bleue(1)
; **************************** Raster a Comtois **************************
;-Préparation Raster
Structure s_Raster
CentreX.l
CentreY.l
Vitesse.f
angle.f
amplitude.l
pas.f
Fond.l
Sprite.l[30]
EndStructure
Structure s_Texte
Texte.s
depx.l
depy.l
x.l
Y.l
mx.l
my.l
EndStructure
; ****************************************************************
Global angle1,amplitude
Global amplitude1=2
Texte.s="PUREBASIC 4.10"
Buffer$=Space(128)
mciSendString_("open 5.MID type sequencer alias mid",Buffer$,128,0)
mciSendString_("play mid",0,0,0)
InitSprite() ; Initialise les sprites
InitKeyboard() ; Initialise le clavier
LoadFont ( #font , "Arial" ,40)
LoadFont(#font2, "arial", 20 ,#PB_Font_Italic )
#sprite_balle_bleue=1 ; on donne un numero au sprite
#sprite_raster=1000
#sprite_tonton=2000
depx=4 ; deplacement horizontal
depy=4 ; deplacement vertical
etx=0
ety=0
passsx=5
passsy=5
yex=2
yey=2
passsx1=6
passsy1=6
yex1=2
yey1=2
passsx2=2
passsy2=2
yex2=2
yey2=2
bpas=1
If ExamineDesktops() ; Liste les bureaux
Width = DesktopWidth(0) ; Largeur actuelle
Height = DesktopHeight(0) ; Hauteur actuelle
Depth = DesktopDepth(0) ; Profondeur de couleurs actuelle
CentreX=Width/2
Rien$ = "BERNARD 13" ; Titre de l'application à B13
; *********** Creation de la balle Bleue **************************
;- creation balle bleue
If OpenScreen(Width, Height, Depth, "Intro") ; Ouvre l'écran
CreateSprite(#sprite_balle_bleue,32,32) ; on cree un sprite de 32 par 32
StartDrawing(SpriteOutput(#sprite_balle_bleue)) ; on va dessiner dedans !!
Circle(16,16,16,RGB(0,0,255)) ; un rond bleu
StopDrawing() ; voila notre sprite est pret !! :D
; on va pouvoir l'apeler par son nom !! (#sprite)
balle_bleue(1)\xpas=10 ; ceci va determiner le sens du sprite pour les X et sa vitesse de deplacement
balle_bleue(1)\ypas=10; ceci va determiner le sens du sprite pour les Y et sa vitesse de deplacement
; **********************************************************
;-creation boules a Tonton
; ************ creation d'un boule pour les boules a tonton *****************
CreateSprite(#sprite_tonton,64,64) ; on cree un sprite de 32 par 32
StartDrawing(SpriteOutput(#sprite_tonton)) ; on va dessiner dedans !!
Circle(32,32, 20 ,RGB(150,50,50))
Circle(32,32, 16 ,RGB(170,70,70))
Circle(32,32, 12 ,RGB(190,90,90))
Circle(32,32, 4 ,RGB(250,250,250))
StopDrawing() ; voila notre sprite est pret !! :D
; *******************************************************
;- creation image pour le titre
; *********** Creation de l'image pour le titre **************************
CreateImage(100, 250, 100) ; on cree un image
StartDrawing( ImageOutput(100)) ; on va dessiner dans une image reperé "100"
FrontColor(RGB($0,$FF,$FF)) ; couleur d'ecriture
BackColor(RGB(0, 0, 0)) ; couleur de fons
DrawingFont(FontID(#font2))
DrawingMode(1)
DrawText(0,0,Texte.s) ; on ecrit "PUREBASIC 4.10" dedans notre image
StopDrawing()
; ceci va lire l'image ligne par ligne et recreer autant d'image qu'il y a de ligne !!
For t=0 To 100
GrabImage(100, t, 0, t, 250,1) ; voila on prend un ligne et on en fait une image d'une ligne de large 1 pixel de haut
Next t ; on a un bon stock de ligne la :D 101 pour etre exact :)
; ******************************************************************
;- préparation Raster a Comtois
; ****************** Raster a Comtois **********************
Declare DeplaceTexte(*T.s_Texte)
Global Raster.s_Raster
Define.s_Texte TexteRaster
With TexteRaster
\Texte = "Comtois"
\depx = 2
\depy = 2
\x = Width/2
\Y = Height/2
\mx = Width
\my = Height
EndWith
Raster\Fond = CreateSprite(#PB_Any,480,480)
StartDrawing(SpriteOutput(Raster\Fond))
For l=0 To 479
Restore Couleur
For i = 0 To 479
Read coul
Plot(l,i,coul)
Next i
Next l
StopDrawing()
With Raster
UseBuffer(\Fond)
For i = 0 To 29
\Sprite[i] = GrabSprite(#PB_Any, i * 8, i* 16, 240 - i * 8, 16)
Next
UseBuffer(-1)
FreeSprite(\Fond)
\CentreX = (Width - SpriteWidth(\Sprite[0])) / 2
\CentreY = (Height - SpriteHeight(\Sprite[0])) / 2
\Vitesse = 6
\angle = 0
\amplitude = 120
\pas = 3.8
EndWith
; ***************************************************
Repeat ; Boucle
ExamineKeyboard() ; Scanne l'état du clavier
StartDrawing(ScreenOutput()) ; Démarre le dessin dans le buffer
angle5 + Vitesse5
;-affiche Fumee
; ************************ Raster Fumée arriere plan :D ***********************************
dobro_fumee(1)\artichaut = dobro_fumee(1)\artichaut+Cos( 36)/10
dobro_fumee(1)\artison =dobro_fumee(1)\artison+Sin( 36)
dobro_fumee(1)\a = Sin (( dobro_fumee(1)\x + dobro_fumee(1)\artichaut)/(500 + Sin (dobro_fumee(1)\x/100)*100)) * 75 + 75
For Y=1 To Height-1
dobro_fumee(1)\artichaut = Cos ((Y + dobro_fumee(1)\artison)/(300 + Cos (Y/100)*100)) * 75 + 75
dobro_fumee(1)\coul = dobro_fumee(1)\a + dobro_fumee(1)\artichaut
If dobro_fumee(1)\coul > 500
dobro_fumee(1)\coul =dobro_fumee(1)\coul -500
EndIf
dobro_fumee(1)\coul =palette (dobro_fumee(1)\coul)
dobro_fumee(1)\i=Y
dobro_fumee(1)\amplitude= dobro_fumee(1)\amplitude+dobro_fumee(1)\ss
If dobro_fumee(1)\amplitude>120:dobro_fumee(1)\ss=-dobro_fumee(1)\ss:EndIf
If dobro_fumee(1)\amplitude<-120:dobro_fumee(1)\ss=-0.001:dobro_fumee(1)\ss=-dobro_fumee(1)\ss:EndIf
dobro_fumee(1)\x=(CentreX-200)+ Sin((dobro_fumee(1)\angle + dobro_fumee(1)\i* dobro_fumee(1)\pas*10 ) * 0.0174533) * dobro_fumee(1)\amplitude
LineXY(dobro_fumee(1)\x+Sin((dobro_fumee(1)\angle +dobro_fumee(1)\i* dobro_fumee(1)\pas*3 ) * 0.0174533) * dobro_fumee(1)\amplitude ,Y,dobro_fumee(1)\x+500+Sin((dobro_fumee(1)\angle + dobro_fumee(1)\i* dobro_fumee(1)\pas*5 ) * 0.0174533) * dobro_fumee(1)\amplitude ,Y,dobro_fumee(1)\coul)
Next Y
dobro_fumee(1)\angle=dobro_fumee(1)\angle + dobro_fumee(1)\Vitesse
; ********************************************************************************
;-affiche Titre
; ********************** Titre ************************************************
For y1= 0 To 100 ; on va ré afficher nos 101 lignes mais en les positionant par rapport a une sinuzoide :=
DrawingFont(FontID(#font2))
dobro_titre(1)\angle=dobro_titre(1)\angle+1 :If dobro_titre(1)\angle=360*10: dobro_titre(1)\angle=0 :EndIf
dobro_titre(1)\x+(Sin(dobro_titre(1)\angle*2*#PI/50)*dobro_titre(1)\amplitude) ; le X varie en fonction de Sin()
DrawImage( ImageID(y1), dobro_titre(1)\x+y1, y1,Width,1)
Next y1 ; voila voila !! :D
; ********************************************************************
;-affiche simulateur d'antenne cassée --------------------
recep +20 ;pas de la figne de synchro
If recep>Height-4 ;il elle est en bas
recep =2 ;on la remet en haut
EndIf
LineXY(0,recep,Width,recep,RGB(110,110,110)) ;lignes synchro
LineXY(0,recep-1,Width,recep-1,RGB(90,90,90))
LineXY(0,recep+1,Width,recep+1,RGB(90,90,90))
LineXY(0,recep-2,Width,recep-2,RGB(70,70,70))
LineXY(0,recep+2,Width,recep+3,RGB(70,70,70))
hh=Width-100
vv=Height-200 ; determine la bande du 16/9 eme
For etoile =0 To 10000 ;nombre de fourmis
etx=Random(hh)+50 ;position aleatoire des fourmis en coordonné x
ety=Random(vv)+100 ;position aleatoire des fourmis en coordonné y
cr=Random(255)+100
cv=Random(255)+100
cb=Random(255)+100
Plot (etx,ety,RGB(r,v,b)) ;plusieur "plot" pour donner du relief a la foumis
Plot (etx+1,ety,RGB(cr-20,cv-20,cb-20))
Plot (etx-1,ety,RGB(cr-20,cv-20,cb-20))
Plot (etx,ety+1,RGB(cr-20,cv-20,cb-20))
Plot (etx,ety-1,RGB(cr-20,cv-20,cb-20))
Plot (etx+1,ety+1,RGB(cr-100,cv-100,cb-100))
Plot (etx-1,ety-1,RGB(cr-100,cv-100,cb-100))
Plot (etx-1,ety+1,RGB(cr-100,cv-100,cb-100))
Plot (etx+1,ety-1,RGB(cr-100,cv-100,cb-100))
Next
LineXY(0,ety,Width,ety,RGB(150,150,150)) ;ligne horizontal parasite
LineXY(0,ety-1,Width,ety-1,RGB(120,120,120))
LineXY(0,ety+1,Width,ety+1,RGB(120,120,120))
;--------- fin du simulateur d antenne cassée ------------------
;-affiche le text Bernard 13
DrawText((Width/2 - TextWidth(Rien$)/2)+a, (Height/2 - TextHeight(Rien$)/2)+b, "BERNARD 13", $FFFFFF, $000000) ; Dessine
a+depx ;on deplace la position du texte sur l horizontal
b+depy ;on deplace la position du texte sur la vertical
If (Width/2 - TextWidth(Rien$)/2)+a>Width-TextWidth(Rien$) ;si le texte depasse la largeure de l' écran
depx=-depx ;on inverse le pas horizontal en négatif
EndIf
If (Width/2 - TextWidth(Rien$)/2)+a<0 ;si le texte depasse a gauche de l' écran
depx=-depx ;on inverse le pas horizontal en positif
EndIf
If (Height/2 - TextHeight(Rien$)/2)+b>Height-TextHeight(Rien$);si le texte depasse la hauteur de l' écran
depy=-depy ;on inverse le pas vertical en negatif
EndIf
If (Height/2 - TextHeight(Rien$)/2)+b<0 ;si le texte depasse en base de l' écran
depy=-depy ;on inverse le pas vertical en positif
EndIf
;-------------bebut spectre------------
avx+passsx*veroux
avy+passsy*verouy
yyex=yex*veroux
yyey=yey*verouy
varix=Random(100)
variy=Random(100)
varix1=Random(100)
variy1=Random(100)
varix2=Random(100)
variy2=Random(100)
If avx>Width-150 Or avx<0 Or varix=50
passsx=-passsx
veroux=1
verouy=0
yex=-yex
EndIf
If avy>Height-150 Or avy<0 Or variy=50
passsy=-passsy
veroux=0
verouy=1
yey=-yey
EndIf
avx0=avx
avy0=avy
yyex0=yyex
yyey0=yyey
coul=$0000FF
Gosub spectre
avx1+passsx1*veroux1
avy1+passsy1*verouy1
yyex1=yex1*veroux1
yyey1=yey1*verouy1
If avx1>Width-150 Or avx1<0 Or varix1=50
passsx1=-passsx1
veroux1=1
verouy1=0
yex1=-yex1
EndIf
If avy1>Height-150 Or avy1<0 Or variy1=50
passsy1=-passsy1
veroux1=0
verouy1=1
yey1=-yey1
EndIf
avx0=avx1
avy0=avy1
yyex0=yyex1
yyey0=yyey1
coul=$FF0000
Gosub spectre
avx2+passsx2*veroux2
avy2+passsy2*verouy2
yyex2=yex2*veroux2
yyey2=yey2*verouy2
If avx2>Width-150 Or avx2<0 Or varix2=50
passsx2=-passsx2
veroux2=1
verouy2=0
yex2=-yex2
EndIf
If avy2>Height-150 Or avy2<0 Or variy2=50
passsy2=-passsy2
veroux2=0
verouy2=1
yey2=-yey2
EndIf
avx0=avx2
avy0=avy2
yyex0=yyex2
yyey0=yyey2
coul=$00FF00
Gosub spectre
;--------------fin spetcre--------------
;debut pacman
Circle(100+deppac, 100, 25 ,RGB(250,255,00))
bo+bpas
deppac+5
If deppac>1300
deppac=0
EndIf
If bo>10 Or bo<0
bpas=-bpas
EndIf
If bo=0
bo1=0: bo2=0: bo3=0: bo4=0: bo5=0: bo6=0: bo7=0: bo8=0: bo9=0: bo10=0
EndIf
If bo=1
bo1=1: bo2=0: bo3=0: bo4=0: bo5=0: bo6=0: bo7=0: bo8=0: bo9=0: bo10=0
EndIf
If bo=2
bo1=1: bo2=1: bo3=0: bo4=0: bo5=0: bo6=0: bo7=0: bo8=0: bo9=0: bo10=0
EndIf
If bo=3
bo1=1: bo2=1: bo3=1: bo4=0: bo5=0: bo6=0: bo7=0: bo8=0: bo9=0: bo10=0
EndIf
If bo=4
bo1=1: bo2=1: bo3=1: bo4=1: bo5=0: bo6=0: bo7=0: bo8=0: bo9=0: bo10=0
EndIf
If bo=5
bo1=1: bo2=1: bo3=1: bo4=1: bo5=1: bo6=0: bo7=0: bo8=0: bo9=0: bo10=0
EndIf
If bo=6
bo1=1: bo2=1: bo3=1: bo4=1: bo5=1: bo6=1: bo7=0: bo8=0: bo9=0: bo10=0
EndIf
If bo=7
bo1=1: bo2=1: bo3=1: bo4=1: bo5=1 :bo6=1: bo7=1: bo8=0: bo9=0: bo10=0
EndIf
If bo=8
bo1=1: bo2=1: bo3=1: bo4=1: bo5=1: bo6=1: bo7=1: bo8=1: bo9=0: bo10=0
EndIf
If bo=9
bo1=1: bo2=1: bo3=1: bo4=1: bo5=1: bo6=1: bo7=1: bo8=1: bo9=1: bo10=0
EndIf
If bo=10
bo1=1: bo2=1: bo3=1: bo4=1: bo5=1: bo6=1: bo7=1: bo8=1: bo9=1: bo10=0
EndIf
LineXY(100*bo1+deppac,100*bo1,125*bo1+deppac,100*bo1,RGB(0,0,0))
LineXY(100*bo1+deppac,100*bo1,125*bo1+deppac,101*bo1,RGB(0,0,0))
LineXY(100*bo2+deppac,100*bo2,125*bo2+deppac,99*bo2,RGB(0,0,0))
LineXY(100*bo2+deppac,100*bo2,125*bo2+deppac,102*bo2,RGB(0,0,0))
LineXY(100*bo3+deppac,100*bo3,125*bo3+deppac,98*bo3,RGB(0,0,0))
LineXY(100*bo3+deppac,100*bo3,125*bo3+deppac,103*bo3,RGB(0,0,0))
LineXY(100*bo4+deppac,100*bo4,125*bo4+deppac,97*bo4,RGB(0,0,0))
LineXY(100*bo4+deppac,100*bo4,125*bo4+deppac,104*bo4,RGB(0,0,0))
LineXY(100*bo5+deppac,100*bo5,125*bo5+deppac,96*bo5,RGB(0,0,0))
LineXY(100*bo5+deppac,100*bo5,125*bo5+deppac,105*bo5,RGB(0,0,0))
LineXY(100*bo6+deppac,100*bo6,125*bo6+deppac,95*bo6,RGB(0,0,0))
LineXY(100*bo6+deppac,100*bo6,125*bo6+deppac,106*bo6,RGB(0,0,0))
LineXY(100*bo7+deppac,100*bo7,125*bo7+deppac,94*bo7,RGB(0,0,0))
LineXY(100*bo7+deppac,100*bo7,125*bo7+deppac,107*bo7,RGB(0,0,0))
LineXY(100*bo8+deppac,100*bo8,125*bo8+deppac,93*bo8,RGB(0,0,0))
LineXY(100*bo8+deppac,100*bo8,125*bo8+deppac,108*bo8,RGB(0,0,0))
LineXY(100*bo9+deppac,100*bo9,125*bo9+deppac,92*bo9,RGB(0,0,0))
LineXY(100*bo9+deppac,100*bo9,125*bo9+deppac,109*bo9,RGB(0,0,0))
LineXY(100*bo10+deppac,100*bo10,125*bo10+deppac,91*bo10,RGB(0,0,0))
LineXY(100*bo10+deppac,100*bo10,125*bo10+deppac,110*bo10,RGB(0,0,0))
;fin pacman
;Moi RV et mon pixel blanc
Plot(10,10,RGB(255,255,255)) ; un point aux coordonnées 10,10 (coin en haut a gauche) de couleur rgb(255,255,255) blanc donc
StopDrawing() ; C'est fini
; on va tester si le sprite va sortir de l'ecran
; et fabriquer un rebond par inversion de la coordonée au cas ou ...
balle_bleue(1)\x=balle_bleue(1)\x + balle_bleue(1)\xpas ; on lance l'animation de la coordonées X
balle_bleue(1)\Y=balle_bleue(1)\Y + balle_bleue(1)\ypas ; on lance l'animation de la coordonées Y
; on test les sorties d'ecran
If balle_bleue(1)\x>Width-32 Or balle_bleue(1)\x<0 ; si la coordonée X du sprite est superieur a la largeur de l'ecran (sortie a droite) ou plus petit que zero (sortie a gauche)
; le "-32" sert a ce que la detection de la sortie se fasse a droite du Sprite
balle_bleue(1)\xpas=-balle_bleue(1)\xpas ; on inverse le sens des x , ce qui aura pour consequence de faire aller le Sprite dans l'autre sens des X
EndIf
If balle_bleue(1)\Y>Height-32 Or balle_bleue(1)\Y<0 ; si la coordonée Y du sprite est superieur a la lhauteur de l'ecran (sortie en bas) ou plus petit que zero (sortie en haut)
; le "-32" sert a ce que la detection de la sortie se fasse au dessous du Sprite
balle_bleue(1)\ypas=-balle_bleue(1)\ypas ; on inverse le sens des Y , ce qui aura pour consequence de faire aller le Sprite dans l'autre sens des Y
EndIf
DisplayTransparentSprite(#sprite_balle_bleue,balle_bleue(1)\x,balle_bleue(1)\Y) ; on affiche le Sprite aux coordonées
son=Random(1000)+500
oliv(1)\text.s="petite demo pour Bernard 13"
oliv(1)\xt= oliv(1)\xt+2 :If oliv(1)\xt>Width: oliv(1)\xt=-500:EndIf ; le text arrive a droite ? on le remet a gauche !!
oliv(1)\yt=Height-125 ; emplacement verticale de la sinuzoide
oliv(1)\cr=Random(255)+100
;oliv(1)\cv=Random(255)+100
oliv(1)\cb=Random(255)+100
Ondulation( oliv(1)\xt, oliv(1)\yt, oliv(1)\text.s, oliv(1)\cr, oliv(1)\cv, oliv(1)\cb) ; appel de la procedure a OLIV on donne les coordonées que l'on veux, le text, et la couleur
;-affiche Raster
With Raster
For i = 0 To 29
DisplaySprite(\Sprite[i], 10 + i * 4, \CentreY + Sin((\angle + i * \pas * 2) * 0.0174533) * \amplitude)
DisplaySprite(\Sprite[i], Width-240 + i * 4, \CentreY + Sin((\angle + i * \pas * 2) * 0.0174533) * \amplitude)
Next i
\angle + \Vitesse
EndWith
;------------- routine boulles en rotation ---------
rot.f+0.1
For colon= 0 To 8 ;nombre de ligne de boulles en rotation!! ou collone pitain je sais plus
For ligne =0 To 8 ;nombre de collone de boulles en rotation!! ou ligne repitain je sais pas
posx=(colon*50)-200 ; pfff ca me gonffle les comment...
posy=(ligne*50)-300
ix=Cos(rot) * posx - Sin(rot) * posy
iy=Sin(rot) * posx + Cos(rot) * posy
iz1=Sin(rot) * iy + Cos(rot) * 100
cix=1000*ix/(1000-iz1)
ciy=1000*(Cos(rot) * iy - Sin(rot) * 100)/(1000-iz1)
DisplayTransparentSprite(#sprite_tonton,cix+100+Width/2,ciy+ 100+Height/2)
Next ligne
Next colon
;-------------- fin boulles en rotation --------
FlipBuffers() ; Inverse les buffers
ClearScreen(0) ; Efface l'écran
Until KeyboardPushed(#PB_Key_Escape) ; On s'en va!!!
mciSendString_("CLOSE MIDI",0,0,0)
EndIf
EndIf
End ; Adios!
spectre:
Circle(100+avx0, 100+avy0, 20 ,coul)
Box(80+avx0,100+avy0, 40, 25 ,coul)
Circle(88+avx0, 122+avy0, 3 ,RGB(0,0,0))
Circle(100+avx0, 122+avy0, 3 ,RGB(0,0,0))
Circle(112+avx0, 122+avy0, 3 ,RGB(0,0,0))
Box(85+avx0,122+avy0, 6, 3,RGB(0,0,0))
Box(97+avx0,122+avy0, 6, 3,RGB(0,0,0))
Box(109+avx0,122+avy0, 6, 3,RGB(0,0,0))
Circle(108+avx0, 95+avy0, 5 ,RGB(255,255,255))
Circle(94+avx0, 95+avy0, 5 ,RGB(255,255,255))
Circle(108+avx0+yyex0, 95+avy0+yyey0, 3 ,RGB(0,0,0))
Circle(94+avx0+yyex0, 95+avy0+yyey0, 3 ,RGB(0,0,0))
Return
Procedure Ondulation(x,Y,Texte.s,r,v,b)
; procedure realisé par OLIV
StartDrawing ( ScreenOutput ()) ; Pour pouvoir utiliser les commandes des dessin 2D.
DrawingFont ( FontID ( #font )) ; On change la police
DrawingMode (1) ; On selectionne le mode pour ne pas avoir de fond derrière les lettres.
FrontColor ( RGB (r,v,b) ) ; On change la couleur.
oliv(1)\angle + #VitesseAngle ; Angle de départ de la sinusoide en radian
If oliv(1)\angle >= 2 * #PI
oliv(1)\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 ( oliv(1)\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
DrawText (x+posx, Y+posy,Lettre)
posx + TextWidth (Lettre)
Next
StopDrawing () ; On signife que l'on arrête les fonctions dessin 2D.
EndProcedure
DataSection
Couleur :
Data.l $13, $30, $50, $70, $8E, $AE, $CF, $EC
Data.l $FF, $EB, $CF, $AF, $8E, $71, $50, $30
Data.l $0, $30914, $61632, $92454, $D3373, $104193, $144FB5, $185CD2
Data.l $1A65E7, $185CD2, $144FB4, $114193, $D3373, $A2554, $51632, $30A15
Data.l $1D2D, $314B, $4569, $5785, $6BA3, $7EC1, $90DC, $9CEE
Data.l $90DB, $7FC2, $6BA3, $5785, $4569, $314B, $1D2C, $D12
Data.l $62518, $B3E27, $F5837, $136F46, $178755, $1CA165, $1FB673, $22C67D
Data.l $20B773, $1CA166, $178755, $136F46, $F5837, $B3F28, $62518, $30F0A
Data.l $152516, $233E25, $315735, $3F6D43, $4D8652, $5B9F62, $67B56F, $70C478
Data.l $67B56E, $5BA062, $4D8752, $3E6D43, $325635, $243E26, $152417, $80F0A
Data.l $152209, $24390F, $324F15, $3F651A, $4E7C20, $5C9226, $69A62C, $72B42F
Data.l $69A62C, $5C9226, $4E7C20, $40641A, $324F15, $24390E, $152209, $90E04
Data.l $22230B, $393A13, $50511A, $666621, $7C7E29, $939631, $A7AA38, $B5B83C
Data.l $A7AA37, $939631, $7C7E2A, $656621, $50521B, $393A13, $22230B, $E0E05
Data.l $423411, $5E4919, $785D1F, $927226, $AD872D, $C89C34, $DFAE3B, $EFBB3F
Data.l $DEAE3B, $C79C34, $AD872D, $927227, $785D1F, $5D4A18, $423412, $271E0A
Data.l $251A12, $3E2C1E, $573C2A, $6E4D35, $875F41, $A0704D, $B68058, $C58A5F
Data.l $B58057, $A0704D, $875F41, $6E4D35, $573D29, $3E2B1E, $251A12, $F0A07
Data.l $211513, $372321, $4E302D, $633D39, $784C46, $8F5953, $A3665F, $B06E66
Data.l $A3655E, $8F5A53, $794B46, $623D39, $4E312D, $372220, $211514, $D0808
Data.l $C0609, $1D0F14, $311921, $44232F, $562C3B, $693649, $7D4056, $8E4961
Data.l $9A4F6A, $8E4962, $7D4056, $693648, $562C3B, $44232F, $311921, $1D0F14
Data.l $1D101B, $311B2D, $44263F, $573050, $6B3B62, $7E4673, $8F4F83, $9B568E
Data.l $8F5083, $7E4673, $6A3B61, $573050, $45263E, $301B2D, $1D101A, $C070B
Data.l $C0912, $1E142C, $31214A, $452F69, $583C84, $6D49A3, $8157C0, $9262DA
Data.l $9E6BED, $9262DB, $8157C0, $6D4AA2, $583C85, $462F69, $32224B, $1E152C
Data.l $211D42, $2E2A5D, $3B3676, $484190, $564EAB, $635AC5, $6E63DC, $766BEC
Data.l $6E64DC, $6259C6, $554EAB, $48418F, $3B3676, $2F2A5C, $211D41, $141227
Data.l $18003F, $220058, $2C0070, $350089, $3F00A3, $4900BD, $5100D2, $5700E1
Data.l $5100D1, $4800BC, $3F00A3, $350089, $2C0070, $220059, $18003E, $E0025
Data.l $23003E, $320059, $3F0071, $4D008A, $5C00A3, $6A00BD, $7600D3, $7F00E2
Data.l $7700D2, $6A00BD, $5C00A4, $4D0089, $400071, $320058, $23003F, $150025
Data.l $220029, $310039, $3E0049, $4B0059, $59006A, $66007A, $720088, $7B0092
Data.l $730088, $67007A, $59006A, $4A0059, $3E0049, $300039, $220028, $140018
Data.l $22031C, $310328, $3D0433, $4B053E, $59064A, $670755, $73085F, $7B0966
Data.l $73085F, $670855, $590649, $4A053E, $3D0433, $300428, $22021C, $140111
Data.l $220511, $300718, $3E081E, $4A0B25, $590D2C, $670E33, $721038, $7B113D
Data.l $721039, $670E33, $590C2C, $4A0A25, $3E091F, $300718, $220510, $14030A
Data.l $29130E, $3A1B13, $4B2219, $5A291F, $6C3125, $7C382A, $8B3E2F, $954332
Data.l $8B3F2F, $7C382A, $6C3025, $5A291E, $4A2219, $3B1A14, $2A130E, $190B08
Data.l $E0800, $221400, $382100, $4F2F00, $643B00, $7A4800, $915500, $A56100
Data.l $B36900, $A56000, $925600, $7B4800, $643B00, $4F2F00, $382100, $221300
Data.l $120D00, $2C2100, $4A3800, $684E00, $836300, $A17A00, $BF9000, $D9A400
Data.l $EBB200, $D9A400, $BF9100, $A17A00, $836400, $684E00, $4A3900, $2C2200
Data.l $D0D00, $1D1F00, $323400, $464900, $595C00, $6C7100, $808500, $929700
Data.l $9EA400, $919700, $808600, $6C7100, $585B00, $464800, $323300, $1E1F00
Data.l $1B2C00, $273E00, $314F00, $3B6000, $477300, $528500, $5C9400, $629F00
Data.l $5B9400, $518500, $477300, $3C6100, $315000, $263E00, $1B2C00, $101A00
Data.l $50E00, $B2100, $133700, $1A4D00, $216200, $287800, $308F00, $36A200
Data.l $3BB000, $37A200, $308E00, $297900, $216200, $1A4E00, $133800, $B2100
Data.l $93722, $D4D31, $11633F, $15794C, $198F5A, $1DA669, $20B975, $22C67D
Data.l $20B975, $1CA568, $18905B, $15784C, $11633E, $D4E30, $93723, $62114
Data.l $4344, $5F62, $7A7D, $9497, $B0B4, $CCD0, $E3E8, $F4F9
Data.l $E3E8, $CCD0, $B1B5, $9597, $7A7D, $6062, $4344, $2829
Data.l $2B42, $3E5E, $4E77, $5F90, $71AC, $82C7, $91DD, $9CEE
Data.l $92DE, $83C7, $71AD, $5F91, $4E77, $3D5D, $2B41, $1A27
Data.l $20812, $4132C, $81F48, $B2C66, $F3881, $12469E, $1552BC, $185DD5
Data.l $1A65E7, $185DD5, $1552BB, $12459F, $F3881, $B2D66, $82049, $5132C
Data.l $40011, $8002A, $D0046, $120063, $17007C, $1C0099, $2200B5, $2600CE
Data.l $2900DF, $2500CE, $2100B5, $1C0099, $17007C, $120063, $D0046, $80029
EndDataSection
Code : Tout sélectionner
Structure oliv
angle.f
long_text_bas.l
xt.l
yt.l
text.s
cr.w
cv.w
cb.w
EndStructure
Global Dim oliv.oliv(1)
Declare Ondulation(x,Y,Texte.s,r,v,b)
; ***** variables a OLIV *********
; Variables
#HauteurSin = 25 ; Coef qui joue sur la hauteur de la sinusoide
#LargeurSin = 50 ; Coef qui joue sur la largeur de la sinusoide
#VitesseAngle = 1 * #PI / 50 ; vitesse de modification de l'angle de départ du texte
#Vitesse = 50 ; Temps du Delay() qui ralentit/augmente l'animation.
#font =1
#font2=2
; ****************************************
Structure dobro_fumee
angle.l
amplitude.f
Texte.s
pas.f
i.f
Vitesse.f
a.f
artichaut.f
artison.f
ss.f
coul.w
x.l
EndStructure
Dim dobro_fumee.dobro_fumee(1)
;************************** raster fumee palette ****************************
Global Dim palette.l(500)
For i = 0 To 500
angle88 = angle88 + ((2 * #PI) / 500)
palette(i) = RGB (Abs (Cos (angle88+ (4*#PI/6))* 255),Abs (Cos (angle88 + #PI/3)* 255), Abs (Cos (angle88)* 255))
Next
dobro_fumee(1)\Vitesse.f = 8.2 ;donne scrolling vert ou hori suivant
dobro_fumee(1)\amplitude.f =120 ; profondeur des dents
dobro_fumee(1)\pas.f = 0.3 ; nombre de dent de scie
dobro_fumee(1)\ss.f=5
; ******************************************************
Structure dobro_titre
angle.l
x.l
amplitude.l
EndStructure
Dim dobro_titre.dobro_titre(1)
dobro_titre(1)\angle=0
dobro_titre(1)\amplitude=2
dobro_titre(1)\x=0
Structure balle_bleue
x.l
Y.l
xpas.l
ypas.l
EndStructure
Dim balle_bleue. balle_bleue(1)
; **************************** Raster a Comtois **************************
;-Préparation Raster
Structure s_Raster
CentreX.l
CentreY.l
Vitesse.f
angle.f
amplitude.l
pas.f
Fond.l
Sprite.l[30]
EndStructure
Structure s_Texte
Texte.s
depx.l
depy.l
x.l
Y.l
mx.l
my.l
EndStructure
; ****************************************************************
Global angle1,amplitude
Global amplitude1=2
Texte.s="PUREBASIC 4.10"
Buffer$=Space(128)
mciSendString_("open 5.MID type sequencer alias mid",Buffer$,128,0)
mciSendString_("play mid",0,0,0)
InitSprite() ; Initialise les sprites
InitKeyboard() ; Initialise le clavier
LoadFont ( #font , "Arial" ,40)
LoadFont(#font2, "arial", 20 ,#PB_Font_Italic )
#sprite_balle_bleue=1 ; on donne un numero au sprite
#sprite_raster=1000
#sprite_tonton=2000
depx=4 ; deplacement horizontal
depy=4 ; deplacement vertical
etx=0
ety=0
passsx=5
passsy=5
yex=2
yey=2
passsx1=6
passsy1=6
yex1=2
yey1=2
passsx2=2
passsy2=2
yex2=2
yey2=2
bpas=1
rotm.f
depmx.f
depmy.f
depmx1.f
depmy1.f
acc.f=0
depmx=200
depmy=200
If ExamineDesktops() ; Liste les bureaux
Width = DesktopWidth(0) ; Largeur actuelle
Height = DesktopHeight(0) ; Hauteur actuelle
Depth = DesktopDepth(0) ; Profondeur de couleurs actuelle
CentreX=Width/2
Rien$ = "BERNARD 13" ; Titre de l'application à B13
; *********** Creation de la balle Bleue **************************
;- creation balle bleue
If OpenScreen(Width, Height, Depth, "Intro") ; Ouvre l'écran
CreateSprite(#sprite_balle_bleue,64,64) ; on cree un sprite de 32 par 32
StartDrawing(SpriteOutput(#sprite_balle_bleue)) ; on va dessiner dedans !!
Circle(32,32,32,RGB(0,0,155)) ; un rond bleu
Circle(33,31,25,RGB(0,0,180)) ; un rond bleu
Circle(34,30,20,RGB(0,0,200)) ; un rond bleu
Circle(36,28,17,RGB(0,0,225)) ; un rond bleu
Circle(38,26,15,RGB(0,0,245)) ; un rond bleu
Circle(40,24,10,RGB(0,0,255)) ; un rond bleu
Circle(42,22,4,RGB(255,255,255)) ; un rond bleu
StopDrawing() ; voila notre sprite est pret !! :D
; on va pouvoir l'apeler par son nom !! (#sprite)
balle_bleue(1)\xpas=10 ; ceci va determiner le sens du sprite pour les X et sa vitesse de deplacement
balle_bleue(1)\ypas=10; ceci va determiner le sens du sprite pour les Y et sa vitesse de deplacement
; **********************************************************
;-creation boules a Tonton
; ************ creation d'un boule pour les boules a tonton *****************
CreateSprite(#sprite_tonton,64,64) ; on cree un sprite de 32 par 32
StartDrawing(SpriteOutput(#sprite_tonton)) ; on va dessiner dedans !!
Circle(32,32, 20 ,RGB(150,50,50))
Circle(32,32, 16 ,RGB(170,70,70))
Circle(32,32, 12 ,RGB(190,90,90))
Circle(32,32, 4 ,RGB(250,250,250))
StopDrawing() ; voila notre sprite est pret !! :D
; *******************************************************
;- creation image pour le titre
; *********** Creation de l'image pour le titre **************************
CreateImage(100, 250, 100) ; on cree un image
StartDrawing( ImageOutput(100)) ; on va dessiner dans une image reperé "100"
FrontColor(RGB($0,$FF,$FF)) ; couleur d'ecriture
BackColor(RGB(0, 0, 0)) ; couleur de fons
DrawingFont(FontID(#font2))
DrawingMode(1)
DrawText(0,0,Texte.s) ; on ecrit "PUREBASIC 4.10" dedans notre image
StopDrawing()
; ceci va lire l'image ligne par ligne et recreer autant d'image qu'il y a de ligne !!
For t=0 To 100
GrabImage(100, t, 0, t, 250,1) ; voila on prend un ligne et on en fait une image d'une ligne de large 1 pixel de haut
Next t ; on a un bon stock de ligne la :D 101 pour etre exact :)
; ******************************************************************
;- préparation Raster a Comtois
; ****************** Raster a Comtois **********************
Declare DeplaceTexte(*T.s_Texte)
Global Raster.s_Raster
Define.s_Texte TexteRaster
With TexteRaster
\Texte = "Comtois"
\depx = 2
\depy = 2
\x = Width/2
\Y = Height/2
\mx = Width
\my = Height
EndWith
Raster\Fond = CreateSprite(#PB_Any,480,480)
StartDrawing(SpriteOutput(Raster\Fond))
For l=0 To 479
Restore Couleur
For i = 0 To 479
Read coul
Plot(l,i,coul)
Next i
Next l
StopDrawing()
With Raster
UseBuffer(\Fond)
For i = 0 To 29
\Sprite[i] = GrabSprite(#PB_Any, i * 8, i* 16, 240 - i * 8, 16)
Next
UseBuffer(-1)
FreeSprite(\Fond)
\CentreX = (Width - SpriteWidth(\Sprite[0])) / 2
\CentreY = (Height - SpriteHeight(\Sprite[0])) / 2
\Vitesse = 6
\angle = 0
\amplitude = 120
\pas = 3.8
EndWith
; ***************************************************
Repeat ; Boucle
ExamineKeyboard() ; Scanne l'état du clavier
StartDrawing(ScreenOutput()) ; Démarre le dessin dans le buffer
angle5 + Vitesse5
;-affiche Fumee
; ************************ Raster Fumée arriere plan :D ***********************************
dobro_fumee(1)\artichaut = dobro_fumee(1)\artichaut+Cos( 36)/10
dobro_fumee(1)\artison =dobro_fumee(1)\artison+Sin( 36)
dobro_fumee(1)\a = Sin (( dobro_fumee(1)\x + dobro_fumee(1)\artichaut)/(500 + Sin (dobro_fumee(1)\x/100)*100)) * 75 + 75
For Y=1 To Height-1
dobro_fumee(1)\artichaut = Cos ((Y + dobro_fumee(1)\artison)/(300 + Cos (Y/100)*100)) * 75 + 75
dobro_fumee(1)\coul = dobro_fumee(1)\a + dobro_fumee(1)\artichaut
If dobro_fumee(1)\coul > 500
dobro_fumee(1)\coul =dobro_fumee(1)\coul -500
EndIf
dobro_fumee(1)\coul =palette (dobro_fumee(1)\coul)
dobro_fumee(1)\i=Y
dobro_fumee(1)\amplitude= dobro_fumee(1)\amplitude+dobro_fumee(1)\ss
If dobro_fumee(1)\amplitude>120:dobro_fumee(1)\ss=-dobro_fumee(1)\ss:EndIf
If dobro_fumee(1)\amplitude<-120:dobro_fumee(1)\ss=-0.001:dobro_fumee(1)\ss=-dobro_fumee(1)\ss:EndIf
dobro_fumee(1)\x=(CentreX-200)+ Sin((dobro_fumee(1)\angle + dobro_fumee(1)\i* dobro_fumee(1)\pas*10 ) * 0.0174533) * dobro_fumee(1)\amplitude
LineXY(dobro_fumee(1)\x+Sin((dobro_fumee(1)\angle +dobro_fumee(1)\i* dobro_fumee(1)\pas*3 ) * 0.0174533) * dobro_fumee(1)\amplitude ,Y,dobro_fumee(1)\x+500+Sin((dobro_fumee(1)\angle + dobro_fumee(1)\i* dobro_fumee(1)\pas*5 ) * 0.0174533) * dobro_fumee(1)\amplitude ,Y,dobro_fumee(1)\coul)
Next Y
dobro_fumee(1)\angle=dobro_fumee(1)\angle + dobro_fumee(1)\Vitesse
; ********************************************************************************
;-affiche Titre
; ********************** Titre ************************************************
For y1= 0 To 100 ; on va ré afficher nos 101 lignes mais en les positionant par rapport a une sinuzoide :=
DrawingFont(FontID(#font2))
dobro_titre(1)\angle=dobro_titre(1)\angle+1 :If dobro_titre(1)\angle=360*10: dobro_titre(1)\angle=0 :EndIf
dobro_titre(1)\x+(Sin(dobro_titre(1)\angle*2*#PI/50)*dobro_titre(1)\amplitude) ; le X varie en fonction de Sin()
DrawImage( ImageID(y1), dobro_titre(1)\x+y1, y1,Width,1)
Next y1 ; voila voila !! :D
; ********************************************************************
;-affiche simulateur d'antenne cassée --------------------
recep +20 ;pas de la figne de synchro
If recep>Height-4 ;il elle est en bas
recep =2 ;on la remet en haut
EndIf
LineXY(0,recep,Width,recep,RGB(110,110,110)) ;lignes synchro
LineXY(0,recep-1,Width,recep-1,RGB(90,90,90))
LineXY(0,recep+1,Width,recep+1,RGB(90,90,90))
LineXY(0,recep-2,Width,recep-2,RGB(70,70,70))
LineXY(0,recep+2,Width,recep+3,RGB(70,70,70))
hh=Width-100
vv=Height-200 ; determine la bande du 16/9 eme
For etoile =0 To 10000 ;nombre de fourmis
etx=Random(hh)+50 ;position aleatoire des fourmis en coordonné x
ety=Random(vv)+100 ;position aleatoire des fourmis en coordonné y
cr=Random(255)+100
cv=Random(255)+100
cb=Random(255)+100
Plot (etx,ety,RGB(r,v,b)) ;plusieur "plot" pour donner du relief a la foumis
Plot (etx+1,ety,RGB(cr-20,cv-20,cb-20))
Plot (etx-1,ety,RGB(cr-20,cv-20,cb-20))
Plot (etx,ety+1,RGB(cr-20,cv-20,cb-20))
Plot (etx,ety-1,RGB(cr-20,cv-20,cb-20))
Plot (etx+1,ety+1,RGB(cr-100,cv-100,cb-100))
Plot (etx-1,ety-1,RGB(cr-100,cv-100,cb-100))
Plot (etx-1,ety+1,RGB(cr-100,cv-100,cb-100))
Plot (etx+1,ety-1,RGB(cr-100,cv-100,cb-100))
Next
LineXY(0,ety,Width,ety,RGB(150,150,150)) ;ligne horizontal parasite
LineXY(0,ety-1,Width,ety-1,RGB(120,120,120))
LineXY(0,ety+1,Width,ety+1,RGB(120,120,120))
;--------- fin du simulateur d antenne cassée ------------------
;-affiche le text Bernard 13
DrawText((Width/2 - TextWidth(Rien$)/2)+a, (Height/2 - TextHeight(Rien$)/2)+b, "BERNARD 13", $FFFFFF, $000000) ; Dessine
a+depx ;on deplace la position du texte sur l horizontal
b+depy ;on deplace la position du texte sur la vertical
If (Width/2 - TextWidth(Rien$)/2)+a>Width-TextWidth(Rien$) ;si le texte depasse la largeure de l' écran
depx=-depx ;on inverse le pas horizontal en négatif
EndIf
If (Width/2 - TextWidth(Rien$)/2)+a<0 ;si le texte depasse a gauche de l' écran
depx=-depx ;on inverse le pas horizontal en positif
EndIf
If (Height/2 - TextHeight(Rien$)/2)+b>Height-TextHeight(Rien$);si le texte depasse la hauteur de l' écran
depy=-depy ;on inverse le pas vertical en negatif
EndIf
If (Height/2 - TextHeight(Rien$)/2)+b<0 ;si le texte depasse en base de l' écran
depy=-depy ;on inverse le pas vertical en positif
EndIf
;-------------bebut spectre------------
avx+passsx*veroux
avy+passsy*verouy
yyex=yex*veroux
yyey=yey*verouy
varix=Random(100)
variy=Random(100)
varix1=Random(100)
variy1=Random(100)
varix2=Random(100)
variy2=Random(100)
If avx>Width-150 Or avx<0 Or varix=50
passsx=-passsx
veroux=1
verouy=0
yex=-yex
EndIf
If avy>Height-150 Or avy<0 Or variy=50
passsy=-passsy
veroux=0
verouy=1
yey=-yey
EndIf
avx0=avx
avy0=avy
yyex0=yyex
yyey0=yyey
coul=$0000FF
Gosub spectre
avx1+passsx1*veroux1
avy1+passsy1*verouy1
yyex1=yex1*veroux1
yyey1=yey1*verouy1
If avx1>Width-150 Or avx1<0 Or varix1=50
passsx1=-passsx1
veroux1=1
verouy1=0
yex1=-yex1
EndIf
If avy1>Height-150 Or avy1<0 Or variy1=50
passsy1=-passsy1
veroux1=0
verouy1=1
yey1=-yey1
EndIf
avx0=avx1
avy0=avy1
yyex0=yyex1
yyey0=yyey1
coul=$FF0000
Gosub spectre
avx2+passsx2*veroux2
avy2+passsy2*verouy2
yyex2=yex2*veroux2
yyey2=yey2*verouy2
If avx2>Width-150 Or avx2<0 Or varix2=50
passsx2=-passsx2
veroux2=1
verouy2=0
yex2=-yex2
EndIf
If avy2>Height-150 Or avy2<0 Or variy2=50
passsy2=-passsy2
veroux2=0
verouy2=1
yey2=-yey2
EndIf
avx0=avx2
avy0=avy2
yyex0=yyex2
yyey0=yyey2
coul=$00FF00
Gosub spectre
;--------------fin spetcre--------------
;debut pacman
Circle(100+deppac, 100, 25 ,RGB(250,255,00))
bo+bpas
deppac+5
If deppac>1300
deppac=0
EndIf
If bo>10 Or bo<0
bpas=-bpas
EndIf
If bo=0
bo1=0: bo2=0: bo3=0: bo4=0: bo5=0: bo6=0: bo7=0: bo8=0: bo9=0: bo10=0
EndIf
If bo=1
bo1=1: bo2=0: bo3=0: bo4=0: bo5=0: bo6=0: bo7=0: bo8=0: bo9=0: bo10=0
EndIf
If bo=2
bo1=1: bo2=1: bo3=0: bo4=0: bo5=0: bo6=0: bo7=0: bo8=0: bo9=0: bo10=0
EndIf
If bo=3
bo1=1: bo2=1: bo3=1: bo4=0: bo5=0: bo6=0: bo7=0: bo8=0: bo9=0: bo10=0
EndIf
If bo=4
bo1=1: bo2=1: bo3=1: bo4=1: bo5=0: bo6=0: bo7=0: bo8=0: bo9=0: bo10=0
EndIf
If bo=5
bo1=1: bo2=1: bo3=1: bo4=1: bo5=1: bo6=0: bo7=0: bo8=0: bo9=0: bo10=0
EndIf
If bo=6
bo1=1: bo2=1: bo3=1: bo4=1: bo5=1: bo6=1: bo7=0: bo8=0: bo9=0: bo10=0
EndIf
If bo=7
bo1=1: bo2=1: bo3=1: bo4=1: bo5=1 :bo6=1: bo7=1: bo8=0: bo9=0: bo10=0
EndIf
If bo=8
bo1=1: bo2=1: bo3=1: bo4=1: bo5=1: bo6=1: bo7=1: bo8=1: bo9=0: bo10=0
EndIf
If bo=9
bo1=1: bo2=1: bo3=1: bo4=1: bo5=1: bo6=1: bo7=1: bo8=1: bo9=1: bo10=0
EndIf
If bo=10
bo1=1: bo2=1: bo3=1: bo4=1: bo5=1: bo6=1: bo7=1: bo8=1: bo9=1: bo10=0
EndIf
LineXY(100*bo1+deppac,100*bo1,125*bo1+deppac,100*bo1,RGB(0,0,0))
LineXY(100*bo1+deppac,100*bo1,125*bo1+deppac,101*bo1,RGB(0,0,0))
LineXY(100*bo2+deppac,100*bo2,125*bo2+deppac,99*bo2,RGB(0,0,0))
LineXY(100*bo2+deppac,100*bo2,125*bo2+deppac,102*bo2,RGB(0,0,0))
LineXY(100*bo3+deppac,100*bo3,125*bo3+deppac,98*bo3,RGB(0,0,0))
LineXY(100*bo3+deppac,100*bo3,125*bo3+deppac,103*bo3,RGB(0,0,0))
LineXY(100*bo4+deppac,100*bo4,125*bo4+deppac,97*bo4,RGB(0,0,0))
LineXY(100*bo4+deppac,100*bo4,125*bo4+deppac,104*bo4,RGB(0,0,0))
LineXY(100*bo5+deppac,100*bo5,125*bo5+deppac,96*bo5,RGB(0,0,0))
LineXY(100*bo5+deppac,100*bo5,125*bo5+deppac,105*bo5,RGB(0,0,0))
LineXY(100*bo6+deppac,100*bo6,125*bo6+deppac,95*bo6,RGB(0,0,0))
LineXY(100*bo6+deppac,100*bo6,125*bo6+deppac,106*bo6,RGB(0,0,0))
LineXY(100*bo7+deppac,100*bo7,125*bo7+deppac,94*bo7,RGB(0,0,0))
LineXY(100*bo7+deppac,100*bo7,125*bo7+deppac,107*bo7,RGB(0,0,0))
LineXY(100*bo8+deppac,100*bo8,125*bo8+deppac,93*bo8,RGB(0,0,0))
LineXY(100*bo8+deppac,100*bo8,125*bo8+deppac,108*bo8,RGB(0,0,0))
LineXY(100*bo9+deppac,100*bo9,125*bo9+deppac,92*bo9,RGB(0,0,0))
LineXY(100*bo9+deppac,100*bo9,125*bo9+deppac,109*bo9,RGB(0,0,0))
LineXY(100*bo10+deppac,100*bo10,125*bo10+deppac,91*bo10,RGB(0,0,0))
LineXY(100*bo10+deppac,100*bo10,125*bo10+deppac,110*bo10,RGB(0,0,0))
;fin pacman
;--------------------- mine storm
posxm1=0
posym1=15
posxm2=10
posym2=-15
posxm3=0
posym3=-10
posxm4=-10
posym4=-15
posxm5=0
posym5=-12
posxm6=0
posym6=-40
posxm7=-5
posym7=-38
posxm8=5
posym8=-38
cosrot.f=Cos(rotm)
sinrot.f=Sin(rotm)
ixm1=cosrot * posxm1 - sinrot * posym1
iym1=sinrot * posxm1 + cosrot * posym1
ixm2=cosrot * posxm2 - sinrot * posym2
iym2=sinrot * posxm2 + cosrot * posym2
ixm3=cosrot * posxm3 - sinrot * posym3
iym3=sinrot * posxm3 + cosrot * posym3
ixm4=cosrot * posxm4 - sinrot * posym4
iym4=sinrot * posxm4 + cosrot * posym4
If depmx>Width
depmx=0
EndIf
If depmy>Height
depmy=0
EndIf
If depmx<0
depmx=Width
EndIf
If depmy<0
depmy=Height
EndIf
LineXY(ixm1+depmx,iym1+depmy,ixm2+depmx,iym2+depmy,RGB(255,255,255))
LineXY(ixm2+depmx,iym2+depmy,ixm3+depmx,iym3+depmy,RGB(255,255,255))
LineXY(ixm3+depmx,iym3+depmy,ixm4+depmx,iym4+depmy,RGB(255,255,255))
LineXY(ixm4+depmx,iym4+depmy,ixm1+depmx,iym1+depmy,RGB(255,255,255))
If push0=1
If Random(1)=1
ixm5=cosrot * posxm5 - sinrot * posym5
iym5=sinrot* posxm5 + cosrot * posym5
ixm6=cosrot * posxm6 - sinrot * posym6
iym6=sinrot * posxm6 + cosrot * posym6
ixm7=cosrot * posxm7 - sinrot * posym7
iym7=sinrot * posxm7 + cosrot * posym7
ixm8=cosrot * posxm8 - sinrot * posym8
iym8=sinrot * posxm8 + cosrot * posym8
LineXY(ixm5+depmx,iym5+depmy,ixm6+depmx,iym6+depmy,RGB(255,255,255))
LineXY(ixm5+depmx,iym5+depmy,ixm7+depmx,iym7+depmy,RGB(255,255,255))
LineXY(ixm5+depmx,iym5+depmy,ixm8+depmx,iym8+depmy,RGB(255,255,255))
EndIf
EndIf
;---------- fin mine storm ---------------------
;Moi RV et mon pixel blanc
Plot(10,10,RGB(255,255,255)) ; un point aux coordonnées 10,10 (coin en haut a gauche) de couleur rgb(255,255,255) blanc donc
StopDrawing() ; C'est fini
; on va tester si le sprite va sortir de l'ecran
; et fabriquer un rebond par inversion de la coordonée au cas ou ...
balle_bleue(1)\x=balle_bleue(1)\x + balle_bleue(1)\xpas ; on lance l'animation de la coordonées X
balle_bleue(1)\Y=balle_bleue(1)\Y + balle_bleue(1)\ypas ; on lance l'animation de la coordonées Y
; on test les sorties d'ecran
If balle_bleue(1)\x>Width-32 Or balle_bleue(1)\x<0 ; si la coordonée X du sprite est superieur a la largeur de l'ecran (sortie a droite) ou plus petit que zero (sortie a gauche)
; le "-32" sert a ce que la detection de la sortie se fasse a droite du Sprite
balle_bleue(1)\xpas=-balle_bleue(1)\xpas ; on inverse le sens des x , ce qui aura pour consequence de faire aller le Sprite dans l'autre sens des X
EndIf
If balle_bleue(1)\Y>Height-32 Or balle_bleue(1)\Y<0 ; si la coordonée Y du sprite est superieur a la lhauteur de l'ecran (sortie en bas) ou plus petit que zero (sortie en haut)
; le "-32" sert a ce que la detection de la sortie se fasse au dessous du Sprite
balle_bleue(1)\ypas=-balle_bleue(1)\ypas ; on inverse le sens des Y , ce qui aura pour consequence de faire aller le Sprite dans l'autre sens des Y
EndIf
DisplayTransparentSprite(#sprite_balle_bleue,balle_bleue(1)\x,balle_bleue(1)\Y) ; on affiche le Sprite aux coordonées
son=Random(1000)+500
oliv(1)\text.s="petite demo pour Bernard 13"
oliv(1)\xt= oliv(1)\xt+2 :If oliv(1)\xt>Width: oliv(1)\xt=-500:EndIf ; le text arrive a droite ? on le remet a gauche !!
oliv(1)\yt=Height-125 ; emplacement verticale de la sinuzoide
oliv(1)\cr=Random(255)+100
;oliv(1)\cv=Random(255)+100
oliv(1)\cb=Random(255)+100
Ondulation( oliv(1)\xt, oliv(1)\yt, oliv(1)\text.s, oliv(1)\cr, oliv(1)\cv, oliv(1)\cb) ; appel de la procedure a OLIV on donne les coordonées que l'on veux, le text, et la couleur
;-affiche Raster
With Raster
For i = 0 To 29
DisplaySprite(\Sprite[i], 10 + i * 4, \CentreY + Sin((\angle + i * \pas * 2) * 0.0174533) * \amplitude)
DisplaySprite(\Sprite[i], Width-240 + i * 4, \CentreY + Sin((\angle + i * \pas * 2) * 0.0174533) * \amplitude)
Next i
\angle + \Vitesse
EndWith
;------------- routine boulles en rotation ---------
rot.f+0.1
For colon= 0 To 8 ;nombre de ligne de boulles en rotation!! ou collone pitain je sais plus
For ligne =0 To 8 ;nombre de collone de boulles en rotation!! ou ligne repitain je sais pas
posx=(colon*50)-200 ; pfff ca me gonffle les comment...
posy=(ligne*50)-300
ix=Cos(rot) * posx - Sin(rot) * posy
iy=Sin(rot) * posx + Cos(rot) * posy
iz1=Sin(rot) * iy + Cos(rot) * 100
cix=1000*ix/(1000-iz1)
ciy=1000*(Cos(rot) * iy - Sin(rot) * 100)/(1000-iz1)
DisplayTransparentSprite(#sprite_tonton,cix+100+Width/2,ciy+ 100+Height/2)
Next ligne
Next colon
;-------------- fin boulles en rotation --------
FlipBuffers() ; Inverse les buffers
ClearScreen(0) ; Efface l'écran
; -----------clavier mine storm ----------------
ExamineKeyboard()
If KeyboardPushed(#PB_Key_Left)
rotm-0.1
EndIf
If KeyboardPushed( #PB_Key_Right)
rotm+0.1
EndIf
If KeyboardPushed( #PB_Key_Up)
acc+0.05
If acc>5
acc=5
EndIf
depmx=depmx-Sin(rotm)*acc*acc
depmy=depmy+Cos(rotm)*acc*acc
rotm1.f=rotm
push0=1
Else
acc-0.05
depmx=depmx-Sin(rotm1)*acc*acc
depmy=depmy+Cos(rotm1)*acc*acc
push0=0
EndIf
If acc<0
acc=0
EndIf
;--------- fin clavier mine storm ----------------
Until KeyboardPushed(#PB_Key_Escape) ; On s'en va!!!
mciSendString_("CLOSE MIDI",0,0,0)
EndIf
EndIf
End ; Adios!
spectre:
Circle(100+avx0, 100+avy0, 20 ,coul)
Box(80+avx0,100+avy0, 40, 25 ,coul)
Circle(88+avx0, 122+avy0, 3 ,RGB(0,0,0))
Circle(100+avx0, 122+avy0, 3 ,RGB(0,0,0))
Circle(112+avx0, 122+avy0, 3 ,RGB(0,0,0))
Box(85+avx0,122+avy0, 6, 3,RGB(0,0,0))
Box(97+avx0,122+avy0, 6, 3,RGB(0,0,0))
Box(109+avx0,122+avy0, 6, 3,RGB(0,0,0))
Circle(108+avx0, 95+avy0, 5 ,RGB(255,255,255))
Circle(94+avx0, 95+avy0, 5 ,RGB(255,255,255))
Circle(108+avx0+yyex0, 95+avy0+yyey0, 3 ,RGB(0,0,0))
Circle(94+avx0+yyex0, 95+avy0+yyey0, 3 ,RGB(0,0,0))
Return
Procedure Ondulation(x,Y,Texte.s,r,v,b)
; procedure realisé par OLIV
StartDrawing ( ScreenOutput ()) ; Pour pouvoir utiliser les commandes des dessin 2D.
DrawingFont ( FontID ( #font )) ; On change la police
DrawingMode (1) ; On selectionne le mode pour ne pas avoir de fond derrière les lettres.
FrontColor ( RGB (r,v,b) ) ; On change la couleur.
oliv(1)\angle + #VitesseAngle ; Angle de départ de la sinusoide en radian
If oliv(1)\angle >= 2 * #PI
oliv(1)\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 ( oliv(1)\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
DrawText (x+posx, Y+posy,Lettre)
posx + TextWidth (Lettre)
Next
StopDrawing () ; On signife que l'on arrête les fonctions dessin 2D.
EndProcedure
DataSection
Couleur :
Data.l $13, $30, $50, $70, $8E, $AE, $CF, $EC
Data.l $FF, $EB, $CF, $AF, $8E, $71, $50, $30
Data.l $0, $30914, $61632, $92454, $D3373, $104193, $144FB5, $185CD2
Data.l $1A65E7, $185CD2, $144FB4, $114193, $D3373, $A2554, $51632, $30A15
Data.l $1D2D, $314B, $4569, $5785, $6BA3, $7EC1, $90DC, $9CEE
Data.l $90DB, $7FC2, $6BA3, $5785, $4569, $314B, $1D2C, $D12
Data.l $62518, $B3E27, $F5837, $136F46, $178755, $1CA165, $1FB673, $22C67D
Data.l $20B773, $1CA166, $178755, $136F46, $F5837, $B3F28, $62518, $30F0A
Data.l $152516, $233E25, $315735, $3F6D43, $4D8652, $5B9F62, $67B56F, $70C478
Data.l $67B56E, $5BA062, $4D8752, $3E6D43, $325635, $243E26, $152417, $80F0A
Data.l $152209, $24390F, $324F15, $3F651A, $4E7C20, $5C9226, $69A62C, $72B42F
Data.l $69A62C, $5C9226, $4E7C20, $40641A, $324F15, $24390E, $152209, $90E04
Data.l $22230B, $393A13, $50511A, $666621, $7C7E29, $939631, $A7AA38, $B5B83C
Data.l $A7AA37, $939631, $7C7E2A, $656621, $50521B, $393A13, $22230B, $E0E05
Data.l $423411, $5E4919, $785D1F, $927226, $AD872D, $C89C34, $DFAE3B, $EFBB3F
Data.l $DEAE3B, $C79C34, $AD872D, $927227, $785D1F, $5D4A18, $423412, $271E0A
Data.l $251A12, $3E2C1E, $573C2A, $6E4D35, $875F41, $A0704D, $B68058, $C58A5F
Data.l $B58057, $A0704D, $875F41, $6E4D35, $573D29, $3E2B1E, $251A12, $F0A07
Data.l $211513, $372321, $4E302D, $633D39, $784C46, $8F5953, $A3665F, $B06E66
Data.l $A3655E, $8F5A53, $794B46, $623D39, $4E312D, $372220, $211514, $D0808
Data.l $C0609, $1D0F14, $311921, $44232F, $562C3B, $693649, $7D4056, $8E4961
Data.l $9A4F6A, $8E4962, $7D4056, $693648, $562C3B, $44232F, $311921, $1D0F14
Data.l $1D101B, $311B2D, $44263F, $573050, $6B3B62, $7E4673, $8F4F83, $9B568E
Data.l $8F5083, $7E4673, $6A3B61, $573050, $45263E, $301B2D, $1D101A, $C070B
Data.l $C0912, $1E142C, $31214A, $452F69, $583C84, $6D49A3, $8157C0, $9262DA
Data.l $9E6BED, $9262DB, $8157C0, $6D4AA2, $583C85, $462F69, $32224B, $1E152C
Data.l $211D42, $2E2A5D, $3B3676, $484190, $564EAB, $635AC5, $6E63DC, $766BEC
Data.l $6E64DC, $6259C6, $554EAB, $48418F, $3B3676, $2F2A5C, $211D41, $141227
Data.l $18003F, $220058, $2C0070, $350089, $3F00A3, $4900BD, $5100D2, $5700E1
Data.l $5100D1, $4800BC, $3F00A3, $350089, $2C0070, $220059, $18003E, $E0025
Data.l $23003E, $320059, $3F0071, $4D008A, $5C00A3, $6A00BD, $7600D3, $7F00E2
Data.l $7700D2, $6A00BD, $5C00A4, $4D0089, $400071, $320058, $23003F, $150025
Data.l $220029, $310039, $3E0049, $4B0059, $59006A, $66007A, $720088, $7B0092
Data.l $730088, $67007A, $59006A, $4A0059, $3E0049, $300039, $220028, $140018
Data.l $22031C, $310328, $3D0433, $4B053E, $59064A, $670755, $73085F, $7B0966
Data.l $73085F, $670855, $590649, $4A053E, $3D0433, $300428, $22021C, $140111
Data.l $220511, $300718, $3E081E, $4A0B25, $590D2C, $670E33, $721038, $7B113D
Data.l $721039, $670E33, $590C2C, $4A0A25, $3E091F, $300718, $220510, $14030A
Data.l $29130E, $3A1B13, $4B2219, $5A291F, $6C3125, $7C382A, $8B3E2F, $954332
Data.l $8B3F2F, $7C382A, $6C3025, $5A291E, $4A2219, $3B1A14, $2A130E, $190B08
Data.l $E0800, $221400, $382100, $4F2F00, $643B00, $7A4800, $915500, $A56100
Data.l $B36900, $A56000, $925600, $7B4800, $643B00, $4F2F00, $382100, $221300
Data.l $120D00, $2C2100, $4A3800, $684E00, $836300, $A17A00, $BF9000, $D9A400
Data.l $EBB200, $D9A400, $BF9100, $A17A00, $836400, $684E00, $4A3900, $2C2200
Data.l $D0D00, $1D1F00, $323400, $464900, $595C00, $6C7100, $808500, $929700
Data.l $9EA400, $919700, $808600, $6C7100, $585B00, $464800, $323300, $1E1F00
Data.l $1B2C00, $273E00, $314F00, $3B6000, $477300, $528500, $5C9400, $629F00
Data.l $5B9400, $518500, $477300, $3C6100, $315000, $263E00, $1B2C00, $101A00
Data.l $50E00, $B2100, $133700, $1A4D00, $216200, $287800, $308F00, $36A200
Data.l $3BB000, $37A200, $308E00, $297900, $216200, $1A4E00, $133800, $B2100
Data.l $93722, $D4D31, $11633F, $15794C, $198F5A, $1DA669, $20B975, $22C67D
Data.l $20B975, $1CA568, $18905B, $15784C, $11633E, $D4E30, $93723, $62114
Data.l $4344, $5F62, $7A7D, $9497, $B0B4, $CCD0, $E3E8, $F4F9
Data.l $E3E8, $CCD0, $B1B5, $9597, $7A7D, $6062, $4344, $2829
Data.l $2B42, $3E5E, $4E77, $5F90, $71AC, $82C7, $91DD, $9CEE
Data.l $92DE, $83C7, $71AD, $5F91, $4E77, $3D5D, $2B41, $1A27
Data.l $20812, $4132C, $81F48, $B2C66, $F3881, $12469E, $1552BC, $185DD5
Data.l $1A65E7, $185DD5, $1552BB, $12459F, $F3881, $B2D66, $82049, $5132C
Data.l $40011, $8002A, $D0046, $120063, $17007C, $1C0099, $2200B5, $2600CE
Data.l $2900DF, $2500CE, $2100B5, $1C0099, $17007C, $120063, $D0046, $80029
EndDataSection