Заливка экрана - QBasic

Узнай цену своей работы

Формулировка задачи:

Может кто подскажет, каким образом в QuickBasic осуществить заливку экрана в текстовом режиме (нужно, чтобы работало под NTVDM)?

Решение задачи: «Заливка экрана»

textual
Листинг программы
  1. DECLARE SUB Blit ()
  2. DECLARE SUB BrozLN (x1%, y1%, x2%, y2%, cv%)
  3. DECLARE SUB NullPg ()
  4. DECLARE SUB Blit ()
  5. DECLARE SUB PaintXY (x%, y%, c%)
  6. DECLARE SUB Obrazec ()
  7.  
  8. CONST MaxIndx = 1000
  9. CONST Debug = 0   ' 1 - Режим демонстрации работы алгоритма
  10. DIM SHARED Scr(79, 99) AS INTEGER
  11. DIM SHARED Prov%(MaxIndx, 1), TekTk%, TekDob%, TekCv%
  12.  
  13. SCREEN 0
  14. WIDTH 80, 50
  15. CLS 2
  16.  
  17.   Obrazec
  18.   Blit
  19.   PRINT "Unpainted... Press any key...";
  20.   WHILE INKEY$ = "": WEND
  21.   PaintXY 5, 8, 1
  22.   Blit
  23.   LOCATE , 1: PRINT "Painted..."
  24.  
  25. SUB Blit
  26. DIM cv(1, 1) AS INTEGER
  27. cv(0, 0) = 0
  28. cv(1, 0) = 223
  29. cv(0, 1) = 220
  30. cv(1, 1) = 219
  31.  DEF SEG = &HB800
  32.   FOR y = 0 TO 49
  33.      FOR x = 0 TO 79
  34.        POKE y * 160 + x + x, cv(Scr(x, y + y), Scr(x, y + y + 1))
  35.      NEXT
  36.   NEXT
  37.  DEF SEG
  38. END SUB
  39.  
  40. SUB BrozLN (x1%, y1%, x2%, y2%, cv%)
  41.    StpX% = x2% - x1%
  42.    StpY% = y2% - y1%
  43.    DlX% = ABS(StpX% + 1)
  44.    DlY% = ABS(StpY% + 1)
  45.  
  46.    StpX% = SGN(StpX%)
  47.    StpY% = SGN(StpY%)
  48.    Scr(x1%, y1%) = cv%
  49.  
  50.    IF DlX% >= DlY% THEN   ' Передвигаемся по X
  51.      Px% = x1%: Py% = y1%: Nabor% = 0: Plus% = DlY%
  52.      DO
  53.        Nabor% = Nabor% + Plus%
  54.        Px% = Px% + StpX%
  55.        IF Nabor% >= DlX% THEN
  56.          Py% = Py% + StpY%
  57.          Nabor% = Nabor% - DlX%
  58.        END IF
  59.        Scr(Px%, Py%) = cv%
  60.      LOOP UNTIL Px% = x2%
  61.    ELSE
  62.      Px% = x1%: Py% = y1%: Nabor% = 0: Plus% = DlX%
  63.      DO
  64.        Nabor% = Nabor% + Plus%
  65.        Py% = Py% + StpY%
  66.        IF Nabor% >= DlY% THEN
  67.          Px% = Px% + StpX%
  68.          Nabor% = Nabor% - DlY%
  69.        END IF
  70.        Scr(Px%, Py%) = cv%
  71.      LOOP UNTIL Py% = y2%
  72.    END IF
  73. END SUB
  74.  
  75. SUB NullPg
  76.   ERASE Scr
  77.  
  78. END SUB
  79.  
  80. SUB Obrazec
  81.     BrozLN 4, 6, 4, 11, 1
  82.     BrozLN 4, 11, 32, 11, 1
  83.     BrozLN 4, 6, 44, 6, 1
  84.     BrozLN 44, 6, 56, 12, 1
  85.     BrozLN 56, 12, 63, 3, 1
  86.     BrozLN 63, 5, 77, 5, 1
  87.     BrozLN 77, 5, 77, 35, 1
  88.     BrozLN 33, 11, 44, 11, 1
  89.     BrozLN 44, 11, 56, 17, 1
  90.     BrozLN 56, 17, 63, 8, 1
  91.     BrozLN 63, 10, 73, 10, 1
  92.     BrozLN 73, 10, 73, 30, 1
  93.     BrozLN 77, 35, 69, 35, 1
  94.     BrozLN 69, 35, 69, 14, 1
  95.     BrozLN 65, 10, 65, 41, 1
  96.     BrozLN 65, 41, 72, 82, 1
  97.     BrozLN 69, 35, 77, 85, 1
  98.     BrozLN 77, 85, 77, 90, 1
  99.     BrozLN 77, 90, 68, 90, 1
  100.     BrozLN 67, 90, 52, 75, 1
  101.     BrozLN 52, 75, 48, 70, 1
  102.     BrozLN 48, 70, 45, 64, 1
  103.     BrozLN 45, 64, 43, 55, 1
  104.     BrozLN 43, 55, 43, 41, 1
  105.     BrozLN 72, 82, 68, 82, 1
  106.     BrozLN 68, 82, 54, 68, 1
  107.     BrozLN 54, 68, 51, 63, 1
  108.     BrozLN 51, 63, 49, 57, 1
  109.     BrozLN 49, 57, 49, 41, 1
  110.     BrozLN 49, 41, 53, 41, 1
  111.     BrozLN 53, 41, 63, 73, 1
  112.     BrozLN 63, 73, 66, 73, 1
  113.     BrozLN 66, 73, 58, 25, 1
  114.     BrozLN 58, 25, 25, 25, 1
  115.     BrozLN 25, 25, 25, 35, 1
  116.     BrozLN 25, 35, 7, 35, 1
  117.     BrozLN 7, 35, 7, 30, 1
  118.     BrozLN 7, 30, 20, 30, 1
  119.     BrozLN 20, 30, 20, 23, 1
  120.     BrozLN 20, 23, 61, 23, 1
  121.     BrozLN 61, 23, 61, 20, 1
  122.     BrozLN 61, 20, 52, 20, 1
  123.     BrozLN 52, 20, 43, 15, 1
  124.     BrozLN 43, 15, 18, 15, 1
  125.     BrozLN 18, 15, 3, 24, 1
  126.     BrozLN 3, 24, 3, 40, 1
  127.     BrozLN 3, 40, 25, 40, 1
  128.     BrozLN 25, 40, 25, 44, 1
  129.     BrozLN 25, 44, 3, 44, 1
  130.     BrozLN 3, 44, 3, 49, 1
  131.     BrozLN 3, 49, 25, 49, 1
  132.     BrozLN 25, 49, 25, 53, 1
  133.     BrozLN 25, 53, 3, 53, 1
  134.     BrozLN 3, 53, 3, 58, 1
  135.     BrozLN 3, 58, 25, 58, 1
  136.     BrozLN 25, 58, 25, 62, 1
  137.     BrozLN 25, 62, 3, 62, 1
  138.     BrozLN 3, 62, 3, 67, 1
  139.     BrozLN 3, 67, 25, 67, 1
  140.     BrozLN 25, 67, 2, 89, 1
  141.     BrozLN 4, 89, 9, 95, 1
  142.     BrozLN 9, 95, 65, 95, 1
  143.     BrozLN 65, 95, 39, 69, 1
  144.     BrozLN 39, 69, 39, 41, 1
  145.     BrozLN 39, 41, 43, 41, 1
  146. END SUB
  147.  
  148. SUB PaintXY (x%, y%, c%)
  149.  
  150.  TekCv% = Scr(x%, y%)   ' Возьмем цвет под точкой закраса
  151.  TekDob% = 1            ' Позицию точки в очередь
  152.  Prov%(TekDob%, 0) = x%
  153.  Prov%(TekDob%, 1) = y%
  154.  DO
  155.    TekTk% = TekTk% + 1
  156.    IF TekTk% > MaxIndx THEN TekTk% = 0
  157.    Xtt% = Prov%(TekTk%, 0)
  158.    Ytt% = Prov%(TekTk%, 1)
  159.    CvP% = Scr(Xtt%, Ytt%)   ' Цвет под точкой
  160.    IF CvP% = TekCv% THEN
  161.      Scr(Xtt%, Ytt%) = c%
  162.        IF Xtt% > 0 THEN
  163.          TekDob% = TekDob% + 1
  164.          IF TekDob% > MaxIndx THEN TekDob% = 0
  165.          Prov%(TekDob%, 0) = Xtt% - 1
  166.          Prov%(TekDob%, 1) = Ytt%
  167.        END IF
  168.        IF Xtt% < 79 THEN
  169.          TekDob% = TekDob% + 1
  170.          IF TekDob% > MaxIndx THEN TekDob% = 0
  171.          Prov%(TekDob%, 0) = Xtt% + 1
  172.          Prov%(TekDob%, 1) = Ytt%
  173.        END IF
  174.        IF Ytt% > 0 THEN
  175.          TekDob% = TekDob% + 1
  176.          IF TekDob% > MaxIndx THEN TekDob% = 0
  177.          Prov%(TekDob%, 0) = Xtt%
  178.          Prov%(TekDob%, 1) = Ytt% - 1
  179.        END IF
  180.        IF Ytt% < 99 THEN
  181.          TekDob% = TekDob% + 1
  182.          IF TekDob% > MaxIndx THEN TekDob% = 0
  183.          Prov%(TekDob%, 0) = Xtt%
  184.          Prov%(TekDob%, 1) = Ytt% + 1
  185.        END IF
  186.    END IF
  187.    IF Debug = 1 THEN
  188.      k% = k% + 1
  189.      IF k% > 50 THEN
  190.        k% = 0
  191.        T = TIMER
  192.        Blit
  193.        WHILE T = TIMER: WEND
  194.      END IF
  195.    END IF
  196.  LOOP UNTIL TekTk% = TekDob%
  197.  
  198. END SUB

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.133 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы