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

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

Рисуем счеты

Условие задачи: При помощи простейшей графики нарисовать счеты, отображающие числа.

Честно говоря, я недолюбливаю графику на QBasic и моя позиция такова: «Преподаватели, до сих пор заставляющие студентов рисовать в QBasic, ни хрена кроме рисования в QBasic делать не умеют или просто не понимают как это надо правильно делать, что это уже никому не нужно...».

Исходный код может быть следующий:


  1. DEFINT A-Z
  2. DECLARE SUB DRAWBONE (X, Y, TIP)
  3. CLS
  4. ST: INPUT "VVEDITE CHISLO: ", N#
  5. INTPART$ = LTRIM$(STR$(INT(N#)))
  6. DRB$ = LTRIM$(STR$(N# - INT(N#)))
  7. DROBPART$ = LTRIM$(STR$(INT((N# - INT(N#)) * 1000)))
  8. IF LEN(INTPART$) > 7 THEN
  9.     COLOR 12: PRINT "SLISHKOM BOLSHOE CHISLO... POVTORITE VVOD!"
  10.     COLOR 7: GOTO ST
  11. END IF
  12. SCREEN 12
  13. FOR U = 1 TO 5: OUT &H3C8, U: OUT &H3C9, 0: OUT &H3C9, 0: OUT &H3C9, 0: NEXT
  14. LINE (0, 0)-(639, 479), 1, BF
  15. FOR U = 1 TO 250
  16.     X = RND * 639: Y = RND * 479
  17.     R = RND * 40 + 10: J = 4 + RND * 10
  18.     CIRCLE (X, Y), R, 5, 0, 6.28, J
  19.     PAINT (X, Y), 2, 5
  20.     CIRCLE (X, Y), R, 2, 0, 6.28, J
  21.     R = R / 2
  22.     CIRCLE (X, Y), R, 5, 0, 6.28, J
  23.     PAINT (X, Y), 3, 5
  24.     CIRCLE (X, Y), R, 3, 0, 6.28, J
  25. NEXT
  26. LINE (140, 0)-(490, 479), 5, B
  27. PAINT (0, 0), 5
  28. LINE (160, 20)-(470, 459), 5, BF
  29. PAINT (639, 0), 5
  30. FOR Y = 0 TO 10
  31.     FOR I = 0 TO 155
  32.         PSET (160 + I, Y * 37 + 54), I \ 17 + 5 + RND
  33.         PSET (160 + I, Y * 37 + 55), I \ 17 + 5 + RND
  34.         PSET (470 - I, Y * 37 + 54), I \ 17 + 5 + RND
  35.         PSET (470 - I, Y * 37 + 55), I \ 17 + 5 + RND
  36.     NEXT
  37. NEXT
  38. OUT &H3C8, 1: OUT &H3C9, 156 \ 4: OUT &H3C9, 128 \ 4: OUT &H3C9, 68 \ 4
  39. OUT &H3C8, 2: OUT &H3C9, 148 \ 4: OUT &H3C9, 123 \ 4: OUT &H3C9, 82 \ 4
  40. OUT &H3C8, 3: OUT &H3C9, 128 \ 4: OUT &H3C9, 80 \ 4: OUT &H3C9, 30 \ 4
  41. OUT &H3C8, 4: OUT &H3C9, 110 \ 4: OUT &H3C9, 56 \ 4: OUT &H3C9, 3 \ 4
  42. FOR I = 0 TO 10
  43.     OUT &H3C8, I + 5: OUT &H3C9, I * 6: OUT &H3C9, I * 6: OUT &H3C9, I * 6
  44. NEXT
  45. IF LEN(DRB$) > 3 THEN
  46.     PRINT "DROBNAYA CHAST"
  47.     PRINT "UREZANA DO"
  48.     PRINT "TYSACHNYH!!!"
  49. END IF
  50. Y2 = 460
  51. FOR Y = 0 TO 10
  52.     IF Y < 7 THEN
  53.         C = VAL(MID$(INTPART$, 7 - Y, 1))
  54.         FOR K = 1 TO C
  55.             LINE (500 + K * 3, Y * 37 + 50)-(500 + K * 3, Y * 37 + 58), 15
  56.         NEXT
  57.     ELSEIF Y > 7 THEN
  58.         D = VAL(MID$(DROBPART$, Y - 7, 1))
  59.         FOR K = 1 TO D
  60.             LINE (500 + K * 3, Y * 37 + 50)-(500 + K * 3, Y * 37 + 58), 15
  61.         NEXT
  62.     END IF
  63.     FOR I = 0 TO 9
  64.         IF Y < 7 THEN
  65.             IF I = 4 OR I = 5 THEN TY = 1 ELSE TY = 0
  66.             DRAWBONE Y2, Y * 37 + 54, TY
  67.             IF I = 9 - C THEN Y2 = Y2 - 185
  68.         ELSEIF Y > 7 THEN
  69.             IF I = 4 OR I = 5 THEN TY = 1 ELSE TY = 0
  70.             DRAWBONE Y2, Y * 37 + 54, TY
  71.             IF I = 9 - D THEN Y2 = Y2 - 185
  72.         ELSE
  73.             IF I = 1 OR I = 2 THEN TY = 1 ELSE TY = 0
  74.             IF I < 4 THEN DRAWBONE Y2, Y * 37 + 54, TY
  75.         END IF
  76.         Y2 = Y2 - 12
  77.     NEXT
  78.     Y2 = 460
  79. NEXT
  80. WHILE INKEY$ = "": WEND
  81. SUB DRAWBONE (X, Y, TIP)
  82. R = 15
  83. IF TIP = 0 THEN
  84.     CIRCLE (X, Y), R, 15, 0, 6.28, 3
  85.     PAINT (X, Y), 4, 15
  86.     CIRCLE (X, Y), R, 4, 0, 6.28, 3
  87.     R = R / 4
  88.     CIRCLE (X, Y), R, 15, 0, 6.28, 3
  89.     PAINT (X, Y), 3, 15
  90.     CIRCLE (X, Y), R, 3, 0, 6.28, 3
  91.     R = R / 2
  92.     CIRCLE (X, Y), R, 15, 0, 6.28, 3
  93.     PAINT (X, Y), 1, 15
  94.     CIRCLE (X, Y), R, 1, 0, 6.28, 3
  95.     PSET (X, Y), 13
  96. ELSE
  97.     CIRCLE (X, Y), R, 15, 0, 6.28, 3
  98.     PAINT (X, Y), 6, 15
  99.     CIRCLE (X, Y), R, 6, 0, 6.28, 3
  100.     R = R / 4
  101.     CIRCLE (X, Y), R, 15, 0, 6.28, 3
  102.     PAINT (X, Y), 7, 15
  103.     CIRCLE (X, Y), R, 7, 0, 6.28, 3
  104.     R = R / 2
  105.     CIRCLE (X, Y), R, 15, 0, 6.28, 3
  106.     PAINT (X, Y), 10, 15
  107.     CIRCLE (X, Y), R, 10, 0, 6.28, 3
  108.     PSET (X, Y), 14
  109. END IF
  110. END SUB

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

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


Введем «154» и посмотрим на результат. 

Рисунок 2 – Результат отрисовки  счетов

Рисунок 2 – Результат отрисовки  счетов

 

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

 

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

 

< Предыдущая статья
Анимация фейерверка
Следующая статья >
Бейсик как язык программирования и его история

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