Опубликовано: 2020-10-13 08:00:00
Рисуем счеты
Условие задачи: При помощи простейшей графики нарисовать счеты, отображающие числа.
Честно говоря, я недолюбливаю графику на QBasic и моя позиция такова: «Преподаватели, до сих пор заставляющие студентов рисовать в QBasic, ни хрена кроме рисования в QBasic делать не умеют или просто не понимают как это надо правильно делать, что это уже никому не нужно...».
Исходный код может быть следующий:
- DEFINT A-Z
- DECLARE SUB DRAWBONE (X, Y, TIP)
- CLS
- ST: INPUT "VVEDITE CHISLO: ", N#
- INTPART$ = LTRIM$(STR$(INT(N#)))
- DRB$ = LTRIM$(STR$(N# - INT(N#)))
- DROBPART$ = LTRIM$(STR$(INT((N# - INT(N#)) * 1000)))
- IF LEN(INTPART$) > 7 THEN
- COLOR 12: PRINT "SLISHKOM BOLSHOE CHISLO... POVTORITE VVOD!"
- COLOR 7: GOTO ST
- END IF
- SCREEN 12
- FOR U = 1 TO 5: OUT &H3C8, U: OUT &H3C9, 0: OUT &H3C9, 0: OUT &H3C9, 0: NEXT
- LINE (0, 0)-(639, 479), 1, BF
- FOR U = 1 TO 250
- X = RND * 639: Y = RND * 479
- R = RND * 40 + 10: J = 4 + RND * 10
- CIRCLE (X, Y), R, 5, 0, 6.28, J
- PAINT (X, Y), 2, 5
- CIRCLE (X, Y), R, 2, 0, 6.28, J
- R = R / 2
- CIRCLE (X, Y), R, 5, 0, 6.28, J
- PAINT (X, Y), 3, 5
- CIRCLE (X, Y), R, 3, 0, 6.28, J
- NEXT
- LINE (140, 0)-(490, 479), 5, B
- PAINT (0, 0), 5
- LINE (160, 20)-(470, 459), 5, BF
- PAINT (639, 0), 5
- FOR Y = 0 TO 10
- FOR I = 0 TO 155
- PSET (160 + I, Y * 37 + 54), I \ 17 + 5 + RND
- PSET (160 + I, Y * 37 + 55), I \ 17 + 5 + RND
- PSET (470 - I, Y * 37 + 54), I \ 17 + 5 + RND
- PSET (470 - I, Y * 37 + 55), I \ 17 + 5 + RND
- NEXT
- NEXT
- OUT &H3C8, 1: OUT &H3C9, 156 \ 4: OUT &H3C9, 128 \ 4: OUT &H3C9, 68 \ 4
- OUT &H3C8, 2: OUT &H3C9, 148 \ 4: OUT &H3C9, 123 \ 4: OUT &H3C9, 82 \ 4
- OUT &H3C8, 3: OUT &H3C9, 128 \ 4: OUT &H3C9, 80 \ 4: OUT &H3C9, 30 \ 4
- OUT &H3C8, 4: OUT &H3C9, 110 \ 4: OUT &H3C9, 56 \ 4: OUT &H3C9, 3 \ 4
- FOR I = 0 TO 10
- OUT &H3C8, I + 5: OUT &H3C9, I * 6: OUT &H3C9, I * 6: OUT &H3C9, I * 6
- NEXT
- IF LEN(DRB$) > 3 THEN
- PRINT "DROBNAYA CHAST"
- PRINT "UREZANA DO"
- PRINT "TYSACHNYH!!!"
- END IF
- Y2 = 460
- FOR Y = 0 TO 10
- IF Y < 7 THEN
- C = VAL(MID$(INTPART$, 7 - Y, 1))
- FOR K = 1 TO C
- LINE (500 + K * 3, Y * 37 + 50)-(500 + K * 3, Y * 37 + 58), 15
- NEXT
- ELSEIF Y > 7 THEN
- D = VAL(MID$(DROBPART$, Y - 7, 1))
- FOR K = 1 TO D
- LINE (500 + K * 3, Y * 37 + 50)-(500 + K * 3, Y * 37 + 58), 15
- NEXT
- END IF
- FOR I = 0 TO 9
- IF Y < 7 THEN
- IF I = 4 OR I = 5 THEN TY = 1 ELSE TY = 0
- DRAWBONE Y2, Y * 37 + 54, TY
- IF I = 9 - C THEN Y2 = Y2 - 185
- ELSEIF Y > 7 THEN
- IF I = 4 OR I = 5 THEN TY = 1 ELSE TY = 0
- DRAWBONE Y2, Y * 37 + 54, TY
- IF I = 9 - D THEN Y2 = Y2 - 185
- ELSE
- IF I = 1 OR I = 2 THEN TY = 1 ELSE TY = 0
- IF I < 4 THEN DRAWBONE Y2, Y * 37 + 54, TY
- END IF
- Y2 = Y2 - 12
- NEXT
- Y2 = 460
- NEXT
- WHILE INKEY$ = "": WEND
- SUB DRAWBONE (X, Y, TIP)
- R = 15
- IF TIP = 0 THEN
- CIRCLE (X, Y), R, 15, 0, 6.28, 3
- PAINT (X, Y), 4, 15
- CIRCLE (X, Y), R, 4, 0, 6.28, 3
- R = R / 4
- CIRCLE (X, Y), R, 15, 0, 6.28, 3
- PAINT (X, Y), 3, 15
- CIRCLE (X, Y), R, 3, 0, 6.28, 3
- R = R / 2
- CIRCLE (X, Y), R, 15, 0, 6.28, 3
- PAINT (X, Y), 1, 15
- CIRCLE (X, Y), R, 1, 0, 6.28, 3
- PSET (X, Y), 13
- ELSE
- CIRCLE (X, Y), R, 15, 0, 6.28, 3
- PAINT (X, Y), 6, 15
- CIRCLE (X, Y), R, 6, 0, 6.28, 3
- R = R / 4
- CIRCLE (X, Y), R, 15, 0, 6.28, 3
- PAINT (X, Y), 7, 15
- CIRCLE (X, Y), R, 7, 0, 6.28, 3
- R = R / 2
- CIRCLE (X, Y), R, 15, 0, 6.28, 3
- PAINT (X, Y), 10, 15
- CIRCLE (X, Y), R, 10, 0, 6.28, 3
- PSET (X, Y), 14
- END IF
- END SUB
Рисунок 1 – Исходный текст для отрисовки счетов
Введем «154» и посмотрим на результат.
Рисунок 2 – Результат отрисовки счетов
Спасибо за прочтение этой статьи.
Прикрепленные файлы: