La boucle précédente utilisait des instructions de dessin de façon hybride. Certaines prenaient en paramètre des coordonnées graphiques, et d'autres des coordonnées en pixels... Ce qui obligeait sans arrêt à convertir entre les deux représentations.
Mais maintenant que nos flocons ne sont plus que de simples pixels, l'astuce est donc de ne plus utiliser que des instruction de dessin demandant des pixel !
Le code pour faire neiger est adapté de celui publié sur ticalc.org par Lionel Debroux et Thomas Nussbaumer.
Et bien évidemment il comporte donc les mêmes défauts, dont celui de nous donner une sorte de neige collante pas très naturelle formant des stalagmites...
Comment y remédier ?...
- Code: Select all
EnrBDG BDG0
ZDécimal
AxesNAff
FoncNAff
QuadNAff
GraphNAff
40Xmax→Xmax
40Ymax→Ymax
0→Xmin
0→Ymin
ArrPlanAff NOIR
CouleurBord 1
EffDess
131→Y
77→L
9→X
For(I,0,Y,2
Ligne(X,I,L,I,BLEU MRN,2
End
For(I,16,Y,16
Ligne(X,I,L,I,GRIS FON,1
For(J,14,4,2
Ligne(X+7,I+J,X+14,I+J,ORANGE,2
End
Pt-Aff(X+12,I-10,GRIS,1
End
X+2→X
{0,3,3,1,6,0,2,7,6,2,4,0,3,7,6,3,4,0,4,6,0,5,3,3,8,23,23,8,15,0,9,23,23,9,15,0,10,23,0,11,23,22,11,20,0,12,23,22,12,20,20,12,17,0,13,23,22,13,20,20,13,17,0,14,23,22,14,20,0,15,23,0,16,23,0,17,23,22,17,20,0,18,23,22,18,20,20,18,17,0,19,23,22,19,20,20,19,17,0,20,23,22,20,20,0,21,23,0,22,23,23,22,15,0,23,23,23,23,15,0,24,15,0,25,15,0,26,15,0,27,15,0,28,15,0,29,15,0,30,15,0,31,15,0,32,15,0,33,15,0,34,15,0,35,15,0,36,15,0,37,15,0,38,15,0,39,15,0,40,7,0,41,7,0,42,7,0,43,7,0,44,9,9,44,7,0,45,10,10,45,7,0,46,11,11,46,8,0,47,12,11,47,9,9,47,7,0,48,13,13,48,11,10,49,14,14,49,11,11,50,12,11,51,16,16,51,13,13,51,11,10,52,18,18,52,16,16,52,11,0,53,18,18,53,16,16,53,11,9,54,19,10,55,18,18,55,16,16,55,10,10,55,8,8,56,18,18,56,16,16,56,10,9,57,16,16,57,10,10,57,8,8,58,11,9,59,12,12,59,10,10,60,11,11,61,12,12,59,3,3,60,6,0,61,7,6,61,4,0,62,7,6,62,4,0,63,6,0,64,3,3
For(I,1,dim(Rep),3
Ligne(X+Rep(I),Y+Rep(I+1),X+Rep(I),Y+Rep(I+2),BLEU MRN,1
End
For(I,3,Xmax,8
Ligne(I,0,I,3,VERT,2
End
For(I,3+8,Xmax,16
For(J,1,3
Ligne(I-J,3+J,I+J+1,3+J,VERT,1
End
For(J,1,4
partEnt(2.75-J/2
Ligne(I-Rep,6+J,I+Rep+1,6+J,VERT,1
End
End
219→M
For(I,0,28,2
Ligne(M-25,I,M+25,I,BLANC,2
If I≤14
Ligne(M-5,I,M+5,I,MARRON,2
If I≥18 et I≤25
Then
Ligne(M-8,I,M-16,I,BLEU CLR,2
Ligne(M+8,I,M+16,I,BLEU CLR,2
End
End
For(I,28,42
I-28
Ligne(M-25+Rep,I,M+25-Rep,I,ROUGE,1
End
CouleurTexte(MAGENTA
Texte(100,110,"J o y e u x
CouleurTexte(BLEU CLR
Texte(100,110+69,"N o ë l
CouleurTexte(VERT
Texte(100,110+69+43,"2 0 1 6
For(X,110,261
For(Y,101,114
If non(pxl-Test(Y,X
Pxl-NAff(Y,X
End
End
5→N
0→dim(⌊N
N→dim(⌊N
⌊N+Ymax→⌊N
While non(getKey
For(I,1,N
If NbrAléat>.95 et Ymax≤imag(⌊N(I
Then
nbrAléatEnt(0,Xmax
If non(pxl-Test(0,Rep
Rep→⌊N(I
End
⌊N(I)+
If Ymax≥imag(Rep
Then
If pxl-Test(imag(Rep),réel(Rep
Then
(1+Ymax→⌊N(I
End
If Ymax≥imag(Rep
Then
Pxl-NAff(imag(⌊N(I)),réel(⌊N(I
Pxl-Aff(imag(Rep),réel(Rep),GRIS CLR
Rep→⌊N(I
End
End
End
End
ArrPlanNAff
RappelBDG BDG0
DelVar BDG0