04 FreeBasic - графика

4 месяца назад

Практически всегда обучать программированию я начинал с графики. Часто приходят среднеклассники которые и математики ещё толком не знают. Графика же всегда красиво да и наглядно.

Теперь пришло время выбраться из онлайн компилятора FreeBASIC - он вам ничего такого не покажет)))

FBIde - среда программирования для FreeBASIC

В первом посте я упоминал эту среду программирования. Скачиваем и запускаем. Установка не должна вызвать трудностей - единственное место где нужно изменить выбор это подтвердить согласие,
а далее жмём далее)) я имею в виду кнопку Next

Кому русский более привычен чем english переходим в меню View(вид) -> Settings (настройки) и меняем английский на русский. У меня программа выдала какую-то ошибку, но после перезапуска FBIde частично руссифицировалась.

Но без знания английского никуда не денешся - учите)) и учтите, так что английское меню ещё одна возможность подучить английский.
Вот ссылка на рускоязычную справку по FreeBASIC. Так, как из среды вызывается справка англоязычная.

Графика в Бейсике (FreeBASIC)

До этого момента FreeBASIC у вас работал в текстовом режиме, а для графики необходимо включить один из графических режимов.

С тех пор как появились операционные системы раюотающие полностью в графическом режиме многие и не подозревают что есть ещё какой-то. Разное разрешение на мониторе - вот вам и разные режимы. Но так было не сразу. Сразу режими были лишь текстовые, и даже не цветные. Вот почему в таблице так много видеорежимов. появлялись новые видеоадаптеры(видеокарты по нынешнему, хоть это и не одно и то же), которые стали выводить первую графику, которая со временем получала все большую и большую разрешающую способность. Чем больше разрешающая способность - тем менее проявляется пиксельность изображения, тем менее ступенчастыми выглядят линии.

Чтобы начать хоть что-то рисовать на экране нужно перейти в графический режим.

SCREEN

SCREEN n - выбор графического режима с номером n.

Номер режимаРазре-шениеВидео-адаптерРазмер экрана в знакоместахРазмер символа (знакоместа) на экране, в пикселяхЦвета на экране палитра/цветов
1320x200CGA40X258x816 фоновых, 1 из четырех комплектов на переднем плане
2640x200CGA80x258x816/2
7320x200EGA40x258x816/16
8640x200EGA80x258x816/16
9640x350EGA80x25 или 80x438x14 или 8x816/16
11640x480VGA80x30 или 80x608x16 или 8x8256K / 2
12640x480VGA80x30 или 80x608x16 или 8x8256K / 16
13320x200MCGA40X258X8256K / 256

Здесь актуален только режим 12(ну и 13 частично) - поэтому если вы используете FreeBASIC в режиме совместимости с QB 'lang "qb"' - 13 это максимальный номер режима.

FreeBASIC добавляет ещё несколько режимов

Номер режимаРазрешениеРазмер экрана в знакоместахРазмер символа(знакоместа) на экране, в пикселяхЦвета на экране палитра/цветов
14320x24040x308x8256K / 256 или непосредственный цвет
15400x30050x378x8256K / 256 или непосредственный цвет
16512x38464x24/64x488x16/8x8256K / 256 или непосредственный цвет
17640x40080x25/80x508x16/8x8256K / 256 или непосредственный цвет
18640x48080x30/80x608x16/8x8256K / 256 или непосредственный цвет
19800x600100x37/100x758x16/8x8256K / 256 или непосредственный цвет
201024x768128x48/128x968x16/8x8256K / 256 или непосредственный цвет
211280x1024160x64/160x1288x16/8x8256K / 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)

На этом всё. У нас есть хоть немножко различных операторов и можно теперь попрактиковаться решая маленькие задачи, но это в следующий раз.

Авторы получают вознаграждение, когда пользователи голосуют за их посты.
Голосующие читатели также получают вознаграждение за свой голос.
Порядок сортировки:  Популярное
32
  ·  4 месяца назад

Сюда приплывал Моби Дик

25
  ·  4 месяца назад

Да... программирование довольно нужное умение на данный момент времени'

·

можно начать учиться. пока я до высших материй не дошёл)))