QBASICBOOK.ru: сайт про QB64

Опубликовано: 2020-05-13 08:00:00

Цифровые часы

Эта программа от автора, называющим себя Quiet Snow. Представляет собой цифровые часы с адаптированной функцией снятия скриншота под SCREEN 12, пользуйтесь на здоровье.

Рассмотрим исходный текст программы:


  1. DECLARE SUB MAKEBMP (NAMEBMP$)
  2. DECLARE SUB PREPARE ()
  3. '  PROTSEDURY PECHATI
  4. DECLARE SUB DRAWCHAR (X%, Y%, CH%, POZ%, MSHTB!)
  5. DECLARE SUB DRAWCLOCK (XDR%, YDR%, TM$, MASHTAB!)
  6. '  MASSIVY
  7. CONST DATADL = 228
  8. DIM SHARED SIZES%(1 TO 7), SOST%(9, 1 TO 7), I%, K%
  9. DIM SHARED X1%(1 TO 7, 1 TO 6), X2%(1 TO 7, 1 TO 6)
  10. DIM SHARED Y1%(1 TO 7, 1 TO 6), Y2%(1 TO 7, 1 TO 6)
  11. DIM SHARED PZX%(1 TO 7), PZY%(1 TO 7) ' PAINT ZONE - ZONA ZAKRASKI
  12. SCREEN 12 '  640X480X16TSV.
  13. PREPARE
  14. '  CHITAYEM RAZMERNOSTI
  15. FOR I% = 1 TO 7
  16.     READ SIZES%(I%)
  17. NEXT
  18. '  CHITAYEM KOORDINATY
  19. FOR I% = 1 TO 7
  20.     ZX% = 0: ZY% = 0
  21.     FOR K% = 1 TO SIZES%(I%)
  22.         READ X1%(I%, K%), Y1%(I%, K%), X2%(I%, K%), Y2%(I%, K%)
  23.         ZX% = ZX% + X1%(I%, K%) + X2%(I%, K%)
  24.         ZY% = ZY% + Y1%(I%, K%) + Y2%(I%, K%)
  25.     NEXT
  26.     PZX%(I%) = ZX% / (SIZES%(I%) * 2): PZY%(I%) = ZY% / (SIZES%(I%) * 2)
  27. NEXT
  28. '  CHITAYEM SOSTOYANIYA
  29. I% = 0
  30. DO: READ K%
  31.     IF K% = -1 THEN
  32.         I% = I% + 1
  33.     ELSE
  34.         IF K% <> -2 THEN SOST%(I%, K%) = 1
  35.     END IF
  36. LOOP UNTIL K% = -2
  37. DO: KB$ = INKEY$
  38.     G! = TIMER: WHILE G! + .5 < TIMER: WEND
  39.     DRAWCLOCK 100, 250, TIME$, 4
  40.     IF INT(TIMER * 2) AND 1 THEN
  41.         LINE (215, 220)-(225, 230), 2, BF
  42.         LINE (215, 270)-(225, 280), 2, BF
  43.         LINE (394, 220)-(404, 230), 2, BF
  44.         LINE (394, 270)-(404, 280), 2, BF
  45.     ELSE
  46.         LINE (215, 220)-(225, 230), 4, BF
  47.         LINE (215, 270)-(225, 280), 4, BF
  48.         LINE (394, 220)-(404, 230), 4, BF
  49.         LINE (394, 270)-(404, 280), 4, BF
  50.     END IF
  51.     IF KB$ = CHR$(32) THEN MAKEBMP "CLOCK"
  52. LOOP UNTIL KB$ = CHR$(27)
  53. END
  54. '  RAZMERY
  55. DATA 5,6,5,6,5,6,5
  56. ' 1 > LEVYY VERKH
  57. DATA -105,-196,-114,-187
  58. DATA -105,-196,-57,-148
  59. DATA -114,-187,-114,-3
  60. DATA -57,-148,-57,-40
  61. DATA -114,-3,-57,-40
  62. ' 2 > VERKH
  63. DATA -93,-208,-102,-199
  64. DATA -102,-199,-54,-151
  65. DATA -93,-208,93,-208
  66. DATA -54,-151,54,-151
  67. DATA 93,-208,102,-199
  68. DATA 102,-199,54,-151
  69. ' 3 > PRAVYY VERKH
  70. DATA 105,-196,114,-187
  71. DATA 105,-196,57,-148
  72. DATA 114,-187,114,-3
  73. DATA 57,-148,57,-40
  74. DATA 57,-40,114,-3
  75. '  4 > TSENTR
  76. DATA -109,0,-59,-33
  77. DATA -109,0,-59,33
  78. DATA -59,-33,59,-33
  79. DATA -59,33,59,33
  80. DATA 59,-33,109,0
  81. DATA 109,0,59,33
  82. '  5 > LEVYY NIZ
  83. DATA -114,3,-57,40
  84. DATA -114,3,-114,187
  85. DATA -57,40,-57,148
  86. DATA -114,187,-105,196
  87. DATA -57,148,-105,196
  88. '  6 > NIZ
  89. DATA -102,199,-54,151
  90. DATA -102,199,-93,208
  91. DATA -54,151,54,151
  92. DATA -93,208,93,208
  93. DATA 54,151,102,199
  94. DATA 102,199,93,208
  95. '  7 > PRAVYY NIZ
  96. DATA 114,3,57,40
  97. DATA 57,40,57,148
  98. DATA 114,3,114,187
  99. DATA 57,148,105,196
  100. DATA 114,187,105,196
  101. '   SOSTOYANIYA
  102. DATA 2,1,3,5,7,6,-1
  103. DATA 3,7,-1
  104. DATA 2,3,4,5,6,-1
  105. DATA 2,3,4,7,6,-1
  106. DATA 1,4,3,7,-1
  107. DATA 2,1,4,7,6,-1
  108. DATA 2,1,4,5,7,6,-1
  109. DATA 2,3,7,-1
  110. DATA 2,1,3,4,5,7,6,-1
  111. DATA 2,1,3,4,7,6,-1,-2
  112. '    ZAGOLOVOK *.BMP*
  113. BGDT: DATA 66,77,54,254,0,0,0,0,0,0,54,4,0,0,40,0,0
  114. DATA 0,128,2,0,0,224,1,0,0,1,0,8,0,0,0,0,0,0
  115. DATA 250,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0
  116. SUB DRAWCHAR (X%, Y%, CH%, POZ%, MSHTB!)
  117. PCVTL% = 1: PCVTZ% = 2 ' TSVETA DLYA PRISUTSTVUYUSHCHIKH
  118. OCVTL% = 3: OCVTZ% = 4 ' TSVETA DLYA OTSUTSTVUYUSHCHIKH
  119. XPLS% = ((DATADL / MSHTB!) * 1.05) * POZ%
  120. FOR I% = 1 TO 7 ' OT 1-GO DO 7-MI CHASTEY
  121.     IF SOST%(CH%, I%) = 1 THEN ' YESLI CHAST VKLYUCHENA, RISUYEM
  122.         CVTL% = PCVTL%: CVTZ% = PCVTZ%
  123.     ELSE CVTL% = OCVTL%: CVTZ% = OCVTZ%
  124.     END IF
  125.     FOR K% = 1 TO SIZES%(I%) ' RISUYEM VSE LINII
  126.         X11% = X1%(I%, K%) / MSHTB!: X22% = X2%(I%, K%) / MSHTB!
  127.         Y11% = Y1%(I%, K%) / MSHTB!: Y22% = Y2%(I%, K%) / MSHTB!
  128.         LINE (X11% + XPLS% + X%, Y11% + Y%)-(X22% + XPLS% + X%, Y22% + Y%), CVTL%
  129.     NEXT
  130.     PAINT (PZX%(I%) / MSHTB! + XPLS% + X%, PZY%(I%) / MSHTB! + Y%), CVTZ%, CVTL%
  131. NEXT
  132. END SUB
  133. SUB DRAWCLOCK (XDR%, YDR%, TM$, MASHTAB!)
  134. FOR U% = 1 TO LEN(TM$)
  135.     TC% = ASC(MID$(TM$, U%, 1))
  136.     IF TC% > 47 AND TC% < 58 THEN
  137.         DRAWCHAR XDR%, YDR%, TC% - 48, U% - 1, MASHTAB!
  138.     END IF
  139. NEXT
  140. END SUB
  141. SUB MAKEBMP (NAMEBMP$)
  142. '    SOZDAYEM *.BMP*
  143. OPEN NAMEBMP$ + ".BMP" FOR BINARY AS #3
  144. RESTORE BGDT
  145. FOR BYTE& = 1 TO 54
  146.     READ ZGLV%: PUT #3, BYTE&, ZGLV%
  147. NEXT BYTE&: BYTE& = 55
  148. FOR II% = 0 TO 255
  149.     OUT &H3C7, II%: R% = INP(&H3C9) * 4: G% = INP(&H3C9) * 4: B% = INP(&H3C9) * 4
  150.     BT1% = CVI(CHR$(B%) + CHR$(G%)): BT2% = CVI(CHR$(R%) + "?")
  151.     PUT #3, BYTE&, BT1%: PUT #3, BYTE& + 2, BT2%
  152.     BYTE& = BYTE& + 4
  153. NEXT II%
  154. FOR Y% = 479 TO 0 STEP -1
  155.     FOR X% = 0 TO 639
  156.         CVE% = POINT(X%, Y%)
  157.         PUT #3, BYTE&, CVE%: BYTE& = BYTE& + 1
  158.     NEXT X%
  159. NEXT Y%
  160. CLOSE #3
  161. END SUB
  162. SUB PREPARE
  163. OUT &H3C8, 1
  164. OUT &H3C9, 92 / 4: OUT &H3C9, 93 / 4: OUT &H3C9, 77 / 4
  165. OUT &H3C9, 21 / 4: OUT &H3C9, 26 / 4: OUT &H3C9, 19 / 4
  166. OUT &H3C9, 120 / 4: OUT &H3C9, 124 / 4: OUT &H3C9, 87 / 4
  167. OUT &H3C9, 110 / 4: OUT &H3C9, 118 / 4: OUT &H3C9, 86 / 4
  168. OUT &H3C9, 120 / 4: OUT &H3C9, 124 / 4: OUT &H3C9, 87 / 4
  169. LINE (50, 180)-(590, 320), 5, BF
  170. END SUB

Рисунок 1 – Исходный текст для построения цифровых часов 

Рисунок 1 – Исходный текст для построения цифровых часов

 Рисунок 2 – Результат построения цифровых часов

Рисунок 2 – Результат построения цифровых часов

Рисунок 3 – Правильно построения цифр на дисплее

Рисунок 3 – Построение цифр на дисплее

Спасибо за прочтение этой статьи.

 

Прикрепленные файлы:

< Предыдущая статья
Аналоговые часы
Следующая статья >
Циклоида

Выделите опечатку и нажмите Ctrl + Enter, чтобы отправить сообщение об ошибке.