Передовица » Макулатура » ИиО » Дополнительные возможности графики ПЭВМ Агат

Дополнительные возможности графики ПЭВМ Агат (N3/1992)

Речь опять идёт об операторах вывода спрайтов DRAW, XDRAW, ROT= и SCALE=, но в этой статье упор сделан не только на то "как ?", но и "зачем ?".
Начало статьи опубликовано в N3, окончание в N5. Здесь статья целиком.

М.Степанов, В.Самолысов. Группа сайта просит вас связаться с нами! (ЗАЧЕМ ЭТО?)

Стандартные версии интерпретатора языка Бейсик ПЭВМ "Агат" предоставляют пользователю единственный графический оператор PLOT, который можно без каких-либо затруднений использовать на занятиях по информатике. Этот оператор имеет ясный геометрический смысл (построение точки, отрезка или ломаной), кроме того, для его использования не требуется никакой подготовительной работы. Иначе обстоит дело с группой операторов DRAW, XDRAW, SCALE, ROT. В документации дано не слишком ясное их описание, из которого следует, что для применения этих операторов необходима длительная подготовка.

Цель настоящей статьи:

  • дать ясное описание операторов и подготовительной фазы работы;
  • предложить преподавателю текст инструментальной программы, предназначенной для упрощения подготовительной фазы;
  • описать методику использования этих операторов на уроках информатики;
  • описать класс простых задач, естественным образом решаемых с помощью оператора DRAW.

Описание операторов и подготовительной работы

Оператор DRAW служит для вычерчивания линий на экране в графическом режиме высокого разрешения. Линия вычерчивается воображаемым пером без отрыва. При движении перо может оставлять след (закрашивать пройденную точку-клеточку экрана) или не оставлять его.

Подготовка к использованию оператора DRAW состоит в создании информационного массива, задающего движение пера, и в размещении этого массива в физической памяти компьютера. Разобьём этот процесс на этапы.

1. Указание направления движения пера с помощью стрелок на клетчатой бумаге. При этом можно использовать 8 типов стрелок (табл. 1), с каждой из которых связан числовой код (рис. 1).

2. Замена последовательности стрелок на последовательность кодов. Последовательность стрелок, задающая движение пера, располагается в линию, и каждая стрелка заменяется соответствующим кодом (рис. 2).

3. Преобразование последовательности кодов в более компактную последовательность чисел для загрузки в байты физической памяти. Для преобразования выбираются три первых, ещё не преобразованных кода - k1 k2, k3. Если k3≤3, то все три кода заменяем одним числом, вычисляемым по формуле n=k1 + 8k2+64k3. Если же k3>3, то одним числом заменяем только два кода k1 и k2: n=k1+8k2.

Смысл этих преобразований заключается в распределении кодов k1, k2, k3 по битам байта, в котором будет помещено число (легко видеть, что n<256). Под коды k1 и k2 отводится по 3 бита, а под код k3 остаётся только 2 бита, поэтому он не может превосходить 3 (рис. 3).

В нашем примере последовательность из 14 кодов заменится на 7 чисел (рис. 2). К последовательности чисел добавляется ноль. Он служит указателем того, что описание образа закончено.

4. Размещение последовательности чисел в физической памяти компьютера. В память компьютера может быть загружена информация сразу о нескольких образах, вычерчиваемых воображаемым пером. Вся эта информация располагается в специальной таблице, представляющей собой совокупность последовательных байтов. Адрес начального байта таблицы должен быть записан в виде шестнадцатеричного числа, запись которого затем разбивается на пару старших и пару младших цифр. Число, записываемое парой младших цифр, следует заслать в ячейку с адресом ¤E8, а число, записываемое парой старших цифр, - в ячейку ¤E9. Например, если начальный байт таблицы имеет адрес 1500, то следует выполнить команды

POKE ¤E8, 0
POKE ¤E9, ¤15

Если в программе будут использоваться m образов, то 2m+2 начальных байта таблицы предназначаются для специальных целей. В начальный байт всегда засылается число m, в следующий байт всегда будем засылать ноль. Далее в каждую пару байтов засылаем значения, определяющие смещение до непосредственного описания очередного образа от начального байта таблицы. Каждое смещение записывается в шестнадцатеричной системе счисления и размещается в паре соседних байтов в порядке: младшие цифры, старшие цифры, по аналогии с записью адреса таблицы (рис. 4).

Чтобы использовать команду DRAW, необходимо предварительно загрузить в физическую память компьютера таблицу описания образов, а также начальный адрес таблицы в ячейки ¤E8 и ¤E9. Загрузка может быть проведена с помощью монитора, с помощью команд POKE в прямом диалоге, с помощью специальной программы загрузки и, наконец, с помощью той же самой программы, в которой затем будет использоваться оператор DRAW.

Перейдём к описанию команд DRAW, XDRAW, SCALE и ROT. Команды DRAW и XDRAW заставляют перо вычерчивать нужный образ, однако перед их выполнением следует установить масштаб (SCALE) и ориентацию (ROT) образа относительно экрана. Команда SCALE=M(0≤M≤255), даёт перу указание по каждой стрелке проходить не одну точку, а количество точек, равное данному числу М (рис. 5).

Команда ROT=R (0≤R≤255) заставляет перо чертить образ относительно исходной точки, повёрнутый на угол, равный R×π/32. Следует иметь в виду, что при малых масштабах воспроизведения образа оператор ROT может работать плохо. Лучше использовать масштабы не менее 10.

Оператор DRAW заставляет перо чертить образ тем цветом, который включён оператором COLOR (обычно COLOR=15). Записывается оператор DRAW в виде:

DRAW NобрAT X,Y

При его исполнении перо вычерчивает образ с номером Nобр, описанный в таблице. За исходную берётся точка экрана с координатами X,Y.

Оператор XDRAW не связан с оператором COLOR. Перо, проходя по контуру образа, не закрашивает точки экрана, а инвертирует их, т.е. чёрные точки превращает в белые, а белые - в чёрные.

Приведём пример программы, которая строит несколько образов различных масштаба и ориентации.

10 REM ЗАГРУЗКА АДРЕСА ТАБЛИЦЫ
20 POKE ¤E9,15
30 POKE ¤E8,0
40 REM СОДЕРЖИМОЕ ТАБЛИЦЫ
50 DATA 1,0: REM ЧИСЛО ОБРАЗОВ
60 DATA 4,0: REM СМЕЩЕНИЕ ОБРАЗА В ТАБЛИЦЕ
70 DATA 54,54,78,1,36,36,4,0: REM ОПИСАНИЕ ОБРАЗА
80 REM ЗАГРУЗКА ТАБЛИЦЫ
90 FOR AD=¤1500 TO ¤1500+11
100 READ B
110 POKE AD,B
120 NEXT AD
130 REM С ОБРАЗОМ МОЖНО РАБОТАТЬ
140 HGR=1: COLOR=15
150 FOR R=0 TO 64
160 SCALE=R/3: REM УСТАНОВКА МАСШТАБА
170 ROT=R: REM ПОВОРОТ ОБРАЗА
180 DRAW 1 AT 128,128: REM ВЫЧЕРЧИВАНИЕ
ОБРАЗА
190 NEXT R
200 GET F¤: TEXT=0

Поскольку создание таблицы довольно хлопотное занятие, а её загрузка требует обращения к такому специфическому оператору, как POKE, применение оператора DRAW на уроках информатики осложнено. Ниже приводится текст программы, которая позволит упростить получение таблицы для достаточно простых образов и загрузит эту таблицу в память компьютера.

10 DIM KD(100),X(100),Y(100),B(50)
20 REM ПОСТРОЕНИЕ МЕНЮ
30 MGR=2: COLOR=2
40 FOR YY=0 TO 100 STEP 20
50 PLOT 0,YY TO 40,YY
60 NEXT YY
70 PLOT 0,0 TO 0,100
80 PLOT 40,0 TO 40,100
90 PLOT 20,0 TO 20,80
100 FOR NX=0 TO 1
110 FOR NY=0 TO 4
120 NP=NY*2+NX+1: IF NP=10 THEN NP=9
130 ON NP GOSUB 1000,1100,1200,1300, 1400,1500,1600,1700,1800
140 NEXT NY,NX
150 NX=0: NY=0: X(0)=84: Y(0)=56: K=0
160 COLOR=5: PLOT 84,56 TO 88,56
TO 88,60 TO 84,60 TO 84,56
170 COLOR=1: GOSUB 1900: GOSUB 1000
180 REM РАБОТА С МЕНЮ
190 GET S¤: UK=ASC(S¤)
200 IF UK=13 THEN 510
210 IF S¤="_" THEN 360
220 IF UK=26 AND NY<4 THEN MX=NX: MY=NY+1: GOTO 270
230 IF UK=21 AND NX<1 THEN MX=NX+1: MY=NY: GOTO 270
240 IF UK=25 AND NY>0 THEN MX=NX: MY=NY-1: GOTO 270
250 IF UK=8 AND NX>0 THEN MX=NX-1: MY=NY: GOTO 270
260 GOTO 190
270 REM ПЕРЕМЕЩЕНИЕ ПО МЕНЮ
280 CR=0: CF=2
290 FOR I=1 ТО 2
300 NP=NY*2+NX+1: IF NP=10 THEN NP=9
310 COLOR=CR: GOSUB 1900
320 COLOR=CF: ON NP GOSUB 1000, 1100, 1200, 1300, 1400, 1500, 1600, 1700, 1800
330 NX=MX: NY=MY: CR=1: CF=1
340 NEXT I
350 GOTO 190
360 REM ПОСТРОЕНИЕ ТОЧКИ ОБРАЗА
370 IF NY=4 AND K>0 THEN GOSUB 2000: K=K-1: GOSUB 2000: COLOR=5: GOSUB 2100: GOTO 190
375 IF NY=4 AND K=0 THEN 190
380 IF NY=0 THEN DX=0: DY=-1
390 IF NY=1 THEN DX=1: DY=0
400 IF NY=2 THEN DX=0: DY=1
410 IF NY=3 THEN DX=-1: DY=0
420 X(K+1)=X(K)+7*DX: Y(K+1)=Y(K)+7*DY
430 IF X(K+1)>120 OR X(K+1)<42 THEN 190
440 IF Y(K+1)>120 OR Y(K+1)<8 THEN 190
450 KD(K)=4*NX+NY
460 COLOR=4-NX: GOSUB 2100
470 PLOT X(K)+2+3*DX,Y(K)+2+3*DY
480 IF NX=1 THEN GOSUB 2200
490 K=K+1: COLOR=5: GOSUB 2100
500 GOTO 190
510 REM ПЕРЕКОДИРОВКА
520 IF K=0 THEN 190
530 K=K-1: NK=0: NB=0
540 B(NB)=KD(NK): NK=NK+1
550 IF NK>K THEN 610
560 B(NB)=B(NB)+8*KD(NK): NK=NK+1
570 IF NK>K THEN 610
580 IF KD(NK)<>1 OR KD(NK)<>2 OR KD(NK)<>3 THEN NB=NB+1: GOTO 540
590 B(NB)=B(NB)+64*KD(NK): NK=NK+1
600 IF NK<=K THEN NB=NB+1: GOTO 540
610 NB=NB+1: B(NB)=0
620 POKE ¤E8,0: POKE ¤E9,¤30
630 POKE ¤3000,1: POKE ¤3001,0
640 POKE ¤3002,4: POKE ¤3003,0
650 FOR I=0 TO NB
660 POKE ¤3004+I,B(I)
670 NEXT I
680 HGR=2: COLOR=15
690 SC=1: R=1: XT=127: YT=127: PR=0
700 SCALE=SC
710 ROT=R
720 DRAW 1 AT XT,YT
730 GET S¤
735 IF PR=0 THEN COLOR=0: DRAW 1 AT XT,YT: COLOR=15
740 IF S¤="R" OR S¤="Р" THEN R=R+1: IF R=64 THEN R=0
750 IF (S¤="<" OR S¤=",") AND SC>0 THEN SC=SC-1
760 IF (S¤=">" OR S¤=".") AND SC<255 THEN SC=SC+1
770 IF S¤="B" OR S¤="Б" THEN PR=0
780 IF S¤="S" OR S¤="С" THEN PR=1
790 IF ASC(S¤)=26 AND YT<255 THEN YT=YT+1
800 IF ASC(S¤)=21 AND XT<255 THEN XT=XT+1
810 IF ASC(S¤)=25 AND YT>0 THEN YT=YT-1
820 IF ASC(S¤)=8 AND XT>0 THEN XT=XT-1
830 IF ASC(S¤)=13 GOTO 850
840 GOTO 700
850 REM ВЫДАЧА НА ЭКРАН
860 TEXT=0: HOME: M=9: K=0
870 NC=INT(NB/10)
880 OS=NB-10*NC
890 FOR I=0 TO NC
900 PRINT: PRINT "]     DATA ";
910 IF I=NC THEN M=OS
920 FOR J=0 TO M
930 PRINT B(K+J);
935 IF J<>M THEN PRINT ",";
940 NEXT J
950 K=K+10: PRINT
960 NEXT I
970 END
1000 PLOT 10, 4 TO 10,16
1010 PLOT  9, 6 TO 11, 6
1020 RETURN
1100 PLOT 30, 4 TO 30,16
1110 PLOT 29, 6 TO 31, 6
1120 PLOT 29,16 TO 31,16
1130 PLOT 28,15 TO 32,15
1140 PLOT 28,14 TO 32,14
1150 PLOT 28,13 TO 32,13
1160 PLOT 29,12 TO 31,12
1170 RETURN
1200 PLOT  4,30 TO 16,30
1210 PLOT 14,29 TO 14,31
1220 RETURN
1300 PLOT 24,30 TO 36,30
1310 PLOT 34,29 TO 34,31
1320 PLOT 25,28 TO 27,28
1330 PLOT 24,29 TO 28,29
1340 PLOT 24,30 TO 28,30
1350 PLOT 25,32 TO 27,32
1370 RETURN
1400 PLOT 10,44 TO 10,56
1410 PLOT  9,54 TO 11,54
1420 RETURN
1500 PLOT 30,44 TO 30,56
1510 PLOT 29,54 TO 31,54
1520 PLOT 29,44 TO 31,44
1530 PLOT 28,45 TO 32,45
1540 PLOT 28,46 TO 32,46
1550 PLOT 28,47 TO 32,47
1560 PLOT 29,48 TO 31,48
1570 RETURN
1600 PLOT  4,70 TO 16,70
1610 PLOT  6,69 TO  6,71
1620 RETURN
1700 PLOT 24,70 TO 36,70
1710 PLOT 26,69 TO 26,71
1720 PLOT 33,68 TO 35,68
1730 PLOT 32,69 TO 36,69
1740 PLOT 32,71 TO 36,71
1750 PLOT 33,72 TO 35,72
1760 RETURN
1800 PLOT  8,84 TO  8,96
1810 PLOT  8,84 TO 11,84
1820 PLOT  8,96 TO 11,96
1830 PLOT 12,85 TO 12,95
1840 PLOT 18,84 TO 18,96
1850 PLOT 18,84 TO 23,84
1860 PLOT 18,96 TO 24,96
1870 PLOT 18,90 TO 21,90
1880 PLOT 28,84 TO 28,96
1890 PLOT 28,96 TO 33,96
1892 PLOT 33,95
1895 RETURN
1900 REM РАМКА
1910 XX=NX*20+2: YY=NY*20+2: L=16: IF NY=4 THEN L=36: XX=2
1920 PLOT XX,YY TO XX+L,YY TO XX+L,YY+16 TO XX,YY+16 TO XX,YY
1930 RETURN
2000 REM DEL
2010 COLOR=0
2020 FOR I=-1 TO 5
2030 PLOT X(К)-1,Y(K)+I TO X(K)+5,Y(K)+I
2040 NEXT I
2050 RETURN
2100 PLOT X(K),Y(K) TO X(K)+4,Y(K) TO X(K)+4,Y(K)+4 TO X(K),Y(K)+4 TO X(К),Y(K)
2110 RETURN
2200 FOR I=1 TO 3
2210 PLOT X(К)+1,Y(K)+I TO X(K)+3,Y(K)+I
2220 NEXT I
2230 RETURN

Дадим краткие указания по пользованию программой. Программа имеет стадии. 1. Создание образа. 2. Манипуляция созданным образом. 3. Завершающая стадия.

При создании образа используется меню (рис. 6), в котором изображены все 8 типов клеток. Нижняя клетка соответствует операции удаления из образа последней стрелки. По меню можно перемещать указатель. Нажатие на пробел вызывает установку очередной стрелки или удаление последней стрелки из образа - в зависимости от положения указателя в меню. Признаком того, что образ создан, является нажатие на клавишу ввода. (При создании образа не используйте стрелку ↑ из меню более одного раза подряд, так как иначе в массиве может появиться нулевой байт, воспринимаемый как завершение описания образа.)

В фазе манипуляции образом используются следующие клавиши:

В завершающей стадии на экран выдаются числа, которые следует загрузить в память ПЭВМ для создания соответствующего образа. После этого программа заканчивает свою работу, при этом в память компьютера уже загружена соответствующая таблица, начиная с адреса ¤3000. Благодаря этому можно сразу начать работу с этим образом, предварительно удалив из памяти программу-редактор (NEW) и набрав простую программу работы с образом. В этой программе следует использовать вторую страницу ГВР (HGR=2).

10 REM ОТРЕЗОК
20 DATA 1,0,4,0,4,0
30 POKE ¤E8,0: POKE ¤E9,¤10
40 FOR AD=¤1000 TO ¤1005
50 READ B
60 POKE AD,B
70 NEXT AD
80 NEW

Подготовительная работа, проводимая перед использованием оператора DRAW, может быть организована либо с помощью программы-редактора, либо на базе выделения сравнительно узкого класса образов.

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

Продолжение следует.

Выделим четыре типа образов (фигур): отрезок, кочерга, квадрат с закреплённой вершиной, квадрат с закреплённым центром (рис.7).

Для каждой фигуры напишем программу, которая загружает таблицу с информацией в память компьютера, а затем запишем её на диск.

10 REM ОТРЕЗОК
20 DATA 1,0,4,0,4,0
30 POKE ¤E8,0: POKE ¤E9,¤10
40 FOR AD=¤1000 TO ¤1005
50 READ B
60 POKE AD,B
70 NEXT AD
80 NEW

Запишем программу на диск под именем ОТРЕЗОК: SAVE ОТРЕЗОК.

Перед использованием этой фигуры можно либо сразу загрузить таблицу в память: RUN ОТРЕЗОК, либо загрузить в память текст программы ОТРЕЗОК: LOAD ОТРЕЗОК и удалить 80-ю строку. Затем набирается новая программа или дополняется новыми строками загруженная в память программа ОТРЕЗОК. Готовая программа позволит манипулировать отрезком.

После того как проведена подготовительная работа, оператор DRAW можно рассматривать как команду, предназначенную для построения геометрической фигуры, поэтому наиболее естественными являются следующие постановки задач, решаемых с помощью этого оператора:

1) построить семейство геометрических фигур;

2) написать программу, которая заставит фигуру перемещаться.

Поскольку операторы ROT и SCALE имеют наглядную интерпретацию (вращение и рост фигуры), то задачи о перемещении фигур зачастую формулируются наиболее естественным образом. При этом в задаче может предполагаться, что на экране сохраняются все фазы движения фигуры. Ряд интересных задач возникает благодаря тому, что перед построением следующей фазы движения можно частично затереть предыдущую фазу.

Далее будут даны общие формулировки задач и приведены конкретные примеры на каждую формулировку.

Построить семейство геометрических фигур, представленное в задании визуально.

Пример 1. Постройте семейство отрезков, изображённое на рисунке 8.

10 DATA 1,0,4,0,4,0
20 POKE ¤E8,0
30 POKE ¤E9,c10
40 FOR I=0 TO 5
50 READ A
60 POKE ¤1000+I,A
70 NEXT I
80 HGR=1: COLOR=15:ROT=40
90 FOR X=0 TO 255 STEP 5
100 SCALE=2*X/5
110 DRAW 1 AT X,X*4/5
120 NEXT X
130 GET F¤: TEXT=0

Пример 2. Построить изображение ткани "домино" (рис.9), представляющее собой семейство ромбов.

Построение проведём на базе квадрата с закреплённой вершиной

10 DATA 1,0,4,0,44,62,0
20 POKE ¤E8,0
30 POKE ¤E9,¤10
40 FOR I=¤1000 TO ¤1006
50 READ A
60 POKE I,A
70 NEXT I
80 HGR=1: COLOR=15: ROT=8
90 FOR X=0 TO 240 STEP 16
100 FOR Y=0 TO 240 STEP 16
110 FOR J=1 TO 9 STEP 2
120 SCALE=J
130 DRAW 1 AT X+11-J,Y
140 NEXT J
150 NEXT Y,X
160 GET F¤: TEXT=0

Осуществить перемещение фигуры без сохранения промежуточных фаз движения.

Пример. Напишите программу, которая "заставит катиться" квадрат с закреплённым центром.

10 DATA 1,0,4,0,40,54,63,36,5,0
20 POKE ¤E8,0
30 POKE ¤E9,¤10
40 FOR I=¤1000 TO ¤1009
50 READ A
60 POKE I,A
70 NEXT I
80 HGR=1: COLOR=15
90 FOR X=0 TO 255
100 ROT=X
110 XDRAW 1 AT X,120
120 FOR T=1 TO 20: NEXT T
130 XDRAW 1 AT X,120
140 NEXT X
150 GET F¤: TEXT=0

Осуществить перемещение фигуры с сохранением промежуточных фаз движения.

Пример 1. Напишите программу, которая нарисует морского ежа с помощью вращающегося отрезка постоянной длины.

10 DATA 1,0,4,0,4,0
20 POKE ¤E8,0
30 POKE ¤E9,¤10
40 FOR I=¤1000 TO ¤1005
50 READ A
60 POKE I,A
70 NEXT I
80 HGR=1: COLOR=15
90 FOR U=0 TO 64
100 SCALE=90: ROT=U
110 DRAW 1 AT 127, 127
120 NEXT U
130 GET F¤: TEXT=0

Пример 2. Напишите программу, которая нарисует бурав с помощью растущего и одновременно вращающегося отрезка, конец которого скользит по прямой.

10 DATA 1,0,4,0,4,0
20 POKE ¤E8,0
30 POKE ¤E9,¤10
40 FOR I=¤1000 TO ¤1005
50 READ A
60 POKE I,A
70 NEXT I
80 HGR=1: COLOR=15
90 FOR Y=0 TO 255
100 SCALE=Y/4: ROT=Y
110 DRAW 1 AT 100+Y/4,Y
120 NEXT Y
130 GET F¤: TEXT=0

Пример 3. Заменив в предыдущей программе "отрезок" на "кочергу 1,1", нарисуйте "анаконду".

Заменим строку

10 DATA 1,0,4,0,51,0

Пример 4. Напишите программу, которая изобразит фазы движения вращающегося отрезка постоянной длины, конец которого скользит по окружности.

10 DATA 1,0,4,0,4,0
20 POKE ¤E8,0
30 POKE ¤E9,¤10
40 FOR I=¤1000 TO ¤1005
50 READ A
60 POKE I,A
70 NEXT I
80 HGR=1: COLOR=15
90 FOR U=0 TO 6.4 STEP .03
100 SCALE=20: ROT=UX40
110 X=127+80*SIN(U): Y=127-80*COS(U)
120 DRAW 1 AT X,Y
130 NEXT U
140 GET F¤: TEXT=0

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

Пример. Построить эллипс небольшого радиуса, затирая фазы движения вращающегося отрезка за исключением одной точки.

10 DATA 1.0,4,0,4,0
20 POKE ¤E8,0
30 POKE ¤E9,¤10
40 FOR I=¤1000 TO ¤1005
50 READ A
60 POKE I,A
70 NEXT I
80 HGR=1: COLOR=15
90 FOR U=0 TO 63
100 ROT=U
110 SCALE=10: DRAW 1 AT 127,127
120 SCALE=9: XDRAW 1 AT 127,127
130 NEXT U
140 GET F¤: TEXT=0

Сочетая различные приёмы использования операторов DRAW и XDRAW, достичь интересного эффекта.

Пример 1. Напишите программу движения секундной стрелки по циферблату.

10 DATA 1,0,4,0,4,0
20 POKE ¤E8,0: POKE ¤E9,¤15
30 FOR I=0 TO 5
40 READ A
50 POKE ¤1500+I,A
60 NEXT I
70 HGR=1: COLOR=15
80 FOR U=0 TO 63
90 ROT=U: SCALE=100: DRAW 1 AT 127,127
100 SCALE=85: XDRAW 1 AT 127,127
110 NEXT U
120 SCALE=80
130 FOR U=0 TO 63
140 ROT=U
150 XDRAW 1 AT 127,127
160 FOR T=1 TO 600: NEXT T
170 PRINT CHR¤(7)
180 XDRAW 1 AT 127,127
190 NEXT U
200 GOTO 130

Пример 2. Нарисуйте на экране забавную рожицу.

Данная программа может рассматриваться как пример работы с несколькими образами одновременно

10 DATA 3,0,8,0,12,0,14,0
20 DATA 219,219,6,0: REM КОЧЕРГА
30 DATA 4,0: REM ОТРЕЗОК
40 DATA 58,36,45,54,7,0: REM КВАДРАТ
50 POKE ¤E9,¤15: POKE ¤E8,0
60 FOR I=0 TO 19
70 READ A
80 POKE ¤1500+I,A
90 NEXT I: HGR=2: COLOR=15
100 REM РАБОТА С 1-М ОБРАЗОМ
110 SCALE=20
120 FOR U=0 TO 63
130 ROT=U: DRAW 1 AT 127,127
140 NEXT U
150 REM РАБОТА CO 2-М ОБРАЗОМ
160 X=80: Y=80
170 FOR I=1 TO 2
180 FOR U=0 TO 63
190 SCALE=20: ROT=U: DRAW 2 AT X,Y
200 SCALE=10: XDRAW 2 AT X,Y
210 NEXT U
220 X=174
230 NEXT I
240 REM РАБОТА С 3-М ОБРАЗОМ
250 ROT=0: SCALE=5
260 DRAW 3 AT 127,127
270 R0T=8: A=3: B=15: C=2
280 FOR S=A TO B STEP C
290 SCALE=S
300 DRAW 3 AT 127,180
310 FOR T=1 TO 50: NEXT T
320 XDRAW 3 AT 127,180
330 NEXT S
340 R=A: A=B: B=R: C=-C: GOTO 280

Более подробно с вопросами, изложенными в настоящей статье, можно познакомиться в разработке авторов "Факультативные занятия на ПЭВМ "Агат".

* * *

Использование материалов проекта agatcomp без получения предварительного письменного разрешения agatcomp запрещено.


Почта для обратной связи: mail@agatcomp.ru


Живое общение по теме Агата: Telegram группа Agatcomp.


Накопленные знания и проекты: тематический ФОРУМ.


© 2004-2024 agatcomp.su / agatcomp.ru

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *