ZX Spectrum графика 1994 г.

Символьная графика ZX SPECTRUM - Стандартный набор символов; Графический режим работы; Блочная графика; Графика, определяемая пользователем; Альтернативные множества символов; Список программ.


ГЛАВА 5

Символьная графика ZX SPECTRUM

В первой главе (листинг 1.2) мы видели, что небольшой блок или символ задается восемью двоичными числами. Такой блок восемь пикселей на восемь называется символьным блоком. В SPECTRUMe имеются три вида символьных блоков: 96 символов стандартного набора, 16 графических символов и 21 блок-символ, определяемых пользователем. Последние два вида блоков доступны в графическом режиме. Эти символы появляются на экране при использовании оператора PRINT, так что мы должны познакомиться с этой командой.

Команда PRINT позволяет поместить символ в любую из 22 строк с 0-ой (верхней) по 21-ую (нижнюю), и в любой из 32 позиций этой строки с 0-ой (левой) по 31-ую (правую); символ находится в символьном блоке и каждый из этих блоков содержит восемь строк по восемь пикселей в каждом. Каждой линии соответствует содержимое одной ячейки памяти; каждая точка соответствует разряду восьмизначного двоичного числа. Это число соответствует десятичному числу от 0 до 255. В памяти хранится таблица символов. Для каждого символа команда PRINT либо находит восемь значений из таблицы или вычисляет их, и записывает их в соответствующую ячейку дисплей-файла. Последнее приводит к появлению на экране изображения символа.

Стандартный набор символов Таблица набора стандартных символов хранится в ПЗУ, постоянном запоминающем устройстве компьютера. Для каждого из 96 символов отводится по восемь ячеек памяти, так что таблица занимает 768 (96x8) последовательных ячеек, начиная с ячейки с номером 15616. Каждый символ имеет свой уникальный кодовый номер. В таблице содержится информация, начиная с символа "пробел" (код 32) и кончая символом "COPYRIGHT" (код 127).

Когда команда PRINT запрашивает для некоторого числа восемь чисел, то сначала находится системная переменная CHAR$, где содержится адрес ячейки 256 (восемь раз значение кода пробела) меньше адреса начала таблицы символов.

Для нахождения адреса, с которого начинается информация для генерации изображения символа, код символа умножается на восемь и к нему прибавляется CHAR$. После этого PRINT копирует информацию в дисплей файл, и символ появляется на экране.

Пропустите следующую программу (листинг 5.1), основанную на листинге 1.2. Она показывает, какие вычисления проводятся в ходе этого процесса. Подробное объяснение, как определить ячейки, в которых находится содержимое дисплейного файла, мы даем в главе 13, а в данном примере мы используем только блок (0,0).

Рис.23 показывает работу программы для входного параметра "?". Для выхода из программы на вопрос "ANOTHER GO ?" ответьте "N". LISTING 5.1

10 CLS : INPUT "UHTCH CHARACTER";A$

20 LET A$=A$(1): PRINT AT 2,0;"",,";A$;"""SELECTED.CODE(";A$;")=";CODE A$ 30 PRINT AT 4,0;"CALCULATION OF DATA LOCATION" 40 LET CHARS=PEEK 23606+256*PEEK 23607 50 PRINT AT 6,2;"CHARS POINTS TO ",-CHARS 60 LET TABLE=CODE A$*8

70 PRINT AT 7,2;"CODE A$*8= "-TABLE

80 LET START=CHARS+TABLE

90 PRINT AT 8,17;"-------": PRINT AT 9,2,-"DATA STARTS AT "-START

100 LET CORNER=16384: PRINT AT 11,0;"TABLE LOC. VALUE";" SCREEN LOC." 110 FOR I=0 TO 7

120 LET VALUE=PEEK (START+I): LET MEMORY=CORNER+256*I 130 PRINT AT I+13,2;START+I: PRINT AT I+13,22;MEMORY 140 PRINT AT I+13,13;VALUE 150 POKE MEMORY,VALUE 160 NEXT I

170 INPUT "ANOTHER GO ?";Y$: IF Y$="N" THEN STOP 180 GO TO 10

■7

"?"SELECTED . CODE ("?) =63 CALCULATION OF DATA LOCATION

CHARS POINTS TO 15360

CODE R$*8 = 504

DRTR STRRTS RT 15864-TRBLE LOC. URLUE SCREEN LOC.

15864-

0

16384-

15865

60

1664-0

15866

66

16896

15867

4-

17 152

15868

8

174-08

15869

0

17664-

15870

8

17920

15871

0

18 176

ANOTHER GO ■?"[!"

Рис. 23.

Результат работы программы для символа"?" приведен на рис. 23.

Упражнение 5.1

Перепишите программу на листинге 5.1 с тем, чтобы вы могли решать: помещать или не помещать значение переменной VALUE командой РОКЕ в дисплейный файл. Если какое-либо из восьми значений VALUE вами отбраковывается, то введите замену для этого VALUE. Поэкспериментируйте с заменой одного или двух значений в VALUE символе.

Графический режим работы

Естественно было бы предположить, что с помощью адреса, значение которого хранится в CHARS, можно узнать о символах, соответствующих коду 0, однако кодам со значением от 0 до 31 либо соответствуют управляющие символы, либо вообще никакие символы не соответствуют. Хотя с помощью CHAR$ можно определить адреса ячеек, соответствующих этим значениям кода, но эти 256 (32*8) бит не содержат информации о символах и, следовательно, их можно использовать для других целей. Если задать графический символ в качестве параметра для подпрограммы на листинге 5.1, то мы либо не получим никакой информации о символах, либо она будет совершенно произвольной. Это связано с тем, что в таблице символов хранится информация о символах с кодами от 32 до 127, а у символов графического режима номер кода больше 127, что приведет к тому, что программа рассматривает место за концом таблицы символов. Эта таблица хранится в ПЗУ сразу перед началом памяти прямой адресации, которая используется для временного хранения информации, так что программа будет просматривать дисплейный файл, занимающий первые 6К RAM (ОЗУ).

Блочная графика

Информация для графического блока не хранится в ПЗУ, а каждый раз вычисляется по коду символа. Каждый графический блок состоит из четырех квадратов, состояние каждого представлено двоичным "вкл" или "выкл" одного из последних четырех двоичных разрядов номера квадрата. Четыре строки по 8 пикселей считаются идентичными, то же относится и к последним четырем строкам.

1 0 0 0 1 1

0

1 = CODE (" —I ")

1 0 0 0 Х Х

Х

Х = BLOCK GRAPHIS

CHARACTER,

Х Х Х Х 1 1

0

1 = FOUR CORNERS OF

CHARACTER,

1 1 1 1

1

0 0 0 0 1 1 1 1

0 1 1 1 1

=

UALUE FOR TOP 4 LINE3

1 1 1 1 1

=

UALUE ВОТТОИ 4 LINE3

00001111

00001111

00001111

00001111

11111111

■■■■■■■■

11111111

■■■■■■■■

11111111

11111111

Рис. 24.

Если мы знаем, что символ является графическим блоком, то мы можем использовать два вида данных, четырежды используя которые мы создаем блок. Пример того, как это делается, дается на рис. 24. Графические блоки можно использовать для получения графического изображения средней разрешающей способности с графическим полем 64x44 блоков. Используя такую технику, можно очень быстро создавать сложные двухцветные картинки. Изображение, приведенное на рис. 25, создано с помощью программы на листинге 5.2. Программа рисует последовательность небольших концентрических окружностей в левом верхнем углу, а затем создает крупное изображение "укрупненными" элементами изображения, вызывая для этого специальную подпрограмму. Для этой подпрограммы требуется определить символьный блок, который будет левым верхним углом нашей начальной позиции. Информация с поля пять блоков вниз от этого символа и девять блоков вправо записывается подпрограммой из дисплейного файла в массив S. Для каждой пары линий - эта подпрограмма собирает восемь информационных частей и преобразует их в бинарные строчки (см. строку 1130 и далее). Эти строки используются для построения двоичного представления кода графического символа: из строк выбираются двухбитовые сегменты, перед которыми вставляется значение кода (см. строку 1230).

Рис. 25.

LISTING 5.2

100 REM MAIN PROGRAM 110 LET BIG PIXELS=1000

120 FOR I=1 TO 18 STEP 3: CIRCLE 32,156,I: NEXT I 130 GO SUB BIG PIXELS 140 STOP

1000 REM BIG PIXELS 1010 DIM P(8):DIM S(40,8)

1020 FOR I=1 TO 8: READ P(I): NEXT I: DATA 128,64,32,16,8,4,2,1

1030 DEF FN S(R,C)=16384+INT(R/8)*2048+(R-INT(R/8)*8)*32+C

1040 INPUT "TOP LEFT CORNER ","BLOCK IS AT ROW.COL ";ROW;",";COL

1050 FOR I=0 TO 4

1060 FOR J=0 TO 7

1070 LET P=FN S(ROW+I,COL)

1080 FOR K=0 TO 7

1090 LET S(I*8+J+1,K+1)=PEEK (P+256*J+K) 1100 NEXT K: NEXT J: NEXT I

1109 REM SET SCREEN TO 20*32 WHICH IS FOUR TIMES AREA TO BE EXPANDET.

1110 BORDER 1: PAPER 7: INK 0: CLS

1120 PRINT AT 21,0; PAPER 1;,,: PRINT AT 0,0; PAPER 1;,,

1129 REM TAKE TWO LINES OF PIXELS AT A TIME FOR TRANSLATION TO QUARTER BLOCKS.

1130 FOR I=1 TO 39 STEP 2 1140 LET A=I: LET B=I+1 1150 FOR J=1 TO 8

1160 LET A$="00000000": LET B$=A$ 1170 LET T=S(A,J): LET U=S(B,J)

1179 REM CALCULATE BINARY FORMS OF PIXELS FOR THE BLOCK ACROSS.

1180 FOR K=1 TO 8

1190 IF T>=P(K) THEN LET T=T-P(K): LET A$(K)="1" 1200 IF U>=P(K) THEN LET U=U-P(K): LET B$(K)="1" 1210 NEXT К

1219 REM TAKE TWO PIXELS FROM EACH OF THE PAIR OF BYTES TO MAKE FOUR QUARTERS.

1220 FOR K=1 TO 4: LET D=2*K: LET C=D-1 1230 LET C$="BIN 1000"+B$(C TO D)+A$(C TO D)

1239 REM CONVERT BINARY FORM OF QUATER BLOCKS TO CHARACTER.

1240 LET C=VAL C$: PRINT CHR$ C; 1250 NEXT K: NEXT J: NEXT I 1260 RETURN

Графические символы, сгенерированные предыдущей программой, высвечиваются на экране и создают точную копию содержимого графического поля 5*8. Это изображение получается четырехкратным растяжением по каждой оси, так что теперь оно занимает 20 блоков на 32 блока, и каждому элементу изображения соответствует квадрат четыре элемента изображения на четыре.

Используя команду COPY и листинги принтера X, четырехкратное увеличение может быть достигнуто 16 -кратным использованием подпрограммы "BIGPIXELS", а затем склеиванием отдельных частей изображения. Упражнение 5.2

Напишите программу, которая печатает саму себя, копируя каждое из полей 5x8 с помощью подпрограммы "BIG PIXELS".

Графика, определяемая пользователем Третий набор символов - это символы, определяемые пользователем (номера кодов от 144 до 164). Еще одна таблица для этого набора хранится в последних 168 ячейках в конце памяти. Когда компьютер включают, то 21 символ от "А" до "U" копируется в эту таблицу. В графическом режиме эти символы печатаются с клавиатуры. Информация в ячейках этой таблицы может быть изменена пользователем, так что необходимый символ можно вводить прямо с клавиатуры. Для этой цели имеется встроенная функция USR, которая при введении символа (от "А" до "U") выдает адрес первой ячейки в которой хранится информация об эквиваленте этого символа. Адрес начала этой таблицы хранится в системной переменной UDG. Код символа минус 144 и умноженный на восемь даст относительное положение первой из восьми ячеек, относящихся к символу в этой таблице. Функция USR вычисляет эту позицию и прибавляет ее к UDG для получения абсолютного адреса этого символа в памяти. UDG можно модифицировать так, что станет доступным меньшее количество символов, например: только символы от А до Н, что оставляет места в памяти для программ, хотя в этом возникает необходимость только тогда, если у вас есть 16 килобайт памяти ОЗУ для того, чтобы познакомиться с использованием этой функции для изменения изображения символа, введите следующую команду:

POKE USR "A", BIN 00100100

Теперь, если нажать клавишу "А" в графическом режиме, вы увидите над ней две точки.

Программа на листинге 5.3 позволяет вам переопределить все восемь двоичных чисел, представляющих символ. После этого программа создает графический режим, что позволяет печатать определяемые пользователем символы на экране. Для выхода из программы используется символ "Z". LISTING 5.3

10 INPUT "CHARACTER TO BE","REDEFINED ";U$: IF U$="" THEN GO TO 10 15 IF U$=CHR$ 90 THEN GO TO 210 20 IF U$<"A" OR U$>"U" THEN GO TO 10 30 LET MEMORY=USR U$: CLS 40 FOR I=0 TO 7

50 INPUT ("VALUE"+STR$ I+"=BIN ");LINE B$ 60 LET VALUE=VAL ("BIN "+B$) 70 POKE MEMORY+I,VALUE

80 IF LEN B$<8 THEN LET B$="0"+B$: GO TO 80 90 PRINT B$: NEXT I

100 PRINT AT 10,0;"TYPE CHARACTER OR ENTER"

109 REM SIMULATE GRAPHICS MODE FOR LETTERS A TO U.

110 LET R=12:LET C=0

120 PRINT AT R,C; FLASH 1;"G"

130 IF INKEY$ <>"" THEN GO TO 130

140 LET A$=INKEY$ : IF A$="" THEN GO TO 140

149 REM IF "ENTER" IS PRESSED THEN RESTART PROGRAM.

150 IF A$=CHR$ 13 THEN GO TO 10

160 IF A$<"A" OR A$>"U" THEN GO TO 130

169 REM CONVERT CHARACTER TO EQUIVALENT USER-DEFINED GRAPHIC AND PRINT.

170 LET A$=CHR$ (CODE A$+79) 180 PRINT AT R,C;A$

189 REM MOVE TAKE CURSOR POINTERS.

190 LET C=C+1: IF C=32 THEN LET C=0: LET R=R+1: IF R=22 THEN LET R=12 200 GO TO 120

210 STOP Упражнение 5.3

Используйте программу на листинге 5.3 для генерации графического символа, у которого однотонные участки заменяются на участки с орнаментом в клеточку, как на шахматной доске. Используйте различные цвета PAPER (ФОН) и INK (РИСУЮЩИИ ЦВЕТ), например, сочетание красного и желтого дадут оранжевый.

Определяемая пользователем графика может непосредственно использоваться в ваших программах для ускорения построения изображения. Тот же символ может быть создан последовательностью команд PLOT и DRAW, но в большинстве случаев это требует больше времени. Например, с помощью символов можно создавать орнаменты, что занимает значительно меньше времени, чем при использовании PLOT и DRAW для создания такого же орнамента. На листинге 5.4 приведен текст программы, создающей орнамент, используя определенные пользователем символы от "А" до "D", которые набираются в символьных константах (строки 240 и 250) в графическом режиме. После переопределения на экране дисплея будут появляться новые символы, а не соответствующие им символы клавиатуры. LISTING 5.4 200 REM ORNAMENT

209 REM FILL SCREEN WITH A DIAGONAL PATTERN OF FIRST FOUR GRAPHICS CHARACTER.

210 OVER 0

220 INPUT "INK=";I: INK I

230 INPUT "PAPER=';;I: PAPER I

240 LET A$="ABCD": LET B$="BCDA"

250 LET C$="CDAB": LET D$="DABC"

260 FOR J=0 TO 7

270 FOR I=0 TO 4

280 PRINT AT I*4,J*4;A$

290 PRINT AT 1*4+1,J*4;B$

300 PRINT AT I*4+2,J*4;C$

310 PRINT AT I*4+3,J*4;D$

320 NEXT I

330 PRINT AT I*4,J*4;A$ 340 PRINT AT 1*4+1,J*4;B$ 350 NEXT J 360 STOP

Альтернативные множества символов До сих пор мы использовали 37 графических символов для создания рисунков, но, используя альтернативные стандартные множества, их число можно довести до 96. Для того, чтобы использовать альтернативные множества, мы просто изменяем значение, хранящееся в CHAR, так, что это значение указывает на новое множество, хранящееся в запоминающем устройстве прямой адресации, вместо обычной таблицы.

Для этого нам нужна программа, которая бы упрощала эту задачу, а также позволяла бы изменять символы после их генерации.

LISTING 5.5

1 CLEAR 62294:INK 0: PAPER 7: BORDER 7: OVER 1 :LET N=0: REM FOR 16K MACHINES USE CLEAR 255+THE VALUE OF S (I) WHERE I IS THE INDEX OF THE LOWEST CHARACTER SET WHICH WILL FIT IN THE AVAILABLE STORE.

2 DIM Z$ (8,8) :DIM T$(8,8): DIM S(6): DIM P(8): DIM B(8): DIM G(7): REM LINE

NUMBERS TO GO FOR MENU OPTIONS.

3 FOR I=1 TO 7: READ G(I): NEXT I: DATA 61,67,71,100,106,112,119: REM POWERS OF 2 READY FOR USE IN BINARY CONVERSIONS.

4 FOR I=1 TO 8: READ P(I): NEXT I: DATA 128,64,32,16,8,4,2,1: REM VALUES WHICH MUST BE PLACED IN CHARS TO USE EACH ALTERNATIVE SET. FOR 16K MACHINES THESE NUMBERS SHOULD BE: 15360,29271,30039,30807,31575,32080, (SEE APPENDIX).

5 FOR I=1 TO 6: READ S(I): NEXT I: DATA 15360,62039,62807,63575,64343,64848

6 LET S=1: GO SUB 17: REM CHECK SET 1 IS WEING USED AND PRINT MENU.

7 CLS : PRINT AT 2,2;"***CHARACTER GENERATOR***"

8 PRINT AT 5,6;PAPER 5;"1";PAPER 7;"...PRINT ALL SETS"

PRINT ONE SET" .EDIT CHARACTER" ..COPY SET TO SET" ..SAVE SET"

9 PRINT AT 7,6;PAPER 5;"2";PAPER 7;"..

10 PRINT AT 9,6;PAPER 5;"3";PAPER 7;".

11 PRINT AT 11,6;PAPER 5;"4";PAPER 7;"

12 PRINT AT 13,6;PAPER 5;"5";PAPER 7;"

13 PRINT AT 15,6;PAPER 5;"6"; PAPER 7;"...LOAD SET"

14 PRINT AT 17,6;PAPER 5;"7";PAPER 7;"...RUN YOUR PROGRAM": REM WAIT FOR VALID OPTION.

15 INPUT "WHICH OPTION " ;OP: IF OP<1 OR OP>7 THEN GO TO 15: REM JUMP TO APPROPRIATE ROUTINE.

16 GO TO G (OP) : REM AOST SUBROUTINES ARE LOCATED AT START OF PROGRAM FOR EFFICIENCY. ROUTINE TO CHANGE TO SET S BY ALTERING CHARS TO POINT TO NEW TABLE OF DATA.

17 LET HI=INT (S(S)/256): LET LO=S(S)-HI*256

18 POKE 23606,LO: POKE 23607,HI: RETURN: REM GENERAL ROUTINE TO WAIT BEFORE CLEARING SCREEN AND RETURNING TO MENU.

19 LET S=1: GO SUB 17: INPUT "PRESS ENTER TO","RETURN TO MENU";LINE A$: RETURN : REM CLEAR BINARY CHARACTERS ARRAY.

20 FOR I=1 TO 8: LET Z$(I)=" 00000000": NEXT I: RETURN: REM INPUT A VALID SET NUMBER AND GIVE UPPER AND LOWER BOUNDS FOR CHARACTERS

21 INPUT "WHICH SET";S: IF S<1 OR S>6 THEN GO TO 21

22 LET A=32: LET B=127:IF S=6 THEN LET A=65: LET B=85

23 RETURN: REM INPUT A VALID CHARACTER FOR CHOSEN SET.

24 INPUT "WHICH CHARACTER";C$: LET C=CODE C$: IF C<A OR C>B THEN GO TO 24

25 RETURN: REM DRAW EIGHT BY EIGHT BLOCK GRID AT HORIZONTAL POSITION ALTERED BY

N.

26 LET NN=64+N: FOR I=0 TO 8

27 PLOT I*8+NN,64: DRAW 0,64

28 PLOT NN,I*8+64: DRAW 64,0

29 NEXT I: RETURN: REM PRODUCE GRAPHICAL EQUIVALENT OF BINARY STRING ARRAY INSIDE GRIB.

30 FOR I=1 TO 8: FOR J=1 TO 8

31 LET P=7: IF N=0 AND Z$(I,J)="1" OR N=96 AND T$(I,J)="1" THEN LET P=4

32 GO SUB 48: NEXT J: NEXT I: RETURN

Подпрограммы программы CHARACTER GENERATOR (ГЕНЕРАТОР СИМВОЛОВ) независимы друг от друга и предназначены для выполнения подготовки к использованию и использования определяемых пользователем символов: они позволяют вам редактировать и управлять символами, использовать альтернативные множества символов и графические символы, сохранять и перезагружать определяемые символы и мгновенно проверять ваши собственные программы. Программы написаны для SRECTRUMa с 48К памяти и располагаются в нижней ее части (занимая строки с 1-ой по 118-ую), затем идет ваша собственная программа, начинающаяся со строки за 118-ой строкой, за которой следуют подпрограммы перенумерации и удаления (см. главу 13), которые начинаются с 9900-ой строки. Если у вас 16К памяти, то эта подпрограмма должна быть независимой от других подпрограмм - см. приложение А.

Подпрограмма вначале предлагает вам семь возможных опций, к рассмотрению которых мы и приступим. (Сразу оговоримся, что в листинге 5.5 не приведены строки 33 - 118 подпрограмм обработки опций, поэтому программа в приведенном виде лишь выводит на экран меню опций, не обрабатывая их).

1. Первая опция - PRINT ALL SETS (НАПЕЧАТАЙТЕ ВСЕ НАБОРЫ). В этом режиме сначала напечатаются нормальные символы (1-ый набор), за которыми следует четыре альтернативных набора символов (со 2-го по 5-ый), затем символы, определяемые пользователем (шестой набор). В нескольких последних символах 5-го набора будет содержаться бессмысленная информация, остаток стека GO SUB, вытесненный в безопасное место.

2. Вторая опция - PRINT ONE SET - (НАПЕЧАТАЙТЕ ОДИН НАБОР). Эти наборы пронумерованы числами от 1 до 6 следующим образом: 1 набор стандартных символов, не может быть изменен; наборы со второго по пятый -альтернативные, могут на время заменить стандартный набор; 6 - набор символов, определяемых пользователем, доступен всегда. После выбора какого-нибудь из этих чисел на экране появятся символы стандартного набора, после каждого из которых будет стоять знак -; как символ, так и этот знак печатаются на желтом фоне, за которыми следует соответствующий символ альтернативного набора. Для 6-го набора будут напечатаны только значения символов от "А" до "U".

3. Третья опция - РЕДАКТИРОВАНИЕ. Это самая сложная опция с большим числом команд, которые вводятся набором первого символа команды. Во-первых, вам придется ответить, с какого набора и с какого символа вы хотите начать. Если вы хотите начать с незаполненной таблицы 8 пикселей на 8, то вам следует ввести 1 и символ пробела (если вы хотите использовать апостроф, то его следует набирать дважды.

Теперь вы находитесь в режиме редактирования, и символ, который вы указали, будет воспроизведен в зеленых квадратах размером восемь пикселей на восемь. Крест в левом верхнем углу - это курсор, который управляется стандартными курсорными клавишами ("5", "6", "7", "8") с или без клавиши SHIFT.

Первые команды - PLOT (НАНЕСТИ) и OFF (ВЫКЛ). Они изменяют один квадрат в сетке символов. Для этого подведите курсор к квадрату и введите "Р" или "О".

"P" делает квадрат зеленым, что эквивалентно двоичному "ВКЛ", а "O" стирает изображение в квадрате, делая его белым.

Следующие три команды определяют преобразования, аналогичные описанным в главе 4. ROTATE поворачивает символ на 90 градусов против часовой стрелки относительно центра квадрата. Символ отражается относительно координатных осей по команде X-AXIS (ось X) или Y-AXIS (ось Y). Эти команды используются для создания текстов, расположенных на экране произвольным образом.

И, наконец, команды MERGE, SAVE, DOUBLE.

Команда MERGE (ПОМЕСТИТЬ) позволяет поместить любой символ в сетку, поверх того, что уже было отредактировано. Это очень удобная команда для создания набора букв иностранного алфавита: например, для того, чтобы поместить черточку через O для скандинавских языков, добавлять акценты для французского и т. д.

Команда SAVE (СОХРАНИТЬ) запрашивает, в каком наборе мы желаем сохранить вновь созданный символ, и какому стандартному символу он соответствует. Если вводится набор 1, то символ будет уничтожен, так как первый набор хранится в ПЗУ; эта операция может оказаться полезной при уничтожении ненужных сеток.

DOUBLE - это мощное вспомогательное средство, позволяющее увеличить вдвое любую из четвертей символа, который вы редактируете, и сохранить это изображение в памяти командой SAVE, после чего к нему можно обращаться как к новому символу. Эта команда не меняет символа, который редактируется, так что все четыре четвертинки символа могут быть записаны в память, что можно использовать для увеличения символов.

4. COPY SET TO SET (КОПИРУЙТЕ НАБОР В НАБОР) - эта опция используется для копирования наборов целиком для облегчения выполнения действий с этим набором; эта операция сводится к перемещению в памяти одного из альтернативных наборов. Наборы со 2-го по 5-ый хранятся в конце памяти в ячейках, так что конец 5-го набора непосредственно предшествует графике, определяемой пользователем. В 48-килобайтном варианте SRECTRUMa область памяти, отведенная для наборов 2 - 5, охраняется от бейсика командой CLEAR 62294. Число 62294 на единицу меньше номера первой ячейки набора 2. Чтобы защитить только области для наборов 1, нам нужно вычислить S(1)+255 и поместить это значение в команду CLEAR в начале программы. S(l) - это значение, присваиваемое системной переменной CHARS, для того, чтобы команда PRINT могла использовать 1-ый набор. Эти значения вводятся командой READ оператора DATA третьей строки программы. Обратите внимание на изменения, которые следует внести, если у вас 16К памяти (см. приложение А).

5 и 6. Пятая опция позволяет записать набор на ленту, а шестая - загрузить его обратно в память. Если на вопрос "WHICH SET?" (КАКОЙ НАБОР?) мы отвечаем числом от 1 до 6, то этот набор записывается или перезагружается. Если напечатать 5 6, то 5 и 6 наборы будут записаны или перезагружены в одном блоке.

Для того, чтобы другие программы могли использовать альтернативные наборы символов, следует скопировать строки 112-117 программы "CHARACTER GENERATOR" вместе с подпрограммой (на 17 и 18), позволяющей переключаться с одного набора на другой; также следует включить множество и соответствующий ему оператор DATA на 5-ой строке.

7. Последняя опция - RUN YOUR PROGRAM (ЗАПУСТИТЬ ВАШУ ПРОГРАММУ), которая передает управление первой строчке, следующей за программой, генерирующей символы, или, если за этой программой ничего не следует, то останавливает программу.

Для того чтобы освоиться с программой "CHARACTER GENERATOR", следуйте инструкциям, приведенным

ниже.

Используя MERGE, введите листинги 5.4 и 5.5 на 48К-байтном SPECTRUMe; на 16К-байтном SPECTRUMe пропускайте их по отдельности. Нарисуйте что-нибудь вроде кляксы и сохраните это изображение под символом "А" шестого набора. Отредактируйте символ: поверните его и сохраните под символом "В" шестого набора. Примените команду X-AXIS к символу "А" шестого набора и сохраните результат под символом "С" шестого набора. Теперь используйте 7-ую опцию для того, чтобы посмотреть, что у вас получилось.

Упражнение 5.4

Поэкспериментируйте с различными видами симметрии символов и орнаментов для размещения символов на экране. Измените программу так, чтобы она перебирала, с помощью двух вложенных циклов FOR... NEXT все возможные сочетания цветов для INK и PAPER.

Упражнение 5.5

Теперь создайте символы костяшек для игры в домино, используя программу "CHARACTER GENERATOR".

Упражнение 5.6

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

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

Список программ

1. Листинг 5.1. Входные данные A$. A$ - любой символ не графического режима, попробуйте "X" или "*".

2. Листинг 5.2. ("MAIN PROGRAM" и "BIG PIXELS"). Входные данные ROW и COL, где 0<=ROW<=COL<=24. Попробуйте (0,0) и (1,1).

3. Листинг 5.3. Входные данные: U$ и восемь двоичных чисел, которые задают изображение, соответствующее символу U$. Попробуйте "A", и III, III000, I0I0II, I0I, IIIII00I, I00I, IIII, I0II0, и "B", "C", "D", каждую вместе с перестановкой этих восьми чисел. Затем нажмите клавиши от "A" до "U" для того, чтобы посмотреть, что получилось, или клавишу "ENTER" для рестарта программы.

4. Листинг 5.4: никаких данных. Программа 5.3 должна использоваться для создания символов "A", "B", "C",

"D".

5. Листинг5.5: CHARACTER GENERATOR (ГЕНЕРАТОР СИМВОЛОВ). Прочитайте описание и пример использования.




СОДЕРЖАНИЕ:
  1. Трёхмерная декартова геометрия - Определение прямой; Угол между двумя направляющими векторами; Определение плоскости70 Точка пересечения прямой и плоскости; Расстояние от точки до прямой; Точка пересечения двух прямых; Плоскость, проходящая через три неколлинеарные точки; Точка пересечения трёх плоскостей; Линия пересечения двух плоскостей; Функциональное представление поверхности; Лежит ли точка по ту же сторону от плоскости, что и начало координат?; Каково направление обхода двумерного многоугольника, заданного последовательностью своих вершин?


  Оставте Ваш отзыв:

  НИК/ИМЯ
  ПОЧТА (шифруется)
  КОД



Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Инструментарий - Статья о том, как работать в системе для разработки Адвентюрных игр "THE GRAPHIC ADVENTURE CREATOR".
Резонанс - негативная оценка интервью с Марией The Left из прошлого номера со стороны газеты MODERN.
Обзор - обзор двух примечательных игрушек Space Crusade и Dizzy-X. Традиционный хит-парад игр.
Реклама - реклама и обьявления журнала.
Доска почета - Краткая история кемеровской группы Digital Life Group.

В этот день...   24 апреля