ZX-Ревю 1991 №3 1990 г.

Профессиональный подход - новый раздел, в котором слово будет предоставлено лучшим программистам мира. Стива Тернер рассказывает о создании игры Quazatron.


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

Мы открываем этот раздел циклом статей выдающегося английского программиста Стива Тернера (STEVE TURNER). Вы, конечно, знакомы с ним хотя бы по широко распространенной программе "QUAZATRON".

ЧАСТЬ 1.

Когда мне было пятнадцать лет, я вступил в один из первых британских компьютерных клубов. Машина, с которой мы работали, имела 1024 байта памяти и была размером с хороший стол. Прежде чем она могла запустить программу, в неё надо было ввести компилятор языка программирования, который хранился в виде огромной катушки с бумажной лентой. Самой главной и трудной задачей было отыскать у ленты начало и перемотать её по окончании работы.

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

Вот так и началась моя страсть к компьютерам. С тех пор я работал со множеством машин - от огромных стационарных до крошечного ZX80. Работал также и на многих языках программирования, таких как КОБОЛ, ФОРТРАН, АЛГОЛ, освоил несколько машинных кодов. Семь лет занимался коммерческим программированием, достиг должности руководителя проекта и бросил все в первые дни после появления "Спектрума", чтобы начать собственное дело по разработке игровых программ и ни разу об этом не пожалел.

Меня часто спрашивают "Как начать программировать?", "Как изучить машинный код?", "Как написать игровую программу?" В ближайшие месяцы я постараюсь ответить Вам на эти вопросы и заодно попробую показать работу профессионального программиста игровых программ изнутри. Я дам несколько подсказок и полезных советов как начинающим, так и опытным программистам как по БЕЙСИКУ, так и по АССЕМБЛЕРУ.

ЦВЕТОВЫЕ АТРИБУТЫ

Если Вы хотите взять от машины максимум возможного, то Вы должны хорошо представлять ее ограничения. Чем ограничены возможности дизайна? В чем этот компьютер особенно хорош, а чем он плох?

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

1. Избегайте фона

Фон экрана лучше оставлять неокрашенным или почти неокрашенным, а ещё лучше делать его черным. В этом случае Вы можете спокойно перемещать по экрану цветные объекты и всё будет в порядке до тех пор, пока Ваши цветные объекты не начнут накладываться друг на друга. Такая техника хорошо подходит для космических игр, для аркадных игр направления "платформы и лестницы" В своей программе AVALON я использовал конфликт атрибутов в свою пользу. Когда главный герой перемещается, то цветовые атрибуты создают как бы сияние вокруг него, получается, что он как бы освещает сцену.

2. Только два цвета

Применение цвета в главной игровой зоне надо ограничить использованием не более двух цветов. У "Спектрума" достаточно хорошее графическое разрешение, которое позволяет использовать полутоновую штриховку, чтобы получить ряд оттенков и текстур. Примеры такого подхода - KNIGHT LORE, FAIRLIGHT и мой QUAZATRON.

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

3. Много PAPER и мало INK

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

ЗВУК

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

СКОРОСТЬ РАБОТЫ ПРОЦЕССОРА

Самая выдающаяся особенность "Спектрума" - это скорость, с которой его процессор Z-80 может исполнять команды из своего большого набора, что позволяет программными средствами компенсировать отсутствие видеопроцессора и звукового процессора. Тем не менее, важно представлять себе ограниченность его быстродействия. Если, например, Вы хотите полностью перестроить весь экран (как будто Ваш герой вошел в другую комнату), то наилучшая скорость, которую Вы сможете достигнуть — пять экранов в секунду, но этого недостаточно для гладкой мультипликации.

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

Есть один параметр, который определяет, насколько компьютер хорош для игрового программирования. Это отношение скорости работы процессора к размеру видеопамяти. Чем больше этот параметр, тем лучше этот компьютер подходит для создания игр. Более высокое разрешение экрана тормозит видеоигру.

Примечание "ИНФОРКОМА": Для "Спектрума" этот параметр удивительно высок. При сравнительно стандартной скорости процессора он имеет беспрецедентно малую экранную память, что надо конечно отнести к гениальности К. Синклера. Практическим результатом, вытекающим из этого стало то, что это основное ограничение не сдерживало для "Спектрума" конверсию программ, выполненных для компьютеров других моделей. Да, есть ещё ограничения по объему памяти, но их преодолеть проще. Они решаются за счет объема данных. Упрощается музыка, упрощается графика, но логика и динамика игры сохраняются. Нормальная ситуация на рынке программного обеспечения, когда для "Спектрума" есть практически все, что есть для "Атари", "Коммодора", "Амстрада", "MSX" и других машин, но не наоборот. Только сейчас, в последние годы 32-разрядные компьютеры типа ATARI ST превосходят "Спектрум" в отношении скорость/объем экранной памяти. Из этого простого соотношения по-видимому и родился феномен "Спектрума")

УПРАВЛЕНИЕ ИГРОЙ

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

ПАМЯТЬ

В "Спектруме" есть области памяти, в которых программы работают с разной скоростью. Наиболее "быстрая" область нижние 16К ОЗУ (Это справедливо для машин с раздельным полем памяти, см. Техническое Приложение, вып. 1 - прим "ИНФОРКОМА" ). Поэтому наиболее рационально процедуры, от которых требуется высокая скорость работы, размещать именно здесь. Здесь они работают на 30% быстрее. Здесь же желательно хранить и графические образы объектов, которые часто нужны в работе на экране. А прочие данные можно хранить и в верхних областях. Вы даже можете затереть область системных переменных, если в своей программе полностью перехватите управление прерываниями для опроса клавиатуры, отключившись от стандартных процедур ПЗУ. Лично я считаю непрактичным создавать программу с длиной объектного кода более 15К, а остальная часть памяти в моих программах начинена графикой, данными и некоторыми инструментальными средствами.

Одним из своих инструментальных средств я готов поделиться. Эта маленькая программа написана на БЕЙСИКе и служит для удаления строк из программы. Я вообще очень широко использую БЕЙСИК во время подготовки данных, текста и графики для своих игр.

Слейте эту программу с какой-либо своей с помощью команды MERGE. Надо только чтобы Ваша программа начиналась с номера строки 10 или больше. Запустите полученную программу - RUN. А теперь по запросу можете ввести номера начальной и конечной строк, которые Вы хотите удалить. Только не удаляйте первую строку, а то тот машинный код, который в ней записан погибнет и компьютер "зависнет" или "сбросится".

Чтобы сделать себе такую программу, Вам надо:

Набрать приведённый ниже текст, обратив особое внимание на том, что в строке 1 после REM должно идти по крайней мере 18 каких-нибудь символов. Здесь вместо них разместится машинный код процедуры удаления. Постарайтесь также набрать строку DATA без ошибок.

Выгрузить программу (SAVE) на тот случай, если есть какая-нибудь ошибка.

Дать команду GO TO 200, по которой машинный код будет перегружен в строку 1 и установлен за оператором REM.

Запустите программу и по запросу введите номера строк, предназначенных на удаление FROM 200 TO 999. Теперь, когда машинный код перегружен в 1-ую строку, они больше не нужны.

Теперь программа готова для работы. Выгрузите её на ленту в окончательном виде и можете сливать со своей программой, с которой Вы работаете через MERGE.

РАСПЕЧАТКА ПРОГРАММЫ

1 REM 123451234512345123

2 LET ADD=5+PEEK 23635+(256*PEEK 23636)

3 INPUT "FROM";FF;" TO";TO

4 LET TO=TO+1

5 LET X=INT (FF/256): POKE ADD+2,X: POKE ADD+1, FF-(X*256)

6 LET X=INT (TO/256): POKE ADD+9,X: POKE ADD+8, TO-(X*256)

7 RANDOMIZE USR ADD: STOP

200 REM MACHINE CODE LOADER

210 DATA 33,0,0,205,110,25,229,33,01,00,205,110,25,209,205,229,25,201

215 LET ADD=5+PEEK 23635+(256*PEEK 23636)

220 FOR A=0 TO 17

230 READ B

240 POKE ADD+A, B 250 NEXT A

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

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




СОДЕРЖАНИЕ:


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

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



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

Похожие статьи:
8) - Юмор
Анкета - Результаты анкетирования, по результатам опроса 75 Спектрумистов.
Рулезники - рассказ.
Архив - игра "WAR IN MIDDLE EARTH".
Эпилог

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