Horloge analogique

GW-Basic, utilisé par PC-Basic

Programme avec Graphique et Texte

PC-BASIC

Dans le programme TIME.BAS (Dire l'heure), nous avons affiché à l'écran différentes formes d'une horloge textuelle à l'aide de TIME$.

Rappelons que TIME$, une variable chaîne prédéfinie, est définie et initialisée à chaque exécution de GW-BASIC.

TIME$, lorsqu'elle s'affiche à l'écran, affiche l'heure au format suivant :

HEURE:MINUTE:SECOND

où les heures sont exprimées en heure militaire (c'est-à-dire au format 24 heures).

Dans le programme TRIG.BAS (Graphiques trigonométriques), nous avons utilisé l'instruction PSET pour afficher à l'écran les graphiques des fonctions trigonométriques sinus et cosinus.

Combinons ces deux programmes : récupérons l'heure actuelle de l'ordinateur, puis utilisons la trigonométrie pour l'afficher sous forme d'horloge analogique graphique avec une aiguille des secondes, des minutes et des heures.

Appuyer sur la touche Échap pour quitter le programme.

La fonction MID$ permet de désagréger les caractères de la variable TIME$.

La mesure en radians des trois aiguilles analogiques est alors obtenue.

Enfin, l'instruction LINE, qui trace un segment de droite entre deux points d'extrémité prédéfinis, est utilisée, ainsi que quelques notions de trigonométrie, pour afficher les aiguilles analogiques à leur position correcte à l'écran.

Lorsque CLOCK.BAS est en cours d'exécution, vous devrez faire face à un scintillement important. Réduire ce scintillement et ajouter des chiffres autour du cadran amélioreraient considérablement le programme.

CLOCK.BAS

10 KEY OFF
20 SCREEN 9:COLOR 15,0
30 PI#=3.14159265#
35 HOUR=VAL(MID$(TIME$,1,2)) 'OBTAINS HOUR, CONVERTS TO NUMERIC
36 IF HOUR>12 THEN HOUR=HOUR-12
37 IF HOUR=0 THEN HOUR=12
38 HOUR=HOUR*5
39 HOURRAD=(HOUR*PI#/180)*6-PI#/2 'CONVERTS TO RADIANS, THEN SUBTRACT PI/2
40 SEC=VAL(MID$(TIME$,7,2)) 'OBTAIN SECONDS, CONVERT TO NUMERIC
45 SECRAD=(SEC*PI#/180)*6-PI#/2 'CONVERTS TO RADIANS, THEN SUBTRACT PI/2
46 MIN=VAL(MID$(TIME$,4,2)) 'OBTAIN MINUTES, CONVERT TO NUMERIC
47 MINRAD=(MIN*PI#/180)*6-PI#/2 'CONVERTS TO RADIANS, ETC.
48 LOCATE 2,15:PRINT TIME$
50 LINE(300,150)-(COS(SECRAD)*100+300,SIN(SECRAD)*100+150),15 'SECONDS HAND
55 LINE(300,150)-(COS(MINRAD)*100+300, SIN(MINRAD)*100+150),4 'MINUTES HAND
57 LINE(300,150)-(COS(HOURRAD)*100+300, SIN(HOURRAD)*100+150),1 'HOURS HAND
60 FOR PAUSE=1 TO 500:NEXT PAUSE
65 CLS
66 I$=INKEY$
67 IF I$<>CHR$(27) THEN 35