Как написать игру для ZX Spectrum на ассемблере


         

Подпрограмма SCREEN не содержит ничего


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

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

; Вывод на экран шарика цвета E в позицию BC PRINT LD A,22 RST 16 LD A,B DEC A RST 16 LD A,C DEC A RST 16 LD A,16 RST 16 LD A,E RST 16 LD A,160 RST 16 RET

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

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

DIRECT - задает направление движения также для левого человечка. Если она имеет значение 1, левый человечек идет вниз, а правый - вверх. При изменении направлений движения она меняет знак и становится равной минус 1 (255).

POSIT - сообщает программе, в какой из двух фаз выводить изображения человечков. При ее значении, равном 0, выводятся спрайты SPR2 и SPR4, а если она равна 1 - SPR1 и SPR3. Иными словами, эта переменная отвечает за то, на какую ногу в данный момент должен наступить каждый человечек.

Стоит сказать несколько слов о том, какими программными средствами изменяются эти переменные. Наиболее просто получается переключение переменной POSIT. Для этого достаточно использовать команду XOR 1, инвертирующую значение младшего бита. Чтобы изменить знак в переменной DIRECT, можно поступить следующим образом: инвертировать все ее биты, например, командой CPL, а затем увеличить ее на 1. Можно именно так и поступить, но лучше воспользоваться специальной командой, как раз предназначенной для изменения знака в аккумуляторе. Эта команда записывается мнемоникой NEG (Negative - отрицательный). Что касается ROW, то она изменяется простым сложением с переменной DIRECT.


Содержание  Назад  Вперед