04 FreeBasic - графика
Практически всегда обучать программированию я начинал с графики. Часто приходят среднеклассники которые и математики ещё толком не знают. Графика же всегда красиво да и наглядно.
Теперь пришло время выбраться из онлайн компилятора FreeBASIC - он вам ничего такого не покажет)))
FBIde - среда программирования для FreeBASIC
В первом посте я упоминал эту среду программирования. Скачиваем и запускаем. Установка не должна вызвать трудностей - единственное место где нужно изменить выбор это подтвердить согласие,
а далее жмём далее)) я имею в виду кнопку Next
Кому русский более привычен чем english переходим в меню View(вид) -> Settings (настройки) и меняем английский на русский. У меня программа выдала какую-то ошибку, но после перезапуска FBIde частично руссифицировалась.
Но без знания английского никуда не денешся - учите)) и учтите, так что английское меню ещё одна возможность подучить английский.
Вот ссылка на рускоязычную справку по FreeBASIC. Так, как из среды вызывается справка англоязычная.
Графика в Бейсике (FreeBASIC)
До этого момента FreeBASIC у вас работал в текстовом режиме, а для графики необходимо включить один из графических режимов.
С тех пор как появились операционные системы раюотающие полностью в графическом режиме многие и не подозревают что есть ещё какой-то. Разное разрешение на мониторе - вот вам и разные режимы. Но так было не сразу. Сразу режими были лишь текстовые, и даже не цветные. Вот почему в таблице так много видеорежимов. появлялись новые видеоадаптеры(видеокарты по нынешнему, хоть это и не одно и то же), которые стали выводить первую графику, которая со временем получала все большую и большую разрешающую способность. Чем больше разрешающая способность - тем менее проявляется пиксельность изображения, тем менее ступенчастыми выглядят линии.
Чтобы начать хоть что-то рисовать на экране нужно перейти в графический режим.
SCREEN
SCREEN n - выбор графического режима с номером n.
Номер режима | Разре-шение | Видео-адаптер | Размер экрана в знакоместах | Размер символа (знакоместа) на экране, в пикселях | Цвета на экране палитра/цветов |
---|---|---|---|---|---|
1 | 320x200 | CGA | 40X25 | 8x8 | 16 фоновых, 1 из четырех комплектов на переднем плане |
2 | 640x200 | CGA | 80x25 | 8x8 | 16/2 |
7 | 320x200 | EGA | 40x25 | 8x8 | 16/16 |
8 | 640x200 | EGA | 80x25 | 8x8 | 16/16 |
9 | 640x350 | EGA | 80x25 или 80x43 | 8x14 или 8x8 | 16/16 |
11 | 640x480 | VGA | 80x30 или 80x60 | 8x16 или 8x8 | 256K / 2 |
12 | 640x480 | VGA | 80x30 или 80x60 | 8x16 или 8x8 | 256K / 16 |
13 | 320x200 | MCGA | 40X25 | 8X8 | 256K / 256 |
Здесь актуален только режим 12(ну и 13 частично) - поэтому если вы используете FreeBASIC в режиме совместимости с QB 'lang "qb"' - 13 это максимальный номер режима.
FreeBASIC добавляет ещё несколько режимов
Номер режима | Разрешение | Размер экрана в знакоместах | Размер символа(знакоместа) на экране, в пикселях | Цвета на экране палитра/цветов |
---|---|---|---|---|
14 | 320x240 | 40x30 | 8x8 | 256K / 256 или непосредственный цвет |
15 | 400x300 | 50x37 | 8x8 | 256K / 256 или непосредственный цвет |
16 | 512x384 | 64x24/64x48 | 8x16/8x8 | 256K / 256 или непосредственный цвет |
17 | 640x400 | 80x25/80x50 | 8x16/8x8 | 256K / 256 или непосредственный цвет |
18 | 640x480 | 80x30/80x60 | 8x16/8x8 | 256K / 256 или непосредственный цвет |
19 | 800x600 | 100x37/100x75 | 8x16/8x8 | 256K / 256 или непосредственный цвет |
20 | 1024x768 | 128x48/128x96 | 8x16/8x8 | 256K / 256 или непосредственный цвет |
21 | 1280x1024 | 160x64/160x128 | 8x16/8x8 | 256K / 256 или непосредственный цвет |
От выбора режима зависит его разрешение - количество точек на экране. Количество символов которые поммещаются в строке на экране и количество столбцов также зависят от номера режима. Помните оператор LOCATE? Он может гонять курсор на экране 80х25 символов. Устанавливая позицию для вывода оператором print. А так как символы на экране не всегда есть и могут быть в строго определённых местах употребляют термин знакоместо.
Представьте что экран это лист тетради в клеточку с размерами 80х25. Клеточки это и есть знакоместо, вписать буквы вы можете только по клеточкам. Выбирая иной режим вы выбираете размер этого листа в клеточку))
Для графики так же само, только точек намного больше и точки здесь называются пиксели (точка-пиксель) Точка может быть любого цвета(из числа возможных, а может и отсутствовать - но это все равно пискель, как знакоместо для тексового режима)
Напомню, что во всех режимах координаты отсчитываются от левого верхнего угла: слева-направо, сверху-вниз - как при письме/чтении, а не как в школе на математике)))
DRAW
Теперь рассмотрим первый оператор DRAW
Используют его так: DRAW "строка команд", в строке команд размещаются команды оператору для рисования. Например, DRAW "U70 E35 U70 H35 BU50 L50"
DRAW начинает рисовать из центра экрана. В строке задаётся направление куда и какой длины(сколько точек) рисовать линию. В одной строке может быть несколько команд.
У команд рисования есть префиксы:
B - оператор DRAW не рисует следующую команду, но точка смещается
N - линия рисуется, но точка не смещается
команда DRAW "U80 R80 D80 L80"
нарисует квадрат со стороной 80: рисовать вверх на 80 точек, вправо на 80 точек, вниз и влево на 80 точек.
Если к каждой команде добавить префикс N, то наш квадрат превратится в плюсик. После отрисовки линии, следующая линия рисуется не с новой точки, а с прежней. Нарисовать и вернуться назад.
Например нам нужно ещё один такой же квадрат слева нарисовать. Мы сначала сделаем отступ добавив к команде L
префикс B
- DRAW "BL160"
80 точек между квадратами и 80 для самого квадрата.
и повторив предыдущую команду нарисуем ещё один квадрат
DRAW "U80 R80 D80 L80"
DRAW "BL160"
DRAW "U80 R80 D80 L80"
всё это можно было бы записать в одной строке -
DRAW "U80 R80 D80 L80 BL160 U80 R80 D80 L80"
но тогда тяжелее искать где вы допустили ошибку или опечатку. Выбрали не то направление, или пропустили команду, например.
В строке команд можно указать цвет линий - Cn
, где
n цвет следующей линии (число от 0 до 15, если вы выбрали режим SCREEN 12
)
Команда M x,y рисует линию от текущей позиции к точке с координатами x,y относително левого верзнего угла экрана, это абсолютное движение. Если перед x,y поставить знак (+ или -) то смещение будет относительным, относительно текущей точки.
Есть ещё команда изменения масштаба Sn
, где
n коеффициент мастабирования, при n=4(это значение по умолчанию) смещение на 1 означает смещение на 1 пиксель(одну точку). Соответсвтенно увеличить масштаб вдвое можно командой S8
An
команда поворота на n*90 градусов
TAn
команда поворота на произвольный угол от 0 до 359 градусов
P p,b
команда закраски(заливки) цветом p, заливка идёт пока не встретится цвет b.
PSET
PSET (x,y),цвет
ставит точку на экране в координатах (x,y) относительно левого верхнего угла экрана. Если указано слово STEP то со смещением (x,y) относительно последней поставленной точки.
PSET STEP (x,y),цвет
LINE
LINE(x1,y1)-(x2,y2),цвет
рисует линию заданным цветом от точки с координатами (x1,y1) к точке с координатами (x2,y2). Если указано слово STEP перед координатами точки, то координаты относительно последней выведенной точки.
После указания цвета может стоять символ B или BF - тогда рисуется не линия, а прямоугольник у которого указанная линия будет диагональю. При BF прямоугольник будет закрашен.
CIRCLE
CIRCLE (x,y),радиус,цвет
Рисует круг с центром в точке (x,y) заданного радиуса и цвета. Так же может быть указано перед координатами слово STEP.
CIRCLE (x,y),радиус,цвет, угол1, угол2 - рисуется дуга от угла1 до угла2. Если эти числа отрицательные - края дуги соединятся с центром линиями.
CIRCLE (x,y),радиус,цвет, угол1, угол2, а - добавление ещё одного параметра задаст соотношение радиусов вертикального к горизонтальному.
PAINT
PAINT (x,y), цвет, цветграницы - закрашивает область заданным цветом начиная с точки (x,y), до указанного цвета границы.
POINT
с помощью этой функции можно узнать цвет пикселя в заданных координатах
с=point(x,y)
На этом всё. У нас есть хоть немножко различных операторов и можно теперь попрактиковаться решая маленькие задачи, но это в следующий раз.