Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Orologio - OROLOGIO.BAS

OROLOGIO.BAS

Caricato da: Poggi Marco
Scarica il programma completo

  1. DECLARE FUNCTION campione# (num AS DOUBLE, mo AS DOUBLE)
  2. DECLARE SUB ore (raggio AS SINGLE, t AS DOUBLE, colore AS INTEGER)
  3. DECLARE SUB minuti (raggio AS SINGLE, t AS DOUBLE, colore AS INTEGER)
  4. DECLARE SUB pausa (tempo AS DOUBLE)
  5. DECLARE SUB secondi (raggio AS SINGLE, t AS DOUBLE, colore AS INTEGER)
  6. DECLARE FUNCTION resto! (q AS SINGLE, d AS SINGLE)
  7. DECLARE SUB linea (s AS ANY, colore AS INTEGER)
  8. DECLARE SUB quadrante (raggio AS SINGLE)
  9. DECLARE SUB ruota (p AS ANY, teta AS SINGLE)
  10. TYPE punto
  11.     x AS SINGLE
  12.     y AS SINGLE
  13. END TYPE
  14. TYPE segmento
  15.     inizio AS punto
  16.     fine AS punto
  17. END TYPE
  18. SCREEN 12
  19. CLS
  20. DIM SHARED ORIGINE AS punto
  21. CONST PI = 3.141592654#
  22. ORIGINE.x = 240!
  23. ORIGINE.y = 240!
  24. DIM raggioDellOrologio AS SINGLE
  25. raggioDellOrologio = 220!
  26. CALL quadrante(raggioDellOrologio * 1!)
  27. DIM adesso AS DOUBLE
  28. DIM prima AS DOUBLE
  29. prima = 0#
  30. DO
  31.     adesso = campione(TIMER, 1# / 6#)
  32.     IF adesso > prima THEN
  33.         CALL secondi(raggioDellOrologio * 1!, prima, 0)
  34.         CALL minuti(raggioDellOrologio * 1!, prima, 0)
  35.         CALL ore(raggioDellOrologio * 1!, prima, 0)
  36.         CALL secondi(raggioDellOrologio * 1!, adesso, 4)
  37.         CALL minuti(raggioDellOrologio * 1!, adesso, 2)
  38.         CALL ore(raggioDellOrologio * 1!, adesso, 8)
  39.         prima = adesso
  40.     END IF
  41. LOOP WHILE INKEY$ = ""
  42. CLS
  43.  
  44. FUNCTION campione# (num AS DOUBLE, mo AS DOUBLE)
  45. DIM q AS DOUBLE
  46. DIM segno AS DOUBLE
  47. q = num / mo
  48. IF q >= 0# THEN
  49.     LET segno = 1#
  50. ELSE
  51.     LET segno = 0# - 1#
  52. END IF
  53. LET campione# = mo * INT(ABS(q)) * segno
  54. END FUNCTION
  55.  
  56. SUB linea (s AS segmento, colore AS INTEGER)
  57. DIM x0 AS SINGLE
  58. DIM y0 AS SINGLE
  59. DIM xf AS SINGLE
  60. DIM yf AS SINGLE
  61. x0 = ORIGINE.x + s.inizio.x
  62. y0 = ORIGINE.y - s.inizio.y
  63. xf = ORIGINE.x + s.fine.x
  64. yf = ORIGINE.y - s.fine.y
  65. LINE (x0, y0)-(xf, yf), colore MOD 15
  66. END SUB
  67.  
  68. '
  69. SUB minuti (raggio AS SINGLE, t AS DOUBLE, colore AS INTEGER)
  70. DIM l1 AS segmento
  71. DIM l2 AS segmento
  72. DIM l3 AS segmento
  73. DIM raggioLancetta AS SINGLE
  74. raggioLancetta = .55 * raggio
  75. DIM lato AS SINGLE
  76. DIM alfa AS SINGLE
  77. DIM min AS SINGLE
  78. LET lato = .14# * raggio
  79. l1.inizio.x = raggioLancetta + lato
  80. l1.inizio.y = 0!
  81. l1.fine.x = raggioLancetta
  82. l1.fine.y = lato * .5
  83. l2.inizio = l1.fine
  84. l2.fine.x = raggioLancetta
  85. l2.fine.y = 0# - lato * .5#
  86. l3.inizio = l2.fine
  87. l3.fine = l1.inizio
  88. min = resto(t / 60!, 60!)
  89. alfa = (90! - 6! * min) * PI / 180!
  90. CALL ruota(l1.inizio, alfa)
  91. CALL ruota(l1.fine, alfa)
  92. CALL ruota(l2.inizio, alfa)
  93. CALL ruota(l2.fine, alfa)
  94. CALL ruota(l3.inizio, alfa)
  95. CALL ruota(l3.fine, alfa)
  96. CALL linea(l1, colore)
  97. CALL linea(l2, colore)
  98. CALL linea(l3, colore)
  99. END SUB
  100.  
  101. SUB ore (raggio AS SINGLE, t AS DOUBLE, colore AS INTEGER)
  102. DIM centro AS punto
  103. DIM alfa AS SINGLE
  104. DIM raggioLancetta AS SINGLE
  105. centro.x = 0!
  106. centro.y = raggio * .45
  107. raggioLancetta = raggio * .09
  108. alfa = 0 - 30! * resto(t / 3600!, 12!)
  109. CALL ruota(centro, alfa * PI / 180!)
  110. CIRCLE (ORIGINE.x + centro.x, ORIGINE.y - centro.y), raggioLancetta, colore
  111. END SUB
  112.  
  113. SUB pausa (tempo AS DOUBLE)
  114. DIM t0 AS DOUBLE
  115. t0 = TIMER
  116. DO
  117.  
  118. LOOP WHILE TIMER - t0 < tempo
  119. END SUB
  120.  
  121. SUB quadrante (raggio AS SINGLE)
  122. DIM al AS SINGLE
  123. DIM tacca AS segmento
  124. DIM colore AS INTEGER
  125. al = 0!
  126. WHILE al < 360!
  127.     tacca.inizio.x = raggio
  128.     tacca.inizio.y = 0!
  129.     tacca.fine.y = 0!
  130.     IF INT(al) MOD 30 = 0 THEN
  131.         tacca.fine.x = .88 * raggio
  132.         colore = 3
  133.     ELSE
  134.         tacca.fine.x = .95 * raggio
  135.         colore = 7
  136.     END IF
  137.     CALL ruota(tacca.inizio, al * PI / 180!)
  138.     CALL ruota(tacca.fine, al * PI / 180!)
  139.     CALL linea(tacca, colore)
  140.     al = al + 6!
  141. WEND
  142. END SUB
  143.  
  144. FUNCTION resto! (q AS SINGLE, d AS SINGLE)
  145. DIM divisioni AS LONG
  146. divisioni = INT(ABS(q / d))
  147. resto! = ABS(q) - ABS(d * divisioni)
  148. END FUNCTION
  149.  
  150. SUB ruota (p AS punto, teta AS SINGLE)
  151. DIM p2 AS punto
  152. p2.x = p.x * COS(teta) - p.y * SIN(teta)
  153. p2.y = p.x * SIN(teta) + p.y * COS(teta)
  154. p = p2
  155. END SUB
  156.  
  157. SUB secondi (raggio AS SINGLE, t AS DOUBLE, colore AS INTEGER)
  158. DIM lancetta AS segmento
  159. DIM al AS SINGLE
  160. DIM sec AS SINGLE
  161. sec = resto!(t * 1!, 60!)
  162. al = 90! - 6! * sec
  163. lancetta.inizio.x = .85 * raggio
  164. lancetta.inizio.y = 0!
  165. lancetta.fine.x = .7 * raggio
  166. lancetta.fine.y = 0!
  167. CALL ruota(lancetta.inizio, al * PI / 180!)
  168. CALL ruota(lancetta.fine, al * PI / 180!)
  169. CALL linea(lancetta, colore)
  170. END SUB