Перші уроки qbasic

5. Робота з монітором в текстовому режимі

Монітор сучасного комп'ютера може працювати в двох режимах: текстовому і графічному. У мові програмування Quick Basic передбачені способи виведення інформації на екран в обох режимах.

Розглянемо, що і яким чином можна виводити на екран в текстовому режимі.

5.1. Управління кольором в текстовому режимі

Оператор COLOR цвет_сімвола, цвет_фона встановлює колір виведеного символу і колір фону під символом.

Колір символу - це число від 0 до 15, тобто символ може бути виведений на екран одним з 16 кольорів.

Колір фону - це число від 0 до 7.

Якщо оператора COLOR в програмі немає зовсім, то Quick Basic за замовчуванням встановлює колір 7 (білий) для символу і колір 0 (чорний) для фону.

Кожен колір - це комбінація трьох основних кольорів - червоного, зеленого і синього. Кожен колір може виводитися з низькою або високою інтенсивністю (яскравістю).

Складемо таблицю кольорів. Наявність в кольорі будь-якої колірної компоненти будемо відзначати одиницею, а її відсутність - нулем.

Якщо до квітів, зазначеним в таблиці, додати 16, то символи будуть виводитися тим же кольором, але крім того почнуть мигати. Таким чином, якщо в якості кольору символу вказано код із значенням з 16 по 31, то ми отримаємо відповідний миготливий колір.

Приклад: звичайний червоний - 4; миготливий - 20.

Завдання. Завантажте програму PRG.BAS і зробіть смужки різних кольорів.

Деякі символи не так-то просто вивести на екран просто тому, що їх немає на клавіатурі. Це, зокрема, відноситься до символів псевдографіки.

Псевдографіка - це символи, за допомогою яких можна малювати лінії, рамки та інші графічні зображення в текстовому режимі. Символи псевдографіки відрізняються від звичайних символів тим, що займають всю ширину (висоту) місця, відведеного символу на екрані. Тому вони, будучи поставлені поруч, зливаються і утворюють безперервні лінії.

Щоб вивести на екран символ, відсутній на клавіатурі. потрібно натиснути клавішу Alt і, не відпускаючи її, іншою рукою набрати код символу (число від 0 до 255). (Деякі драйвери клавіатури мають режим набору псевдосімволов.)

Наведемо коди деяких символів.

Завдання. Вивести на екран таблицю символів.

Рішення. За допомогою функції CHR $ отримаємо символ по його коду:

і відразу виведемо його на екран оператором PRINT. Щоб все символи помістилися на екрані, розташуємо їх у вигляді таблиці 16х16. Пронумеруємо рядки і стовпці таблиці числами від 0 до 15. Тоді код символу, що стоїть на перетині i-го рядка і j-го стовпця. дорівнює значенню 16 * i + j. Організуємо висновок таблиці по рядках:

Запишемо програму під ім'ям TABL.BAS і виконаємо її. На екрані з'явиться таблиця, проте деякі місця в ній залишаться порожніми - для цих кодів немає графічного представлення. Але це не означає, що ними не можна скористатися в програмі! Так, наприклад, при виконанні оператора PRINT CHR $ (7) лунає звуковий сигнал, PRINT CHR $ (12) очищає екран, PRINT CHR $ (13) переводить курсор на новий рядок і т.д.

Звичайно, частіше за все, ті ж дії можна виконати "стандартними" операторами: BEEP - звуковий сигнал, CLS - очищення екрану, переклад рядка робиться автоматично після виведення на екран (якщо тільки в кінці оператора PRINT не варто крапка з комою для придушення перекладу рядка! ). Іноді знання коду символу необхідно. Неможливо, наприклад, вивести оператором PRINT текст, що містить лапки, так як останні сприймаються як обмежувачі. Щоб вивести на екран фразу: "Дивіться фільми в кінотеатрі" Космос "!" Слід написати

PRINT "Дивіться фільми в кінотеатрі"; CHR $ (34); "Космос"; CHR $ (34); "!"

PRINT "Дивіться фільми в кінотеатрі" + CHR $ (34) + "Космос" + CHR $ (34) + "!"

Повернемося до програми TABL.BAS. Оскільки висновок символу з кодом 12 еквівалентний оператору CLS. то з екрану зітреться зображення попередніх символів, і ми їх не побачимо (хіба що зауважимо, як щось майнуло на екрані). Вставимо, тому, перевірку умови: код символом не дорівнює 12 (Так як знака »не дорівнює" ні на клавіатурі, то він зображується двома символами: <> або><).

Завдання. Користуючись символами псевдографіки "намалюйте" на екрані рамку, сходи, прапор, паркан і т.д.

6. Робота з монітором в графічному режимі

У графічному режимі мінімальним елементом, який можна вивести на екран, є не символ, а піксель. Піксель (точка екрану) являє собою крихітний прямокутник, розміри якого залежать від встановленого графічного режиму. Верхня ліва точка екрану має координату (0,0), вісь ОХ направлена ​​вправо, вісь Про Y - вниз, тобто чим нижче на екрані розташована точка, тим більше її координата по осі OY ..

Оператор SCREEN номер режиму переводить режим роботи екрану з текстового в графічний із заданим номером. Якщо оператор SCREEN не вказано, то мається на увазі текстовий режим. Текстовий режим має номер 0, тому, якщо потрібно з графічного режиму перейти в текстовий, слід використовувати SCREEN 0. Іноді при поверненні з графічного режиму (наприклад, з SCREEN 7) символи тексту стають широкими. Повернути їм нормальні розміри можна тільки оператором WIDTH 80. Графічні режими розрізняються дозволом (кількістю "точок") екрану і кількістю можливих кольорів.

Наприклад, SCREEN 7 встановлює дозвіл екрана в 320 точок по горизонталі і 200 точок по вертикалі. Положення довільної точки на екрані задається двома числами (x, y) в екранній системі координат. Від декартових координат ця система відрізняється тим, що вісь Oy спрямована вниз, а не вгору.

У графічному режимі на екран крім символів можна виводити і геометричні фігури: точки, лінії, прямокутники, кола та т.д. Замкнені фігури можна зафарбовувати.

6.1. Малювання точок і ліній

Оператор PSET (x, y) [, колір] зафарбовує точку екрану заданим кольором.

Оператор LINE (x1, y1) - (x2, y2) [, колір] малює відрізок, що з'єднує на екрані крапки з координатами (x1, y1) і (x2, y2)

Оператор LINE - (x2, y2) [, колір] малює відрізок, що з'єднує останню виведену на екран точку з точкою (x2, y2).

Колір в цих операторах задається числом від 0 до 15. Якщо колір в графічних операторах не вказано, то все лінії малюються білим кольором. (Про те, які можуть бути кольору в різних графічних режимах, ми поговоримо пізніше.)

Приклад. З'єднати точки (20, 45) і (38, 144).

Завдання. Побудувати на екрані трикутник, чотирикутник, п'ятикутник; намалювати будиночок. Записати програму "Будиночок" в файл HOUSE.BAS.

6.2. Прямокутники і квадрати

Малювати будиночок окремими лініями - не самий раціональний спосіб. Легко побачити, що будиночок являє собою прямокутник з дахом з двох відрізків. (Так малюють будиночок майже все, крім геніальних фантазерів і професійних художників.) А намалювати прямокутник можна одним оператором

LINE (x1, y1) - (x2, y2), [колір], B

Цей оператор малює рамку-прямокутник зі сторонами, паралельними кордонів екрану. Точки (x1, y1) і (x2, y2) суть дві вершини прямокутника, розташовані по одній з його діагоналей. Якщо параметр колір відсутній, то буде намальована біла рамка. (Але "зайва" кома повинна залишитися!)

Оскільки точки екрану представляють собою маленькі прямоугольнички, то спроба намалювати квадрат оператором

LINE (20, 20) - (120, 120). B

зазнає невдачі. Висота цього "квадрата" виявиться більше, ніж ширина, хоча обидві сторони містять однакове число пікселів. Зменшимо число точок в висоті "квадрата" в 1.2 рази (для SCREEN 1!) Або в стільки ж разів збільшимо ширину "квадрата" - тільки тоді ми отримаємо істинний квадрат. Поправочний коефіцієнт назвемо "коефіцієнтом витягнутості" пікселя.

Оператор LINE (x1, y1) - (x2, y2), [колір], BF малює такий же, але зафарбований прямокутник.

Завдання. Намалювати на екрані піраміду з 10 сходинок-прямокутників.

Рішення. Скористаємося тим, що піраміда має осьову симетрію. Розташуємо вісь піраміди посередині екрану. Пронумеруємо прямокутники зверху вниз числами від 1 до 10. Очевидно, що значення x1, y1, x2, y2 залежать від номера прямокутника. В силу симетрії, щоб отримати x1, потрібно від 160 відняти щось, а щоб отримати x2 - додати стільки ж.

Складемо допоміжну табличку.

Оператор COLOR в цьому режимі має свій особливий синтаксис:

COLOR цвет_фона, номер_палітри

Вибір кольору фону набагато багатше - він може бути будь-яким з 16 основних кольорів (від 0 до 15).

За замовчуванням SCREEN 1 встановлює першу палітру.

SCREEN 2 задає дозвіл 640 точок по горизонталі на 200 точок по вертикалі. У цьому графічному режимі можливі тільки два кольори - чорний і білий, задані "раз і назавжди". Використання оператора COLOR в цьому режимі некоректно і викличе повідомлення про помилку "Illegal function call" ( "Неприпустимий виклик функції").

Висота пікселя в цьому режимі більше його ширини в 2.4 рази.

SCREEN 7 задає дозвіл 320 точок по горизонталі на 200 точок по вертикалі, отже, "коефіцієнт витягнутості" пікселя. як і в SCREEN 1 дорівнює 1.2 ..

В цьому і наступних режимах оператор COLOR управляє кольором ліній, кольором фону екрану і кольором символів тексту. Можна вказувати колір малювання і в кожному графічному операторі (якщо колір пропущений, то лінія малюється кольором, заданим в операторі COLOR. А якщо немає і оператора - то яскраво-білим кольором). Оператор COLOR має наступний вигляд:

COLOR цвет_лініі, цвет_фона

Колір лінії - число від 0 до 15, колір фону - число від 0 до 7. Задані параметри поширюються і на текстовий висновок, але на відміну від текстового режиму не можна вивести на екран миготливі символи. Крім того, зміна кольору фону діє і на вже виведений текст!

SCREEN 8 задає дозвіл 640 точок по горизонталі на 200 точок по вертикалі ( "коефіцієнт витягнутості" = 2.4), а SCREEN 9 - 640 точок по горизонталі на 350 точок по вертикалі. Точне значення "коефіцієнта витягнутості" в SCREEN 9 одно 48/35. що практично дорівнює 1.37.

Для моніторів типу VGA і SVGA можливі і інші графічні режими. Найчастіше використовуються режим SCREEN 12 з роздільною здатністю 640 точок по горизонталі на 480 точок по вертикалі, в якому "коефіцієнт витягнутості" в точності дорівнює 1. Однак в цьому режимі в операторі COLOR вказується тільки один параметр - колір лінії (символу). Колір фону оператором не ставить!

Завдання. Завантажте програму PIRAMIDA.BAS і подивіться результат виконання в розглянутих графічних режимах. Зробіть сходинки піраміди різних кольорів. Підпишіть малюнок (використовуйте оператор COLOR для завдання кольору фону і символів тексту).

6.5. Зафарбування довільної області

Якщо на екрані намальована замкнута крива, то область всередині неї можна зафарбувати. Також можна зафарбувати і область, що залишилася зовні від кривої. Для цього використовується оператор

PAINT (x, y), цвет_закраскі, цвет_граніци

Точка (x, y) повинна потрапити всередину області, що підлягає зафарбовування.

Якщо межа області "дірява", то фарба виллється за межі області, навіть якщо дірка всього в один піксель. Те ж саме станеться, якщо межа області містить через недогляд шматочок іншого кольору - для оператора PAINT це все одно що дірка.

Приклад. Намалювати прапор Японії - червоне коло на білому тлі.