Как написать игру для ZX Spectrum 1994 г.

Первые шаги к кодовой программе - компиляция игровых программ.


Компиляция игровых программ

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

Большинство компиляторов переводит исходную программу на Бейсике в последовательность машинных кодов, понятных компьютеру. Тем самым заранее проделывается работа интерпретатора, имеющая низкий КПД, за счет чего и достигается более высокое быстродействие. В некоторых случаях скомпилированная программа (или, как ее еще называют, объектный код) может работать почти в 100 раз быстрее, чем Бейсик. Однако не спешите радоваться. Как известно, у каждой палки есть два конца. Поэтому нужно сказать несколько слов и о недостатках применения компиляторов, чтобы вы могли реально оценить их возможности. Так, ни один из них не поддерживает полный набор инструкций интерпретатора, а откомпилированная программа, как правило, не может работать без присутствия в памяти самого компилятора или, по крайней мере, той его части, которая содержит рабочие процедуры. Чтобы не повторяться, рекомендуем обратиться к книге [3], где представлена полная информация о компиляторах, даются их сравнительные характеристики, а также приводится таблица совместимости каждого из них с бейсик-интерпретатором.

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

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

TOBOS состоит из двух файлов - бейсик-загрузчика и кодового блока длиной 12268 байт, загружаемого по адресу 53100. Вершина области бейсика (RAMTOP) устанавливается на адрес 39999, после чего выполняется оператор NEW. B результате может создаться впечатление, что компьютер «сбросился», но на самом деле все так и должно быть. Удаляется только уже ненужный бейсик-загрузчик, а сам компилятор остается в памяти. Теперь можете загрузить вашу собственную программу. После окончания загрузки для начала компиляции введите с клавиатуры команду

RANDOMIZE USR 53100

На экране появится фирменная заставка TOBOS, говорящая о том, что «процесс пошел». По окончании компиляции, если все в порядке и ошибок не обнаружено, на экране появятся еще две строчки вроде

RUN > RANDOMIZE USR 40000 SAVE > CODE 40000,7234

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

RANDOMIZE USR 40000 а для записи на магнитофон -SAVE "name"CODE 40000,7234

Если потребуется, адрес размещения скомпилированной программы можно без труда изменить. Для этого достаточно ввести оператор CLEAR (addr-1)

где addr - новый адрес.

Как уже говорилось, ни один компилятор не понимает весь набор операторов и функций Бейсика, и TOBOS в этом плане не является исключением. Если во время компиляции встретится недопустимая инструкция, появится сообщение

Nonsense in BASIC

с номером строки и оператора. Для TOBOS'a ограничения касаются, в основном, операций с внешней памятью, в остальном же он ведет себя вполне прилично.

Попробуйте обработать с помощью TOBOS, например, программу ЖИЗНЬ, и вы убедитесь в эффективности применения компиляторов. Разница окажется настолько очевидной, что вы, возможно, навсегда откажетесь от Бейсика «в чистом виде».

Теперь попробуйте оттранслировать какую-нибудь другую программу, например, СОКОБАН. После запуска объектного кода вы обнаружите, что, наряду с положительным эффектом (ускорение вывода лабиринта на экран), возникли определенные трудности: управлять грузчиком стало совершенно невозможно. Он так быстро стал бегать по складу, что даже массивные ящики оказались не способны его притормозить. А все оттого, что при написании программы изначально не было расчета на компиляцию. Поэтому прежде, чем приступать к работе над игрушкой, сразу стоит прикинуть, потребуется ли в дальнейшем компиляция, и если да, то это необходимо учесть еще на этапе разработки программы, чтобы в дальнейшем ничего не потребовалось переделывать. Но как же поступить, если вы все-таки столкнулись с подобной ситуацией? В игре СОКОБАН исправить положение достаточно легко. Вставьте в строку 580 оператор PAUSE 0:

550 PAUSE 0: IF INKEY$="P" THEN LET X1=X+1: LET Y1=Y: GO TO 660

а в строку 660 для задержки включите «пустой» цикл:

660 FOR N=1 TO 100: NEXT N: IF U$(Y1,X1)<>" " AND U$(Y1,X1)<>"D" THEN GO TO 700

и все будет в полном порядке.

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

Для придания программе окончательного «коммерческого» вида необходимо собрать все ее части воедино. Как уже говорилось, скомпилированная программа не работает без присутствия компилятора, поэтому на ленте должен быть записан и кодовый блок TOBOS'a. Предположим, что программа оттранслирована с адреса 40000, тогда загрузчик может выглядеть примерно так: 10 INK 0: PAPER 0: BORDER 0: CLEAR 39999 20 LOAD ""SCREEN$: REM Картинка-заставка. 30 LOAD ""CODE 53100,12268: REM Кодовый блок TOBOS. 40 LOAD ""CODE 40000: REM Коды вашей скомпилированной программы. 50 RANDOMIZE USR 40000: REM Запуск программы.

Сохраняется программа-загрузчик уже известным вам способом: SAVE "name" LINE 10

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

- сам загрузчик;

- экранная картинка (если она заранее заготовлена);

- кодовый блок компилятора;

- объектный код скомпилированной программы.

Может оказаться, что увеличения быстродействия, получаемого при использовании TOBOS'a недостаточно. Это может случиться при написании особо динамичных игр с большим количеством персонажей. Тогда на помощь приходят так называемые целочисленные компиляторы, то есть компиляторы, работающие только с целыми числами. К ним относятся программы ZX-Compiler, MCoder2, Softek IS. Однако задействовать все их возможности и получить блестящие результаты совсем непросто, так как они понимают лишь очень ограниченный набор операторов и функций Бейсика. Поэтому применять их следует только после досконального изучения их особенностей, а лучше всего писать программы специально ориентированные на эти компиляторы. В любом случае, советуем вам не оставлять их без внимания, тем более, что существует расширенная дисковая версия компилятора MCoder 2 - MC2b.v4 насколько нам известно, единственная, ибо дисковые версии прочих компиляторов по сути таковыми не являются, так как программа все равно может быть оттранслирована только из памяти. Кроме того, MC2b,v4, в отличие от прочих своих собратьев, создает совершенно независимый от компилятора объектный код, что несколько упрощает компоновку конечного продукта, а главное - освобождает дополнительную память для размещения фонтов, спрайтов, подпрограмм в машинных кодах и прочих нужд. Версия MC2b.v4 имеет еще ряд существенных улучшений и дополнений по сравнению со своим первоисточником, но описание всех этих подробностей выходит за рамки данной книги, поэтому ограничимся сказанным; отметим лишь, что программа эта написана одним из соавторов Александром Евдокимовым.




СОДЕРЖАНИЕ:


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

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



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

Похожие статьи:
Советы экспертов - Игра Killed Until Dead.
Версии - 2 версии игры: Зависший TETRIS.
Первые итоги - переписи спектрумистов.
Железо - Nemo рассказывает о тонкостях торговли по почте.

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