Économiseurs d'écran (Screensavers)
GW-Basic, utilisé par PC-Basic
Programme avec Graphique et Texte
Les économiseurs d'écran, généralement des images de motifs changeant rapidement, sont arrivés il y a des décennies pour aider à prévenir les brûlures d'écran d'ordinateur, à l'époque où les écrans d'ordinateur étaient construits à l'aide de tubes cathodiques (CRT).
Les Flying Toasters, qui étaient des grille-pain ailés qui voltigeaient autour de l'écran, étaient probablement les économiseurs d'écran les plus célèbres des années 90. Bien qu’ils ne soient plus nécessaires pour sauvegarder littéralement votre écran, les économiseurs d’écran peuvent néanmoins être amusants à regarder.
Par conséquent, jetez un œil à la collection d’anciens économiseurs d’écran dans cette section.
Les images les plus simples ?
Des stars, et beaucoup d'entre elles.
STARS.BAS randomise les coordonnées d'une instruction PSET.
STARS2.BAS fait mieux : il randomise et fait défiler les étoiles vers le haut (en utilisant PRINT), provoquant une sensation vertigineuse de descente.
Mais STARS3. BAS est le plus sournois du groupe. Au lieu d'afficher les étoiles en temps réel, telles qu'elles sont tracées sur l'écran, le programme configure deux écrans : un « écran 1 » et un « écran 2 ».
Un seul des écrans s'affiche à la fois ; l'écran noir et vide qui est « hors écran » est envahi d'étoiles, juste à temps pour en faire l'écran actif et visible – et bombarder l'autre écran, désormais invisible, d'étoiles.
Les paramètres supplémentaires pour l'instruction SCREEN dans les lignes 20 et 80 réalisent cette astuce visuelle de type diaporama, qui peut être utilisée ailleurs avec beaucoup d'effet lors du lissage des animations graphiques.
Au lieu d’étoiles, vous avez peut-être envie d’images de cristaux colorés ?
Alors le programme CRYSTAL.BAS devrait vous satisfaire. Grâce à plusieurs boucles FOR/NEXT et à la fonction RND, l'écran est rapidement saturé de couleurs. (Si vous n'aimez pas les couleurs et préférez simplement voir beaucoup de flocons de neige, tous d'apparence irréaliste, exécutez SNOW.BAS à la place.)
LINES.BAS et LINES2.BAS étendent des lignes de couleurs aléatoires sur l'écran, respectivement horizontalement et verticalement.
Cependant, seul LINES2.BAS utilise l'instruction DRAW pour construire les lignes.
DOTS.BAS est similaire aux programmes LINES.BAS mais vous demande quelles sont vos préférences en matière de modèles de lignes.
Le programme DOTTER.BAS est plus dynamique, s'appuyant sur des tableaux pour déplacer certaines étoiles (enfin, plus honnêtement, des points) sur l'écran, très lentement.
Les tableaux ARRAYX et ARRAYY capturent toutes les coordonnées aléatoires des points à l'écran ; puis, dans les lignes 71 et 75, une quantité aléatoire de mouvement est générée : un pixel vers la gauche, la droite, le haut ou le bas, ou aucun changement de position du tout.
FRACTAL1.BAS est très similaire à DOTTER.BAS, sauf que les points ne disparaissent pas une fois dessinés et qu'il n'y a qu'un vague indice de l'autosimilarité requise par les fractales, d'où le titre du programme. Une section ultérieur approfondira les conceptions fractales.
LINER.BAS utilise l'instruction LINE, plutôt que PSET ou DRAW, pour construire des lignes à partir de la dernière coordonnée aléatoire référencée (remarquez le tiret après l'instruction LINE à la ligne 30).
Et un cercle est placé à la fin de chaque segment de ligne, ce qui donne aux images qui émergent constamment des mondes dystopiques faits de Tinker Toys.
Quiconque souhaite un écran de type moniteur cardiaque n’a pas besoin de chercher plus loin que HEART.BAS. Une ligne bleue fluctuant rapidement se fraye rapidement un chemin du côté gauche vers le côté droit de l'écran, le tout rendu possible par un simple PSET et de nombreux mouvements aléatoires.
Et enfin, SAVER.BAS utilise la plupart des instructions graphiques que nous avons examinées jusqu'à présent, notamment PSET, CIRCLE et DRAW.
STARS.BAS
10 KEY OFF:CLS:SCREEN
7:COLOR 8,8:CLS:COLOR 15
20
I=INT(1+320*RND(1)):L=INT(1+250*RND(1))
30 PSET(I,L)
40 GOTO 20
STARS2.BAS
10 RANDOMIZE TIMER:KEY
OFF:CLS:SCREEN 7:COLOR 8,8:CLS:COLOR 15
20
I=INT(1+320*RND(1)):L=INT(1+230*RND(1))
30 PSET(I,L)
31
F=INT(1+320*RND(1)):G=INT(1+230*RND(1))
32 PSET(F,G)
34 LOCATE 25,15:PRINT "S T A
R S 2"
35 PRINT
36 I$=INKEY$:IF I$="B" OR
I$="b" THEN T=INT(14*RND(1)):COLOR ,T
40 GOTO 20
STARS3.BAS
10 KEY
OFF:SCREEN 7:COLOR 15,0:CLS:RANDOMIZE TIMER
20 SCREEN 7,,1,2:CLS
30 FOR
T= 1 TO 50
40 X=INT(1+320*RND(1)):Y=INT(1+200*RND(1))
50 PSET(X,Y),15
60 NEXT T
70 FOR PAUSE = 1 TO 5000:NEXT PAUSE
80 SCREEN 7,,2,1:CLS
90
FOR T = 1 TO 50
100 X=INT(1+320*RND(1)):Y=INT(1+200*RND(1))
110 PSET(X,Y),15
120 NEXT T
130 FOR PAUSE=1 TO 5000:NEXT PAUSE
140 GOTO 20
CRYSTAL.BAS
10 KEY
OFF:SCREEN 7:COLOR 15,0:CLS
20 FOR G= 1 TO
700:T=INT(1+320*RND(1)):Y=INT(1+200*RND(1))
30 PSET(T,Y):DRAW "C15 NU10 C10
NR10 C2 ND10 C3 NL10 C12 NG18 C6 NH10 C5 NE10 C14 NF10"
40 NEXT G
50 FOR
G= 1 TO 700:T*INT(1+320*RND(1):Y=INT(1+200*RND(1))
60 PSET(T,Y),0:DRAW "NU10
NR10 ND10 NL10 NG10 NH10 NE10 NF10"
70 NEXT G
80 GOTO 20
SNOW.BAS
10 KEY
OFF:SCREEN 9:COLOR 15,1:CLS
20 U=INT(1+649*RND(1)):F=INT(1+349*RND(1))
30
PSET(U,F):DRAW "NR5 NL5 ND5 NU5 NG5 NH5 NE5 NF5"
40 GOTO 20
LlNES.BAS
10 SCREEN 7
20 COLOR 1,1:CLS:COLOR 15
30 F=INT(1+15*RND(1)):IF F= 1 THEN GOTO 30
40
COLOR F:FD=INT(1+300*RND(1))
45 FOR G = 0 TO 370
50 PSET(G,FD)
55 NEXT
G
60 GOTO 30
LlNES2.BAS
10 SCREEN
7:COLOR 7,7:CLS:COLOR 1
20 X=320
30 FOR M = 0 TO X STEP 3
50 PSET(M,V),INT(1+15*RND(1)):DRAW
"D200
60 NEXT M
80 GOTO 20
DOTS.BAS
10 KEY
OFF:SCREEN 7:COLOR 15,0:CLS
11 INPUT "RANDOM(R) OU COULEURS
SÉLECTIONNÉES(S)";D$
12 IF D$="R" OR D$="r" THEN GOTO 15
13 IF D$="S" OR
D$="s" THEN GOTO 115
15 INPUT "ÉTAPE À TRAVERSER"; L
16 INPUT "ÉTAPE À
DESCENTE";M
17 CLS
20 FOR G = 1 TO 320 STEP L
30 FOR H = 1 TO 190 STEP
M
40 Y = INT(1+15*RND(1))
41 I$ = INKEY$:IF I$ = " " THEN GOTO 90
42 IF
I$ = "B" OR I$ = "b" THEN AS=AS+1:COLOR ,AS
43 IF AS =>15 THEN AS = 0
50
PSET(G,H),Y
60 NEXT H
70 NEXT G
80 FOR J = 1 TO 10000:NEXT J
90 FOR
NC = 1 TO 55:PRINT:NEXT NC:CLS:GOTO 11
115 INPUT "ÉTAPE À TRAVERSER";L
116
INPUT "ÉTAPE À DESCENTE";M
117 INPUT "COULEUR DES LIGNES(1-15)";X
118 CLS
120 FOR G= 1 TO 320 STEP L
130 FOR H= 1 TO 190 STEP M
140 Y=X
141
I$=INKEY$:IF I$=" " THEN GOTO 90
142 IF I$="B" OR I$="b" THEN AS=AS+1:COLOR
AS
143 IF AS=>15 THEN AS=0
150 PSET(G,H),Y
160 NEXT H
170 NEXT G
180 FOR J = 1 TO 10000:NEXT J
190 FOR NC=1 TO 55:PRINT:NEXT NC:CLS:GOTO 11
200 END
DOTTER.BAS
10 RANDOMIZE
TIMER:KEY OFF:SCREEN 9:COLOR 15,0:CLS:DIM ARRAYX(100):DIM ARRAYY(100)
20 FOR
TY=1 TO 100
30 X=INT(1+939*RND(1))-100:Y=INT(1+649*RND(1))-100
40 PSET(X,Y),15:ARRAYX(TY)=X:ARRAYY(TY)=Y:FOR
TIM = 1 TO 100:NEXT TIM
50 NEXT TY
70 FOR TY=1 TO 100
71 XA=INT(1+3*RND(1))-2:YA=INT(1+3*RND(1))-2
75 ARRAYX(TY) = ARRAYX(TY) + XA:ARRAYY(TY) = ARRAYY(TY)+YA
80 PSET(ARRAYX(TY),ARRAYY(TY)),15
90 NEXT TY
95 FOR PAUSE = 1 TO 100:NEXT PAUSE:CLS
100 GOTO 70
FRACTAL1.BAS
10 RANDOMIZE
TIMER:KEY OFF:SCREEN 9:COLOR 15,0:CLS:DIM ARRAYX(300):DIM ARRAYY(300)
20 FOR
TY = 1 TO 300
30 X=INT(1+739*RND(1))-100:Y=INT(1+449*RND(1))-100
40 PSET(X,Y),15:ARRAYX(TY)=X:ARRAYY(TY)=Y
50 NEXT TY
60 XA=INT(1+5*RND(1))-3:YA=INT(1+5*RND(1))-3
70 FOR TY = 1 TO
300
75 ARRAYX(TY) = ARRAYX(TY) + XA:ARRAYY(TY) = ARRAYY(TY)+YA
80 PSET(ARRAYX(TY),ARRAYY(TY)),15
90 NEXT TY
100 GOTO 60
LINER.BAS
5 CLS
10
KEY OFF:SCREEN 9:COLOR 15,0:RANDOMIZE TIMER
20
X=INT(1+640*RND(1)):Y=INT(1+350*RND(1)):C=INT(1+15*RND(1))
30 LINE -(X,Y),C:FOR
ZZ=1 TO 5:CIRCLE(X,Y),ZZ,C:NEXT ZZ
35 FOR T = 1 TO 10000:NEXT T
40 GOTO
20
HEART.BAS
10
CLEAR:RANDOMIZE TIMER:KEY OFF:SCREEN 9:COLOR 15,0:CLS:Y=200
11
I=INT(1+3*RND(1)):I2=INT(1+3*RND(1))
12 U=INT(1+5*RND(1))
13 IF U=l THEN
V=.l
14 IF U=2 THEN V=.2
15 IF U=3 THEN V=.3
16 IF U=4 THEN V=.4
17
IF U=5 THEN V=.5
21 IF I=1 THEN C=l
22 IF I=2 THEN C=0
23 IF I=3 THEN
C=-l
25 Y=Y+C:X=X+V:PSET(X,Y),9
26 IF X=<0 THEN X=1
27 IF X=>640 THEN
GOTO 10
30 GOTO 11
SAVER.BAS
0 RANDOMIZE
TIMER:KEY OFF:A=0:COLOR 1,1:CLS:COLOR 15:PRINT:PRINT:PRINT:INPUT"QUEL ÉCRAN : 7
to 9";R
1 SCREEN R:COLOR 1,1:CLS:COLOR 14
2 PRINT:PRINT,,"-L'ÉCONOMISEUR
D'ÉCRAN-"
3 FOR Z = 1 TO 12000:NEXT Z
4 INPUT "COMBIEN DE FOIS VOULEZ-VOUS
QUE L'ÉCONOMISEUR SE RÉPÈTE";A
5 FOR Q = 1 TO A
10 SCREEN R:COLOR
4,4:CLS:COLOR 1
15 PRINT " NO.";Q:FOR M = 1 TO 1000
20 I =
INT(1+320*RND(1)):L=INT(1+250*RND(1))
30 PSET(I,L),15:I$=INKEY$:IF I$="E"
THEN END
40 NEXT M
50 FOR F = 1 TO 55:PRINT:FOR C= 1 TO 60:NEXT C:NEXT F
70 FOR K = 0 TO 150 STEP 2
80 CIRCLE(K,K),20:FOR F = 1 TO 300:NEXT F
90
NEXT K
100 COLOR 15:FOR O = 0 TO 150 STEP 1.5
110 CIRCLE(O,150),20:FOR LS
= 1 TO 100:NEXT LS
120 NEXT O:FOR D = 1 TO 9:PRINT:PRINT:PRINT:NEXT D
130
COLOR 1,1:CLS:COLOR 4
140 FOR K = 200 TO 1 STEP -1
145
Y=INT(1+15*RND(1)):IF Y = 1 THEN GOTO 145
150 CIRCLE(K,K),K,Y
160 NEXT
K:FOR BQ = 1 TO 2000:NEXT BQ
165 COLOR 1,1:CLS:COLOR 15
170 FOR DA = 1 TO
1000:PRINT"$";:NEXT DA
180 FOR N = l TO 55:PRINT:NEXT N
185 FOR J = 1 TO
250 STEP 5
190 PSET(J,150):DRAW"U60 R30 D60 L30":FOR U = 1 TO 400:NEXT U
191 COLOR 1,1:CLS:COLOR 2
195 NEXT J:FOR G = 150 TO 50 STEP - 1.3:PSET(J,G):DRAW"U60
R30 D60 L30
200 NEXT G
210 COLOR 1,1:CLS:COLOR 2
215 FOR S=250 TO 0
STEP -1
220 PSET(0,S),7:DRAW"R400
230 NEXT S
235 COLOR 1,1:COLOR 7
240 FOR VC=360 TO 0 STEP -2
250 PSET(0,VC),4:DRAW"R400"
260
PSET(VC,0),3:DRAW"D400":NEXT VC:FOR BV=1 TO 55:PRINT:FOR DS=1 TO 100:NEXT
DS:NEXT BV
270 NEXT Q
280 PRINT:PRINT:PRINT:PRINT "ENCORE?":PRINT"NON":PRINT"OUI"
290 INPUT YU$
300 IF YU$="OUI" THEN GOTO 0
310 IF YU$="NON" THEN
GOTO 320
315 SOUND 1000,1:GOTO 290
320 COLOR 1,1:CLS:COLOR
15:PRINT"BYE!!":SOUND 509,3:END
Des améliorations pourraient facilement être apportées à l’un des programmes ci-dessus.
Le véritable divertissement, cependant, consiste à expérimenter des modèles d'images dans GW-BASIC, en créant involontairement vos propres économiseurs d'écran.