О.Д.Любутов
(Ереван)
Редактор спрайтов
для БК-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 Dhth 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.