Code : Tout sélectionner
; Matrix Cree Par Dobro
Dim ysprite(1000)
Dim de(1000)
Dim nom$(30)
Dim index(30)
Dim y(30)
sprite=1
#Police=1
;*********** pour le screensaver
Param.s = Left(ProgramParameter(), 2)
If Param = "/p"
End
EndIf
GetCursorPos_(SourisOrigine.POINT)
ShowCursor_(0)
; ***********************************
Resultat = InitSprite()
FontID = LoadFont(#Police, "arial", 18, #PB_Font_Bold )
EcranX = GetSystemMetrics_(#SM_CXSCREEN)
EcranY = GetSystemMetrics_(#SM_CYSCREEN)
;NbSprite = EcranX / 40 * 3
NbSprite =12
OpenWindow(1, 0, 0, EcranX, EcranY, #PB_Window_BorderLess | #PB_Window_Invisible, "Matrix")
SetWindowPos_(WindowID(), -1, 0, 0, 0, 0, #SWP_NOSIZE | #SWP_NOMOVE) ; fenêtre toujours au premier plan
OpenWindowedScreen(WindowID(), 0, 0, EcranX, EcranY, 1, 0, 0)
nom$(1)="h,o,g,o,f,g,h,6,+,8,3,5,f,s,g,4,6,8,4,3,f,s,*,g,°"
nom$(2)="D,O,L,N,R,H,D,F,G,J,K,L,H,G,F,.,/,M,P,%,M,L,*,K,°"
nom$(3)="E,B,I,C,E,E,R,T,I,U,T,K,G,S,M,K,M,O,S,G,J,S,*,O,°"
nom$(4)="D,R,V,O,D,d,f,g,d,d,f,g,d,x,v,c,b,,,u,r,y,z,*,r,°"
nom$(5)=":,O,:,N,D,q,d,y,e,p,o,x,c,b,:,;,z,e,z,e,t,w,*,x,°"
nom$(6)="P,:,E,U,I,:,:,F,G,H,O,G,K,B,¨,B,J,K,S,G,?,S,*,D,°"
nom$(7)="O,R,L,:,X,:,e,t,i,u,t, ,p,t,z,u,r,z,t,_,ç,e,*,r,°"
nom$(8)="L,O,:,D,D,H,I,9,U,R,:,0,8,9,T,Z,R,T,P,R, ,P,*,Z,°"
nom$(9)="U,U,C,E,D,m,s,k,l,d,f,m,p,ç,o,r,j,t,m,z,g,j,*,s,°"
nom$(10)="X,Q,H,N,R,o,o,h,s,r,f,i,h,s,r,f,g,i,h, ,d,f,*,h,°"
nom$(11)="g,U,l,O,I,F,D,O,I,H,F,B,L,K, ,%,P,I,J,3,5, ,*,0,°"
nom$(12)="A,I,u,N,S,D,F,O,0,8,R,G,%,I,R,E,H,P,9,H,P,9,*,O,°"
nom$(13)="R,E,k,I,:,R,G,D,H,O,I,F,D,B,O,%,I, ,V,B,P,Z,*,Q,°"
nom$(14)="T,R,k,:,F,I,O,I,:,X,N,F,B, ,F,B,D,O,P,I,D,F,*,B,°"
nom$(15)="E, ,k,J,L, ,H,R,F,T,J,D,G,N, ,X,F,J,E,<,<,S,*,F,°"
nom$(16)="M,C,k,E,Y,K,Y,R,J,S,R,F,?,N,F,G,W,F,P,G,K, ,*,W,°"
nom$(17)="I,H,k,N,P,A,£,¨,M,£,¨,M,F,G,J,X,W,F,G,J,X,F,*,G,°"
nom$(18)="S,R,k,O,E,R,T,D, ,H,I,J, ,I,E,J,H,Q,P,E,T,H,*,J,°"
nom$(19)=" ,I,k,V, ,K,E,R,P,9,I,E,Q,R,P,Q, ,E,U,R,P, ,*,H,°"
nom$(20)="C,S,k,A,H,O,E,R, ,Q,R,Y,U, ,Q,Ë,0,9,U,Q, ,E,*,0,°"
nom$(21)="O, ,k, ,E,X,E,R,Y, ,Q,E,R,Y, ,Q,E,R,Y,Q,E,R,*,P,°"
nom$(22)="M,Z,k,L,I, ,E,R,Y,Q,E,R,Y,P,S,E,U,S,%,P,E,Y,*,9,°"
nom$(23)="T,A,k,E,S,T,S,R,E,T,S,T,R,U,Y,S,R,T,P,U,I,S,*,R,°"
nom$(24)="O,P,k, ,S,Y,S,R,U,S,R,T,U,S,R,T,U,S,R,T,U,9,*,S,°"
nom$(25)="I,M,k,S,P,U,5,S,R,¨,0,8,U, ,Q,R,Y,E,0,5,4,5,*,Y,°"
nom$(26)="S,A,k,O,I,I,R,S,U,S,R,Y,U,2,5,4,3,2,6,5,3,S,*,Y,°"
nom$(27)=" ,N,k,L,T,R,E,R,Y,Q,E,R,z,I,Q,E,4,Y,Q,E,T,+,*,R,°"
nom$(28)="8,u,k,D,E,S,E,R,Q,Y,P,9,8,Z,E,a,T,8,3,Q, ,8,*,U,°"
nom$(29)="8,o,k,A,R,G,E,5,Q,E,5,z,Y,8,U,E,R,Z,¨,0,U,3,*,4,°"
nom$(30)="8,f,k,T,s,D,E,5,Y,3,5,Q,8,Q,Z,R,¨,8,E,5,Q,0,*,9,°"
; le caractere ° signifie la fin de la phrase il est indispensable
; le caractere * est mis en avant derniere position
; c'est lui qui indique que le caractere suivant sera plus clair
; on crée un sprite
For spr=1 To 30
;CallDebugger
Resultat = CreateSprite(spr, 24,27*Len(nom$(spr)),0)
While StringField(nom$(spr), index(spr), ",")<>"°":;on guette le caractere ° qui dira que la phrase est fini d'explorer en attendant on boucle
index(spr)=index(spr)+1 :;on avance d'un caractere
car$ = StringField(nom$(spr), index(spr), ","):;ici je recupere les caracteres entre les virgules
y(spr)=y(spr)+27:; pour que le text s'ecrive une ligne au dessous dans le sprite
StartDrawing(SpriteOutput(spr)):;on commence a dessiner dans le sprite SPR
BackColor(0, 0,0):;couleur de fond noir
c = c +Int(255/Len(nom$(spr)))+4 :; on eclaircie la couleur d'ecriture!!
If c>255:c=0:EndIf:; si on depasse 255 (verta fond) on ramene a 20 (vert sombre)
If car$ = "°":; ha on tombe sur le caractere de fin de phrase
c = 0 :; on fixe la couleur a 20 (vert sombre)
Goto fi :;on ne dessine pas le dernier caractere de controle
EndIf
;c=255
FrontColor(0, c, 0): ;on prend la couleur defini plus haut pour dessiner
If car$ = "*" : ; ha le caractere qui nous indique un changement de couleur
index(spr)=index(spr)+1:;on passe le caractere * (on veut pas l'afficher c'est un caractere de control)
car$ = StringField(nom$(spr), index(spr), ","):;on recupere le caractere suivant l'etoile
FrontColor(110, 255,110): ;on choisi une couleur verte presque blanche
EndIf
Locate(0, y(spr)):;ceci pose le crayon au bonne endroit (une ligne en dessous) comme indique plus haut
DrawingFont(FontID):;attention on va ecrire du text sur la zone reserve du sprite
DrawText(car$):; voila on le fait
fi:
long = TextLength(nom$(1))
StopDrawing():; signale que l'on arrete de dessiner sur le sprite SPR
Wend
Next spr
;ceci prepare les colonne qui vont etre solicite pour l'affichage, un "precalcul" en fait
xrez=Int(EcranX/27)
Dim col(xrez)
For t=1 To EcranX Step 27
col(h)=t
h+1
du:
Next t
;***********************************
indexc=0
For ind=1 To xrez :;correspond au nombre de colonne (en 1024)
ysprite(ind)=-(long*2)-Random(long*4):; tire au hazard une ligne pourle depart d"un sprite
If col<>EcranX :; tant que la valeur lu est differente de la rez ecran en x
indexc=indexc+1 :
de(ind)=col(ind)
;If carcol$=""
; de(ind)=27
;EndIf
Else
indexc=0
EndIf
Next ind
indexc=0
Repeat
RandomSeed(Random(255))
For ind=1 To xrez
; si le sprite sort en bas
If ysprite(ind)>EcranY
ysprite(ind)=-(2+long*2)-Random(long*2)
EndIf
; toute l'astuce de l'animation est la !!
spr=spr+1
If spr>30:; on affiche les sprite en decalant une lettre !!
spr=1
EndIf
ysprite(ind)=ysprite(ind)+Random(10)+10:; vitesse de descente des sprites
;DisplayTransparentSprite (spr, de(ind), ysprite(ind))
DisplaySprite(spr, de(ind), ysprite(ind))
;Delay(4)
Next ind
FlipBuffers()
ClearScreen(0,0,0)
GetCursorPos_(Souris.POINT)
Until WindowEvent() = #PB_Event_CloseWindow Or Souris\x <> SourisOrigine\x Or Souris\y <> SourisOrigine\y
ShowCursor_(1)