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


         

Динамическое окно


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

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

10 INK 5: PAPER 0: BORDER 0: CLS 20 FOR n=7 TO 1 STEP -1 30 LET m=7-n 40 .ROW=5+n:.COL=2+2*n 50 .HGT=2+2*m:.LEN=1+4*m 60 LET attr=8*n+64: POKE 23693,attr 70 .CLSV:.SETV 80 NEXT n

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

Поскольку рамки вокруг окон рисуются довольно часто, прежде чем привести текст программы, напишем универсальную процедуру, выводящую в выбранном месте экрана прямоугольник произвольного размера. Этой процедурой мы еще воспользуемся впоследствии, поэтому ее также желательно иметь в отдельном библиотечном файле. Перед обращением к ней в регистрах B и C нужно задать координаты верхнего левого угла прямоугольника соответственно по вертикали и горизонтали, а в H и L - его высоту и ширину. Поскольку позже мы предложим более быстродействующую процедуру, то чтобы не возникло путаницы с именами, назовем ее BOX_0, а в имени другой процедуры изменим индекс.

BOX_0 PUSH HL CALL 8933 ;PLOT - верхний левый угол POP BC PUSH BC LD DE,#101 ;верхняя линия LD B,0 CALL 9402 ;DRAW POP BC PUSH BC LD D,-1 ;правая линия LD C,0 CALL 9402 POP BC PUSH BC LD E,-1 ;нижняя линия LD B,0 CALL 9402 POP BC LD DE,#101 ;левая линия LD C,0 CALL 9402 LD HL,10072 EXX RET

Если в приведенной процедуре вам что-нибудь не совсем ясно, вернитесь к четвертой главе и еще раз просмотрите раздел .



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