Вычислительная техника и её применение 1991-1 1990 г.

О.Д. Любутов - редактор спрайтов для БК-0010.


О.Д.Любутов
(Ереван)

Редактор спрайтов
для БК-0010

Безусловно, хорошая игровая программа
это достаточно сложный программный про-
дукт, удовлетворяющий целому комплексу
требований. Прежде всего игровая програм-
ма должна быть интересна играющему. Как
показывает опыт, современного "игрока" (на-
зовем так потенциального пользователя игро-
вых программ) можно условно разделить на
два типа: К первому относятся те игроки ',
кто не имеет постоянного доступа к компью-
терам и новички. Они любят исключительно
"динамические игры", т.е. такие, где "игрок"
действует в режиме "реального времени ',
где много перемещений, много стрельбы,
много изменений игровой обстановки и где
совершенно некогда думать, а полагаться
можно лишь на свою реакцию и интуицию.
Это такие игры как: "Пакман", "Ксоникс",
"Тетрис", "Спейс комадор", "Хью-кобра" и

др.

Второй тип это те, кто уже давно и посто-
янно работает на ЭВМ. Они, за редким иск-
лючением, уже пресытились всеми этими го-
ловокружительными гонками, боями, тем бо-
лее, что времени у них хватает и на более
продолжительные "диалоговые' или "сме-
шанные" игры.

К классическим "диалоговым" играм от-
носятся многочисленные экономические игры
("Монополия", 'Президент", 'Менеджмент
"Биржа" и др., а так же множество про-
грамм, реализующих известные "некомпью-
терные" игры ("Шахматы1, "Шашки", "Ре-
ндзю", ' Реверси ' и.т.д.).

В последнее время появились "смешан-
ные" игры, которые сочетают в себе досто-
инства как "динамических", так и "диалого-
вых' игр. Это такие игры как: ' Пещера' , "Ле-
гион" и др.

Первый тип 'игроков" наиболее много-
численный, а в условиях нашего "безма-
шинья" он и определяет спрос на игровые
программы. Следовательно, необходимо сна-
чала писать именно "динамические игры".
Каким же требованиям должна удовлетво-
рять хорошая "динамическая" игра?

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

Поэтому можно поступить проще (учиты-
вая хронический недостаток программного
обеспечения отечественных компьюте-
ров), — реализовать уже известную игру на
данной ЭВМ (желательно, правда, чтобы реа-
лизация не очень сильно уступала оригина-
лу).

Для игры очень большое значение имеет
внешнее оформление (разнообразные графи-
ческие объекты, цвета, звук), а так же скоро-
сть перемещения графических объектов.
Здесь, конечно, нужно исходить из возмож-
ностей компьютера. В игровых зарубежных
компьютерах ("Ямаха", "Атари", "Командор",
"Синклер" и др.) специально предусмотрена
аппаратная поддержка игровых эффектов, это
и многоканальные звуковые генераторы, и
большое количество режимов экрана, и нако-
нец спрайты.

Отечественные компьютеры этого класса,
к сожалению, не могут пока обеспечить ни-
чего подобного. Одним из самых распрост-
раненных отечественных бытовых компьюте-
ров является БК-0010.

Недостатки этой модели уже неоднократ-
но отмечались в печати. Это и очень малень-
кое ОЗУ ( а Вильнюсская версия Бейсика
съедает его добрую половину), и слабая ап-
паратная поддержка, о которой уже говори-
лось (например неудачная организация кла-
виатуры по образцу ДВК когда нет возмож-
ности определить нажатие более одной кла-
виши, а это очень важно в игре), и многое
другое.

Поэтому попробуем использовать то, что
есть. А есть у нас 16-разрядный процессор
(У большинства игровых зарубежных 8-ми
разрядный), т.е. быстродействием мы не
обижены, еще есть хороший драйвер магни-
тофона (по крайней мере намного лучше,
чем драйвер 'Атари"), есть экранное ОЗУ в
16 Коайт с возможностью окраски любой
точки в любой из четырех цветов ("Ямаха"
лишена такой возможности), и, наконец есть
16-разрядный программируемый параллель-
ный интерфейс (проще Порт), который очень
удобно использовать для подключения джей-
сика (верньерного устройства).

Большое значение имеет так же выбор
языка программирования. ФОКАЛ не позво-
ляет писать игровые программы из-за своей
черепашьей скорости, на АССЕМБЛЕРе напи-
сать большую игровую программу под силу
только очень опытному программисту, да и
времени на это уйдет не один месяц, значит
остается БЕЙСИК. Несмотря на все недостат-
ки нельзя не отметить его очень высокое бы-
стродействие (с целыми переменными) и
возможность делать вставки в машинных ко-
дах. Именно эти два достоинства и позволя-
ют писать вполне приличные игровые про-
граммы.

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

Недостатки этого метода очевидны: даже
если мы не будем использовать "медлен-
ные" операторы БЕЙСИКа (LINE, DRAW,
PSET, PAINT, которые не годятся для динами-
ческой игры), а используем для этого вставку
в машинных кодах, все рано при стирании
старого положения графического объекта
изображение на экране будет заметно "мер-
цать".

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

Избежать этого просто. Чаще всего объ-
ект перемещается на определенный шаг в
каком-либо направлении и значение шага в
2 — 4 раза меньше протяженности самого
объекта (при таком шаге перемещение ви-
дится плавным и достаточно быстрым). Ис-
пользуя это можно предложить следующий
метод: на экран накладывается не только
сам графический объект, но и "окаймление"
вокруг него с цветом фона (высота и ширина
окаймления равна шагу перемещения в соот-
ветствующем направлении). Теперь замена
'старого" изображения на "новое" проводит-
ся только одним действием — наложением
'нового" изображения на "старое" со смеще-
нием (шагом) в нужном направлении, В этом
случае мерцания не происходит, так как "ста-
рое изображение стирается лишь частично,
да и то одновременно с появлением на экра-
не нового изображения.

Этот метод дает очень хорошие резуль-
таты для многих (почему не всех — будет
сказано позже) динамических игр. Да его ре-
ализации необходимо иметь "библиотеку гра-
фических образов", где будут храниться все
рисунки необходимые для игры, и программу
в машинных кодах, которая будет осуществ-
лять копирование части ОЗУ "библиотеки 1 в
ОЗУ игрового поля.

Остановимся на этом методе поподроб-
нее. Начнем с выбора оптимального размера
графического объекта. Как показывает опыт
наиболее удобны для визуального восприятия
(с учетом размеров экрана, количества точек
на нем, а так же аппаратной организации
ОЗУ экрана) такие размеры (все данные да-
ются для режима э2 симвода в строке): по
горизонтали 4, 8, 12, 16, 20, 24, 28, 32 точек
(чаще всего 16), по вертикали от 1 до 20 (ча-
ще всего 18). Большое значение имеет так
же цвет объекта. Необходимо, чтобы он
смотрелся наиболее контрастно на окружаю-
щем его фоне. Но поскольку в БК-0010 всего
четыре цвета, то все они (кроме синий на
черном) смотрятся достаточно контрастно.
Во многих игровых программах требуется
чтобы объект "висел" над фоном (различные
самолеты, шары в спортивных играх и т.д.).
Такой эффект очень хорошо достигается с
помощью тени (тень желательно давать чер-
ным цветом, следовательно, фон должен
быть другого цвета, например красного).
Тень необходимо перемещать паралельно
объекту, причем от расстояния между ним и
тенью зависит мнимая высота объекта над
фоном. Для того чтобы два объекта при сов-
падении их траекторий не "наезжали" друг на
друга (при этом они начинают мерцать, так
как выводятся поочередно в одно и тоже ме-
сто экрана) необходимо перед перемещени-
ем объекта в нужную сторону проверить от-
сутствие там другого графического ооъекта»

Итак, всем хорош данный метод кроме
одного: он обязательно требует полностью
однородного фона. Именно поэтому он и не
подходит для всех игр. Там, где, например,
самолет пролетает над сложным рельефом
этот метод непригоден, так как он ' затрет"
фон по мере своего перемещения.

Существуют и другие методы перемеще-
ния без 'стирания фона". Например, в
GWBASIC IBM PC существуют графические
операторы GET и PUT, которые запоминают
графический образ в массиве, а затем позво-
ляют накладывать его в нужное место экра-
на, совершая над ним и экраном операцию
"исключающее или". Если затем повторить
эту операцию, то на этом месте любой фон
будет восстановлен. Но этот метод имеет
массу недостатков. Цвет самого объекта, на-
ложенного на сложный фон изменяется в за-
висимости от цвета фона. Перемещение объ-
екта проходит за два такта (а не за один, как
в предудущем случае), поэтому объект (если
он крупный) все-таки "мерцает". И если пер-
вый недостаток еще можно устранить ис-
пользовав два массива (один для объекта,
другой для фона) и операцию PSET (замеще-
ние), то от второго недостатка избавиться на-
много сложнее.

Поэтому единственный способ переме-
щать изображение по сложному фону без
мерцания и затирания фона это программная
организация спрайта.

Как уже говорилось выше, на многих бы-
товых компьютерах спрайты организованы
аппаратно. Аппаратная организация спрайта
это отдельное ОЗУ, где хранится "маска" ри-
сунка, который "накладывается" на опреде-
ленное место экранного ОЗУ, а на экран вы-
водится уже общая картина. Спрайтов обыч-
но бывает несколько (от 8 до 64) в зависимо-
сти от компьютера, каждый из них может пе-
ремещаться по экрану в произвольно задан-
ном слое. Послойная организация необходи-
ма для обеспечения "наложения" "ближних"
спрайтов на "дальние".

Такая аппаратная поддержка позволяет
писать зрелищные игровые программы даже
на относительно "слабых" восьмиразрядных
компьютерах.

Поскольку БК-0010 лишен аппаратных
спрайтов, то возникает необходимость напи-
сания программы, имитирующей спрайт. Для
моздания такой программы необходимо ре-
шение двух задач:

1. Необходимо перемещать рисунок по
экрану без "мерцания".

2. Нужно, чтобы сложный фон "под ри-
сунком не изменялся".

Поскольку все перечисленные выше ме-
тоды не удовлетворяют обоим условиям,
представляется необходимым выбрать дру-
гой алгоритм.

Для его реализации необходимо дополни-
тельное ОЗУ, состоящее из трех частей. В
первой части будет храниться "маска" рисун-
ка, т.е. то, что будет накладываться на фон.
Во второй (равной по величине первой) будет
храниться часть фона, которую "закрывает'
на экране рисунок. В третьей части (большей
по объему) будут производиться все дейст-
вия (накладка маски, замена фона и т.д.), а
затем уже подготовленная картинка будет
целиком копироваться в нужное место экра-
на.

Если размеры рисунка ("маски"), напри-
мер, А"В, а величина шага перемещения ри-
сунка по экрану С, то соответственно разме-
ры первой, второй и третьей частей будут
А"В, А"В, (А + С)"(В + С).

Для "облегчения" алгоритма третью часть
ОЗУ я взял несколько больше
(А + 2"С)"(В + 2"С).

В графическом виде это будет выглядеть

так:

С — Третья часть ОЗУ

D — ОЗУ экрана

Алгоритм перемещения спрайта будет
выглядеть следующим образом:

I Начальная установка спрайта:

1. Из нужного места D копируем содер-
жимое в С

2. Из С копируем среднюю часть в В

3. Накладываем А на среднюю часть С

4. Копируем С в нужное место D

II Перемещение спрайта:

1. Копируем из D в С со смещением на
один шаг в нужную сторону, так чтобы " ста-
рый" рисунок сместился из средней части С
к границе.

2. Копируем В в С затирая "старый" рису-
нок сохраненным в В фоном.

3. Копируем среднюю часть С в В, чтобы
запомнить в В "новый" фон.

4. Накладываем А на среднюю часть С.

5. Копируем С в нужное место D.

III. Для того, чтобы убрать спрайт с экрана
есть два метода. Либо использовать "чер-
ную" маску, либо (если нет такой возможно-
сти) выполнить подряд 1,2, 3, 5 пункты (про-
пустив 4) из II раздела (перемещение спрай-
та).

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

Именно этот алгоритм реализован в про-
грамме "Редактор спрайтов" в виде вставки в
машинных кодах. Кроме этого алгоритма в
этой программе реализован алгоритм копиро-
вания части ОЗУ (заданных размеров) в дру-
гое место ОЗУ.

Краткая характеристика
программы "RS"

Программа "RS" предназначена для со-
здания, редактирования и сохранения на маг-
нитной ленте библиотеки графических обра-
зов. Библиотека графических образов в даль-
нейшем используется в игровых программах
вместе с подпрограммой "спрайт" для обес-
печения перемещения по экрану графических
объектов.

Файл, записанный на магнитной ленте мо-
жет быть использован программой на языке
БЕЙСИК , что позволяет сохранить до 2 кБайт
программного ОЗУ.

Кроме графических образов в файл, по
желанию пользователя, включаются две под-
программы в машинных кодах: п/п "Спрайт"
и n/п "Перемещение".

Подпрограмма "Перемещение" предназ-
начена для реализации процесса перемеще-
ния рисунка по экрану. Размеры рисунка в
данном случае могут варьироваться в боль-
ших пределах. Подпрограмма колирует часть
ОЗУ (например ОЗУ экрана) в другое место
экрана. Начало подпрограммы находится по
адресу 37646 (восьмеричное), соответствую-
щий оператор БЕЙСИКа: DEF
USR1 = &OJ37646. Перед обращением к под-
программе необходимо задать следующие
параметры:

в ячейку 37662 занести адрес источника
(откуда копируем). POKE &037662, < адрес >

в ячейку 37666 занести высоту картинки в
точках. POKE &037666, <высота>

в ячейку 37672 занести ширину картинки в
точках, уменьшенную в 4 раза.

POKt &037672, < ширина/4 >

После этого нужно обратиться к подпрограм-
ме, передав ей адрес приемника (куда копи-
руем).

А % = USR1 (< адрес >)

Получив управление, подпрограмма ско-
пирует часть ОЗУ с заданными размерами из
источника в приемник.

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

Подпрограмма "Спрайт" предназначена
для перемещения по экрану цветного графи-
ческого объекта фиксированных размеров,
16"20 точек, без затирания фонового рисунка
на экране.

Начало подпрограммы находится по ад-
ресу 37400

DEF USRO = 6037400

Адрес ' маски" (изображения) засылается
в ячейку 37506

РОКЕ &037506,< маска >
Для предварительного задания местопо-
ложения спрайта необходимо заслать в ячей-
ку 37610 адрес верхнего левого угла страйта
уменьшенного на 401

POKE &037610, < адрес > -&0401
Для высвечивания спрайта на пустом ме-
сте (начальная установка) необходимо снача-
ла заслать в ячейку 37412 число 414, после
чего фиктивно обратиться к подпрограмме (с
парметром 0), а затем снова записать в ячей-
ку 37412 число 12700

Текст программ "Спрайт" и "Перемешение4

Адрес:

1

Ь с с ь

к Б р И

ч н ы е

к о д к :

37400

1
1

12737

И 2021

37626

4537

374! 0

1

37606

11700

431

12701

37420

1

650

12702

24

112120

37430

1

112120

112120

112120

5720

57*40

1

5302

1371

■2700

431

37450

61500

10003

12701

650

37460

»

12702

24

112021

112021

37470

1

112С21

112021

5302

37500

t
1

1371

10300

12701

0

37510

1
1

12702

24

12703

4

37520

1
1

111104

10405

6304

50504

37530

1

42704

125

10405

6204

37540

1
1

50504

140410

111005

112104

37550

1
«

60504

110420

5303

13б0

37560

1

62701

"4

5720

5302

37570


1

1351

12757

112120

37626

37600

4537

37606 ■

207

12700

37610

1

0

12701

400

12702

37620

1
1

34

12703

ь

0

37630

5303

1375

62700

72

37640

1
1

5302

1367

205

11500

37650

1

1

12704

100

163704

37672

37660

1

>

12701

0

12702

0

37670

1

12703

0

112120

5303

37700

1375

•>0400

6040;

5302

37710

1

1367

207

POKE &037412.&0414
А% = USRO(0%)
POKE &037412,&012700

После этого можно приступать к переме-
щению спрайта. Перемещение спрайта осу-
ществляется с помощью приращения по го-
ризонтали DX%, и по вертикали DY%

DX% = [-1;0;1] 1 со-

ответствует 4 точкам

DY% = [-4;-3;-2;-1;0;1;2;3;4] 1 соответству-
ет 1 точке

Для перемещения спрайта в нужном на-
правлении необходимо выполнить следую-
щие действия:

А% = USRO(DY%"6% + DX%)
POKE

&037610,РЕЕК(&037610) + DY%"64% + DX%

Для гашения спрайта можно либо исполь-
зовать в качестве маски фоновый цвет, либо
выполнить следующие действия:
POKE &037502.&0433
А% = USRO(0%)
РОКЕ &037502,&010300
В результате выполнения этих операторов
спрайт станет невидимым.

Инструкция по эксплуатации
и описание работы программы
"Редактор спрайта"

Программа "Редактор спрайтов" проста в
эксплуатации и не требует специальных зна-
ний от пользователя.

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

- чтение файла с ленты;

- запись файла на ленту;

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

Режим "Чтение файлов с ленты"

Программа запрашивает имя файла на
чтение. Если вместо имени нажать <ввод>,
то программа вернется в меню. Если имя
файла задано, на экране появляется надпись:
"Включите магнитофон и нажмите любую
клавишу (кроме клавиши <ввод>)".

После нажатия любой клавиши экран очи-
щается и происходит чтение файлов с ленты.
На экран выводятся имена встретившихся
файлов, а заданный файл загружается в ОЗУ
с восьмеричного адреса 37400. Если файл не
считался, то на экран выводится соответству-
ющее сообщение и программа возвращается
в режим "Чтение файла с ленты".

Режим "Запись файла на ленту"

Программа запрашивает имя файла на за-
пись. Если вместо имени нажать <ввод>, то
программа вернется в меню. Если имя файла
задано, на экрана появляется надпись:
'Включите магнитофон и нажмите любую
клавишу (кроме клавиши <ввод>)". После
нажатия любой клавиши происходит запись
части ОЗУ начиная с адреса 37400. Длина за-
писи зависит от информации на экране.

Режим "Редактирование спрайтов"

Это основной режим программы. При его
вызове на экране возникает таблица с ин-
формацией. Режим "Редактирование спрай-
тов" имеет два подрежима — графический и
цифровой.

В графическом режиме в таблице высве-
чивается окно из 18"24 элементов (в виде
цветных квадратов), каждый из которых соот-
ветствует точке на экране. Окно может пере-
мещаться в верхней части экрана по вертика-
ли и горизонтали. Местоположение окна по
горизонтали индицируется горизонтальной
линией длиной 24 точки. Для более точного
определения местоположения "окна" в левой
части таблицы выводятся асолютные адреса
ОЗУ, соответствующие адресам левых вось-
ми точек в каждой строке. Таким образом, в
таблице отображается часть экрана, увели-
ченная в 8-10 раз. По всей площади окна"
(18"24) перемещается мерцающий курсор (с
помощью клавиш (вправо), (влево), (вверх),
(вниз)). Если курсор попытаться вывести за
пределы "окна , то произойдет автоматиче-
ское смещение координат окна в нужную
сторону. По вертикали окно перемещается с
дискретностью в одну точку, а по горизонта-
ли дискретность перемещения восемь точек.
Слева от таблицы, внизу, высвечивается "об-
разец текущего цвета". Это квадрат, который
закрашен в тот цвет, с каким в данный мо-
мент работает редактор. Для смены цвета
служит клавиша <С> (color). Для того, что-
бы нарисовать в нужном месте точку нуж-
ного цвета, необходимо задав цвет клави-
шей <С>, и установив курсор стрелоч-
ными клавишами, нажать клавишу < про-
бел >. После этого на месте курсора в
"окне" появится квадрат, а в соответствую-
щем месте экрана высветится точка заданно-
го цвета. С помощью графического режима
пользователь может создавать образцы гра-
фических объектов, которые он затем смо-
жет использовать, например, в игровых про-
граммах.

После того, как закончено формирование
графических объектов, нужно нажать клавишу
(ввод). Внизу экрана появляется надпись:
"Включить п/п "СПР" в ОЗУ? (Д/Н)". Если на-
жата клавиша (Д), то начиная с адреса 37400
в ОЗУ записываются две подпрограммы:
подпрограмма "Перемещение" и "Спрайт".
Обе эти подпрограммы написаны в машин-
ных кодах и могут быть использованы для
организации перемещений графических объ-
ектов в различных программах. Способ ис-
пользования обеих подпрограмм описан в
предыдущей части.

"Редактор спрайтов" позволяет так же ре-
дактировать информацию в восьмеричной
форме. Для этого создан цифровой подре-
жим редактора. Он служит для исправления
существующих и написания новых программ
в машинных кодах. Для перехода в цифровой
режим необходимо нажать клавишу (8). В
этом случае вся информация в окне будет
представляться в привычном всем програм-
мистам восьмеричном виде. Информация
редактируется с помощью стрелочных кла-
виш и цифровых клавиш (0-7). При измене-
нии цифровой информации в ' окне" изменя-
ется и соответствующая информация в ОЗУ.
Во всем остальном этот режим аналогичен
графическому. Для перехода в графический
режим нужно нажать клавишу (9).

Описание работы программы

Прежде чем приступить к описанию рабо-
ты программы несколько рекомендаций.

1. Все коментарии в начале программы
необходимо исключить в целях экономии па-
мяти (но даже если вы будете набирать про-
грамму целиком эти строки исчезнут сами
собой).

2. Не набирайте программу подряд.
Прежде наберите строки с оператором DATA
и проверьте правильность их ввода следую-
щей программой:

1 S! = О

2 FOR 1= 1 ТО 218

3 READ А%

4 S! = S! + А%

5 NEXT I

6 ? S!

Запустите программу и если она выдаст
значение 767045 то наберите: DELETE-6 и
продолжайте набор оставшейся части про-
граммы (как правило, ошибки при наборе
происходят именно в блоке данных). В про-
тивном спучае проверьте правильность набо-
ра данных в операторах DATA.

Ну а теперь о самой программе.

Программа состоит из "рекламы" (строки
2850-3205), трех основных режимов:

- Чтение (350-570)

- Запись (580-800)

- Редактирование (1890-2810)

и множества мелких вспомогательных
подпрограмм, например:

- Вывод таблицы (810-860)

- Очистка верха экрана (870-900)

- Перемещение линии под рисунком (910-
960)

- Вывод восьмеричных адресов (970-1010)

- Вывод графической картинки в таблице
(1020-1120)

- Вывод меню (1130-1240)

- Очистка экрана (1250-1280)

- Индикация текущего цвета (1380-1400)

- Вывод восьмеричной таблицы (1410-
1470)

- Помощь (1480-1590)

и так далее.

В подпрограммах "Чтение" и ' Запись я
использовал программу, предложенную
Д.Бароновым в девятом номере "Вычисли-
тельной техники" за 1988 год. Компактность
этой программы позволяет включать ее прак-
тически в любую программу на БЕЙСИКе.

Адрес:

Число:

Адрес:

Число:

40000

1760

40002

7700

40100

7774

40102

37760

37777

1 | м *

177774

177777

177777

153777

177727

40774

1 < ivI |

37501

40760

7501

40701

1501

177701

1777

1774

1725

53700

1725

53700

7400

50360

177400

•10377

176000

ь / . *1М

чЬОн

> ■ в а в

12520

24

417С0

0

41702

24

42000

0

42002

2524

Строка 10 обеспечивает стирание экрана,
установку "рулона" в начальное положение, и
стирание "командной строки" экрана. В 20-й
строке вызывается рекламная заставка, поэ-
тому останавливаться на ее опиСании не сто-
ит.

В строках 35-150 происходит очистка эк-
рана и загрузка в ОЗУ подпрограмм в ма-
шинных кодах ("Чтение/запись", "Графиче-
ский режим").

В строках 140-180 происходит стирание
экрана и вывод меню. В строках 210-340 ор-
ганизуется опрос клавиатуры и перемещение
курсора с выбором соответствующего режи-
ма работы. В зависимости от значения пере-
менной К% вызывается либо подпрограмма
"Чтение" (350-570), либо "Запись" (580-800),
либо "Редактирование" (1890-2810)

И, наконец, чтобы проверить работоспо-
собность программы DEM.ASC (или
DEM.COD) рекомендуется создать с по-
мощью программы "Редактор Спрайтов" на
ленте файл DEM" с изображением двух гра-
фических объектов. Чтобы создать этот файл
на ленте необходимо войти в режим "Редак-
тирование спрайтов" в цифровой подрежим и
набрать следующую информацию. Йнформа-
ция набирается сверху вниз (адреса даны
для ориентира, набираются только числа в
нужном месте.)

После ввода этой информации на экране
должно появиться две картинки изображаю-
щие мышь в двух различных положениях.
Первая картинка должна быть в левом верх-
нем углу экрана, а вторая на 8 точек правее
первой. Если все получилось правильно, на-
жмите <Ввод>, и после появления надписи
"Включить п/п "СПР" в ОЗУ? (Д/Н)", нажмите
клавишу <Д>. После этого выберите режим
"Запись" и запишите на ленту файл "DEM

После этого вы можете, вызвав файл
DEM.ASC (или DEM.COD), запустить его на
выполнение. Сразу после очистки экрана
включите магнитофон с файлом ' DEM' (тем,
что создан программой 'Редактор спрай-
тов"). Он должен загрузиться (в верхней час-
ти экрана появится изображение) и по слу-
чайно закрашенному фону изображение на-
чнет перемещаться в различных направлени-
ях, и меняя свою скорость. Таким образом,

Адрес:

Число:

Адрес:

Число:

40006

1760

40010

7700

40106

7774

40110

37760

37777

177774

177777

177777

153777

177727

40774

37501

40760

7501

40700

41501

177700

41777

37700

51774

1725

53700

1725

53700

7405

360

177401

377

176001

77

12000

iitii

2524

4t/4<e

12000

41710

0

42006

12520

42010

0

написав вместо программы DEM.ASC любую
другую программу пользователь может, ис-
пользуя файл, созданный программой "Ре-
дактор спрайтов" (в качестве библиотеки гра-
фических объектов и подпрограммы переме-
щения этих объектов), сохранить для своих
нужд до 2 кБ программного ОЗУ и получить
возможность писать зрелищные и эффектные
программы.

10 'Демонстрационная программа по использо-
10 вании подпрограммы "Спрайт* и библиотеки
10 'графических образов, которые были созда-
10 ны и записаны на магнитну» ленту прог-
10 'раммой «Редактор Спрайтов* (файл называ-
10 ется "DEH"). Данная программа может слу-
10 '1ить примером фрагмента игровой програн-
10 мы или графического редактора
i 0 ?CHRB {&0214) CHR8 (№ 14) CHR8 (It0224)

СНШШЗо/
20 FOR IZ=8t0400 ТО &0414 STEP <2Х
30
READ АХ
40 POKE IX,AX
50 NEXT П
o0 DEF iiSR:=&0400
70 DEF USR2=&ul00602
80 POKE l<0320,3%
90 POKE MJ322.&037400
100 Aft=USRlCDEM ")

liu A*i=li3R5ifii)

120 IF PEEK(&0320)256Z>0X THEN 110
130 DEF USR3=l(037400
140 FOR IX=0X TG 100Z

145 LINE iRND (IX)*255X,RNP11 'a) *23910/.)- (RNB
(17.) *255X,RND(1X) *2o9X+1OX),RND U X) «ЗХ+0.6s.
150 NEXT Г/.
160 COLOR IX

200 POKE Ш7ЫО.ШОООО
205 POKE Ш7506,&040402
210 POKE &037412,Ь0414
215 AX=USR3(0X)

220 POKE &037412,Ш2700

221 NX=16642X

230 DYX=1X

231 SXX=1X

235 FOR IX=0X TO 60007.

236 IF iX МОЮ 4X=0X THEN NX=33290!-NX

237 POKE Ш7506, NX
240 AXsUSR3 lDYX*6X+DXX)

245 POKE &037610,PEEK(Ш7610) +DYX*64X+DXX

246 FOR RX=0X TO ZX

247 NEXT RX

250 P7.=PEEK(ttQ37610)

251 IF PX>&074000 OR PXU04U00 THEN DYX=-DYX

252 РХ=РЕЕК(Ш7610/ MOD 64X

253 IF PX>57X OR PX<17. THEN DXX=-DXX
255 iF IX «CD oOXOOX THEN 270

260 IF ABSiDYX)=4X THEN №SGN(DYX) ELSE

DYX=(ABSiDYX)+lX)*S6N(DYX)
265 IF IX HOD 1000X=0
'A THEN ZX=200X-ZX
270 NEXT IX
500 STOP

1000 DATA 5443X,4930X,5569X,214X,-27503X,
32450X,135X

:0 'Программа «Редактор Спрайтов*
10 'Либутов 04. г. Ереван ул. Церетели
10 'д. 46 кв. 38 тел. 42-33-96
10 'Версий 1.0 1990 г.
i 0 ?СНкй (Ш14) CHRB i№ 14)CHR8 (ДО224)

CHRC (Ш36) CHRfi (&D221)
20 S0SUE 2650
30 П/.=-1Х
35 RESTORE 1650
40 60SU3 870

50 FOR 1Х=Ш00 ТО Ш14 STEP 21

60 READ П

70 РОКЕ IX.JX

80 NEXT IX

90 DEF USR0=!<0416

100 DEF USRi=fe0400

110 DEF LiSR2=l(0100602

120 DDX=&037400

130 POKE &0322,DDX

140 60SUB 870

150 SDSUS 1250

160 COLOR 2

170 GOSUB 810

ISO ? АТ(9Х,23Х)"Помощь - клавиша Hn;
190 KX=1X
200 G0SUB 1190
210 Ig=INKEYB

220 IF IfcOCHRB(26X) THEN 250

230 IF KX=1X THEN KX=3X ELSE KX=KX-1X

240 G05UB 1190

250 IF 16<>CHR6(27X) THEN 280
260 IF K7.=3X THEN KX=1X EL5E KX=KX+1X
270 GOSUB 1190

280 IF 1ЮСНРЙ(72Х) AND Ifi<>CHRCi04X>

THEN 310
290 60SUB 1480
300 B0T0 150

310 IF IHOCHRJHIOX) THEN 210

320 ? AT(9X,25X)STRINGS(18X.32X);

330 ON KX GOSUB 350,580,1890

340 GOTO 150

350 CLS

360 GOSUB 870

370 GOSUB 810

380 ? АТ(9Х,5Х)"Имя файла на чтение:"

390 GOSUB 1290

400 ? £T(11X,SX);

410 COLOR IX

420 INPUT АЙ

430 COLOR 27.

440 IF АЙ=ШЙ(10Х) THEN RETURN

450 Ай=A&+57RIN68 i16X-LEN(Ай),32X)

460 POKE &0320,3X

470 SOSub 1310'

472 ? AT(0X,4X);

480 IC=INKEY&

490 IF IB=CHR8tl0X) THEN 350

500 IF THEN 480

501 60SUB 1250

502 ? AT(0Х,4Х);'Найдены файлы:"
510 A&=USR1 Ш)

520 IX=USR2U7j

530 IF РЕЕШ0320)256X=0X THEN RETURN
540 S0SUB 1250
550 ?АТ(22,52)ВК сожалений файл не считался
560 AT (32,72) "Попробуйте повторить чтение
570 If INKtY«=KB THEN 570 ELSE 60TC
350
580 Б05УБ 1250
590 GOSuB £10

600 ? AT(9%.5X)*йия Файла на запись;"

610 GGSUB 12?0

620 ? AT(112,8X);

630 COLOR IX

640 INPUT АВ

650 COLOR 2У.

660 IF AB=CHR&(10X) THEN RETURN
670 ftfisA^STRIN6S* 16a-L£«(AS> ,322)
630 POKE 40320,22
690 12=4043576

700 IF PEEK 112)002 THEN 730
710 12=12-22

720 IF Ш=Ш THEN 700 ELSE RETURN
730 POKE 40324, IX-DH+22
740 SOSUE 1310

750 m=mm

760 IF Ifi=CHRfi(102) THEN 550
770 IF 1Й=вв THEN 750
780 AB=USRl(Afi)
790 iZsUSR2(I%>
Б00 RETURN

810 ?AT (62,32} CHRB i i 702); 5TRIN6S (242,13125;

CHRSii632;;
B20 FOR 12=42 TO 212

330 ?AT(62,IX)CHR5(1832)AT(312,ШCHRSi1332)i
£40 NEXT 12

850 ?AT (62,222 i С НШ1662}; STRING5 (9 2,1E1X)

"=L Ob=6 SIRIN6B(1GZ,!3 Ш s Chfifi i165Z);
860 RETURN

870 FOR 12=4037400 TO 4Q42000 STEF 22

r. <- * P". p.« г» m в ► { %J

о&J rurx I;.,OX
£50 NEXT IX
900 RETURN

910 F*=it045400*iTAX «05 64Х/

рпкР -У-У Qt;

7 —v lU' .L i U b/i| vii

°30 FOR 12=F2 TO F2r42 STEP 22

940 POKE I2,TT2

950 NEXT 12

960 POKE F2+62t02

970 LOCATE 02,02,02

930 ? AT{02,42)I

990 FOR IX=TAX »G ТЙЫ088Х STEP 642
1000 ? ОСТЙП!)

1010 NEXT 12

1020 IF R2=12 THEN 1410

1030 TY2=193282

1040 FOR I2=TA2 TO TA2+10832 STEP 642
1050 TY2=TY2+6402
1060 TX2=-27.

1070 FOR J2=I2 TO 12+42 STEP 22

1080 TX2=TX2+16X

1090 POKE 40456, TY2+TX7.

1100 A2=USR0iJX)

1110 NEXT Л,1Х

1120 RETURN

1130 ? AT(82,77.)"Чтение файла с ленты
1140 RETURN

1150 ? АТ(82,ИХ)"Запись Файла на ленту *
1160 RETURN

1170 7 AT(87., 152)"^едактисование спрайтов3

1180 RETURK

1190 FOR 12=12 ТО 32

1200 IF I2=KX THEN 7CHR!H4u221);

1210 GN 12 6GSUB 1130.1150,1170

1220 IF I2=К2 THEN ?CHR5{&G222i;

w t* A l-r> •■ • « I ■

NtAi iU

1240 RETURN

•тл г ** тч.-v т *

■ ■ ■ • i I / _ • j> ill J » •

* W V i Wll 4 if v I W 4. Л

1260 ? AT(02,12;{STRINGS1322,322;j
i270 NEXT I!;
1230 RETURN

1290 ?A?(72,202?лДля выхода нажать <8вод>п
1300 RETURN

1310 ? AT-!92,152)"Вклините магнитофон,*
1320
1 AT(72,162) л наймите л»6у» клавишу"
1330 ? AT(62,172)" «кэоме клавиши <5еод>Г
134О RETURN

1350 FOR N2*12 ТО 5002
1360 NEXT N2
•370 RETURN

1360 LINE i 4 02,22О X) - s (72.72),С2,£
1390 PAINT (41a,2212),C2,C2
1400 RETURN

1410 FjR I2=TA2 TO TAX+10S82 STEP 642
1420 FOR J2=I2 TO 12+42 STEP 22
1430 0Й=0СТЙ(РЕЕК1ЛН
1440 0&=3TRING2(62-LEN(0S),482)+0fc
1450 ?АТ((Л-Ш*4Х+72, (1Х-ТА2)/64Х+4Х)

Г. К Q* * '' »

1-60 NEX7*JX,|X

14/f «tii'KN

1480 COLOR 1

1490 ?AT(72,52)Я1 Курсор влево1

1500 ?AT(7X,o2)*> Курсор вправо'

1510 ?АТ(72,72)"3 Курсор вверх

1520 "AT(72,82)"- Курсор вниз3

1530 ?нТ(72,102)"С Выбор текучего цвета'

1540 ?АТ(72,112)"9 Переход в гра®. режим"

1550 ?AT(72,122)t3 Переход в цифр, режим"

15б0 ?АТ(72,15Х/в<Про6ел> Фиксация точки =

1570 ?AT(72,1B2)S< ввод > Выход в главнее

1580 ?АТ(162,192)"менм'

1590 IF INKEY8=,!U THEN 1590 ELSE RETURN

1600 DATA 4011500,4012701,4050077,4012702,

4060000,4012703,4010,4012704
iftIO DATA 40100,405005.406000,40102001,

405305,4D110512,4U60402 ,4311 0511
1620
DATA 4060402,40110512A4060402.405005,

4OtOOO.V0102001,40530о,40110511
1630 D
hth 4000401540110511,4060401,40110511,

4060401,4Q53v3,401350,405337
1640 DATA 40404,405237,40410,40207
1650 DATA 54432,49302,55692,J142,-275032,

« — г v

vllh' ' 4 f 1 J w

1660 DATA 49332,«9332,55cS2,32,44202,178602,
-4X,32052

* L 7 *- " * "! ЛГ r" т n ■ nil г" — • ■ tr in - r»'

it)/J liMIH

jjc'ta, ioa , dj/v/.

i&£0 DATA 02,43622,260502,642,27532,7632,
2607^2.22

1690 DATA 3022,27522,7452,1352,02,213452,

- « : I . »■ ' »■

— / i - 4 h ' — ■ i

1700 DATA 4012737,kjll202l,4037626,404537,

Scuo/fiva

1710 DATA 6012700,60431,6012701,60650,6012702
1720 DATA 6024,60112120,60112126,60112120,

SiG 112120, 4tD3720, bG5302, 60 13; 1
1730 DATA 6012700,60431,606l500, &010003,

6012701,60655,6012/02,6024
1740 DATA 60112021,60112021,60112021,

6ul1202 i. 6057^0, 605302,601371
1750 DATA 60 10300,601270l,600.60l2702,6024,

6012703,604,60111104,6010405
1760 DATA 606304.6050504,6042704.60125,

60 10405, 6G6204, 6050504,60146410
1770 DATA 60111005,60112104,6060504,

60110420,605303.601360,6062701,6074
1780 DATA 605720,6D5$02, 60 Ш1
1790 DATA 6012737,60112120,6037626,604537,

6037606,60207
1800 DATA 6012700,600,6012701,6G400,6012702,

6034,6012703,606,600
1810 DATA 605303,60i3?5,6062700,6072,605302,

601367.60205
1820 DATA 66ll500,6Gl2704,60100.60163704,

6037672,6012701,600,601270z.600
1830 DATA 6012703,600,60112120,605303,601375,

6060400,6060401,&05302,601367,60207
1840 DATA 6012570,6040206,6(J40206,6035272,

600,6057774,6020006,6020006,6057774,500
3850 DATA 6052536,6020406,6025656,6020122,
6012,6052400,6022102,607070,6052724,
6025252

1360 DATA 6052524,6035252,603011,601440,

6077724,600,6024024,604525c'
1870 DATA 6056526,604525c.6024024,600,

6036532,6060206,6060^06,6037772,600
1S80 DATA 6052574,604060c,6040606,Ш7372
i890 GOSUB i250
1900 GOSUB 310
1910 it'll
1920 rx=ox

1930 ?АТ(0Х,ЗХ)'!АДРЕС:*1 СЛОВО 2 СЛОВО 3 С
JIOBO !i

1940 ? AT(ОХ,22л)"Цвет:"

1950 GOSUB 1380

1960 ТАХ=6040000

1970 GOSUB 910

1980 ХХ=OX

1990 YX=0/.

2000 LX=1

2010 lOCATE XX+7X,YX+4X,LX
2020 I8=INKEYB

2030 IF I&OCHRR(8X) THEN 2100

2040 IF XX>0X THEN 2090

2050 IF <ТАл MOD 64X)=0< THEN 2820

2060 TAX=TAX-2X

2070 GOSUB 910

2080 GOTO 2820

2090 XX=XX-1X

2100 IF Ш>ШЙ(25Х) THEN 2180

2110 IF XX<23X THEN 2160

2120 IF (TAX MOD 64X)=58X THEN 2820

2130 TAX=TAX+2X

2140 GOSUB 910

2150 GOTO 2820

2160 XX=XX+1X

2170 GOTO 2820

2180 IF i8<>CHR8(26X) THEN 2250

2190 IF YX>OX THEN 2240
2200 IF TAX<6037500 THEN 2820
2210 TAX=TAX-64X
2220 30SUB 970
2230 GOTO 2820
2240 YX=YX-1X

2250 IF ICOCHR5i27X) THEN 2320

2260 IF YXU7X THEN 2310

2270 IF TAX>6043000 THEN 2S20

2280 TAX=TAa+C4X

2290 GOSUi 970

2300 50TO 2820

2310 YX=YXrl:.

2320 IF IiK>CHRBi32X) OR RX=1X THEN 2430

2330 X1X=TAX+YX*64X+{XX3X)*ll

2340 Х2Х=4ХЛ(ХХ MOD 6X)

2350 X3!=3i*X2X

2360 X2!=(4:-:Xi*X2X

2370 IF X3!>32767X THEN X3X=X31-655361

ELSE X37.=X3i
2380 IF X2 i >327672 THEN X2X=X2":-65536:

ELSE a2A=X2!
2390 OUT Ш,ХЗХ,0Х
2400 OUT X1X,X2X,4X-CX
2410 LOCATE OX,OX,OX
2420 GOSUB 1030

2430 IF iaOCHRSUOX) THEN 2600

2440 TTX=OX

2450 GOSUB 910

2460 TT7.=-1X

2470 LOCATE 0.0,0

2480 ?AT(OX,2oX)"Вклинить n/n 'CfiP' 8 ОЗУ? (

Д/Н)
2490 IB=iNKEY8

2500 IF IfiOCHRC(6D144) AND I»<>CHRSС&0104/

THEN 2580
2510 RESTORE 1700

2520 FOR IX=6037400 TO 6037712 STEP 21
2530 READ AX
2540 POKE IX,AX
2550 NEXT IX

2560 ? AT(0X,23X):5TRIN6B(31X,32X);
2570 RETURN

2580 IF I6=CHR8i60156) OR 1Й=ШШ60116)

THEN 2560
2590 SOTO 2490

2600 IF 1ЙОШШ99Х) AND I&OCHRft(67X)
THEN 2630

2610 IF CX=4X THEN CX=iX ELSE CX=CX+1X
2620 GOSUB 1380

2630 IF 1ЙОШШ56Х) THEN 2660
2640 RX=1X
2650 GOSUb 970

2660 IF ISOCHRS(57X) THEN 2690
2670 RX=OX
2680 BuSUB 970

2fc90 IF I8<CHRtH4£X; OR IS>CHRfi(55X) OR

r.X=0X THEN 2620
2700 ПХ=6Х-(ХХ MOD 8X.
2710 X2X=TAX+YX*c4Xt(XX8X)«2X
2720 IF X1X=67. OR X1X=-1X THEN 2820
2730 iF X1X=5X THEN 2770
2740 OUT Ш,7ХШЛХ1Х.0-
2750 OUT X2X,VAL(IS)t8t41X,iX
2760 GOTO 25u0

2770 1F ШСВШ49Х) THEN 2820
2780 OUT Х2Х, 40100000,07.
2790 OUT Х2Х,1Д 100000,VAL(I2)
2800 7 Ш
2S10 Б0Т0 2110
2820 L2=r/,-LX
2Е30 605UB 1350
2340 GOTO 2010

2850 FOR I2=lt0400 ТО 40506 STEP 22

2S60 READ AX

2870 POKE 12,AX

2880 NEXT 12

2890 DEF USR8=4037646

2900 DEF U5R9=4Q400

2950 EOSUB 2510

2960 RESTORE 1S40

2970 POKE 4037666.24X

Отделение информатики, вычисли-
тельной техники и автоматизации АН
СССР, Совет по автоматизации науч-
ных исследований при Президиуме
АН СССР и Информационно-ком-
мерческое Агенство Инновационного
объединения АН СССР совместно с
МДНТП им. Ф.Э.Дзержинского про-
водят 14-20 апреля 1991 г. семинар-
выставку-ярмарку

"Автоматизация научных

экспериментов
на основе перспективных
информационных технологий"

В семинаре-выставке-ярмарке
примут участие

-ведущие отечественные специа-
листы;

- зарубежные специалисты из Гер-
мании, Голландии, Польши и других
стран;

- иностранные и советские фир-
мы, совместные предприятия.

Организуется 20-часовой цикл
лекций по следующей тематике:

2980 РОКЕ 4037672,12
2990 FOR 12=07. ТО 402
3040 READ А2
3050 A2=USR9(AX)
3060 FOR J 2=12 TO 1007.
3070 NEXT JX.I2

3080 FOR 12=02 TG 222

3081 FOR J2=02 TO 412

3035 POKE 4037662,246162+12-Л

3090 AX=USR8i246l7X+I2-JX)

3095 POKE 4037662.20503Ы2+Л

3100 AX=USR8 i2050*2-12+Л J

3105 NEXT J2,IX

3110 COLOR 22

3115 ? АТ(132,22УЛ"=L0D=t

3200 IF INKEY£'=" THEN 3200

3205 RETURN__

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

Кроме этого планируется:

- демонстрация новейших разработок в
области САЭ, их компонентов и инструмен-
тальных средств;

- консультации пользователей;

- экспертиза проектов;

- круглый стол;

- информация ведущих зарубежных и оте-
чественных фирм о возможностях приобрете-
ния и заказа САЭ и их компонентов.

Планируется издание материалов семина-
ра.

Организаторы семииара-выставки-ярмар-
ки будут способствовать установлению науч-
ных и коммерческих связей между участни-
камми. Заинтересованные организации могут
выступить в качестве спонсоров.

Семинар ориентирован на работников на-
учно-исследовательских и проектно-конструк-
торских организаций, преподавателей, аспи-
рантов и студентов ВУЗов.

Место проведения семина-
ра — кофортабельная гостиница АН
СССР "Узкое", расположенная в зе-
леной зоне Москвы.

Оплата проживания в гостинице в
стоимость участия в семинаре не
входит.

Всю интересующую вас информа-
цию можно получить по телефонам:
443-49-00, 928-21-85.




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

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



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

Похожие статьи:
Пишите письма - На деревню дедушке...
Новости - Ну сначала расскажу о себе любимом. :)
Все жизнь игра - Новелла к игре "Операция Р.Р."
Юмор - Дневник юзера Васи.
Новье !? - О играх Italian Supercar, Ooutrun Europa, Football, Kenny Soccer Manager, Star Sstrike 2.

В этот день...   21 ноября