≡ Передовица » Макулатура » ИиО » Дополнительные возможности графики ПЭВМ Агат
Дополнительные возможности графики ПЭВМ Агат (N3/1992)
Речь опять идёт об операторах вывода спрайтов DRAW, XDRAW, ROT= и SCALE=, но в этой статье упор сделан не только на то "как ?", но и "зачем ?".
Начало статьи опубликовано в N3, окончание в N5. Здесь статья целиком. М.Степанов, В.Самолысов. Группа сайта просит вас связаться с нами! (ЗАЧЕМ ЭТО?) Стандартные версии интерпретатора языка Бейсик ПЭВМ "Агат" предоставляют пользователю единственный графический оператор PLOT, который можно без каких-либо затруднений использовать на занятиях по информатике. Этот оператор имеет ясный геометрический смысл (построение точки, отрезка или ломаной), кроме того, для его использования не требуется никакой подготовительной работы. Иначе обстоит дело с группой операторов DRAW, XDRAW, SCALE, ROT. В документации дано не слишком ясное их описание, из которого следует, что для применения этих операторов необходима длительная подготовка. Цель настоящей статьи:
Описание операторов и подготовительной работы Оператор 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 Более подробно с вопросами, изложенными в настоящей статье, можно познакомиться в разработке авторов "Факультативные занятия на ПЭВМ "Агат". * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * |