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


         

Мультипликационная заставка - часть 2


Каждая из строк SPR1...SPR4 соответствует одной из фаз движения человечка, а SPR5 - фрагменту лестницы. Последний используется не только для рисования лестниц в статической картинке, но и для восстановления изображения позади бегущего человечка. Формат данных в этих блоках вам уже знаком. Он выбран точно таким же, как и в программе ПРЫГАЮЩИЙ ЧЕЛОВЕЧЕК, следовательно, для вывода всех спрайтов на экран можно воспользоваться подпрограммой PUT, которую мы уже описали. Кроме блоков данных нам понадобятся еще несколько переменных, необходимых для управления перемещением человечков по экрану:

ROW DEFB 0 ;позиция по вертикали левого человечка DIRECT DEFB 0 ;направление движения POSIT DEFB 0 ;фаза движения

Позже мы объясним смысл этих переменных более подробно.

После того, как мы разобрались с надписями и спрайтами, можно переходить к основной программе, которая, как и в большинстве игр, содержит две части: статическую и динамическую. Первая устанавливает атрибуты экрана и формирует на нем все неподвижные элементы заставки: текст, лестницы и рамки вокруг них (Рисунок  5.7). Во многих играх вместо загрузки дополнительных фонтов новый набор символов формируется программой. Например, можно предложить следующий способ получения шрифта Bold, буквы в котором имеют утолщенное начертание:

BOLD LD HL,15616 ;адрес стандартного набора символов LD DE,END ;метка конца программы; по этому ; адресу расположится новый фонт LD BC,#300 ;счетчики циклов: B = 3, C = 0 (256) PUSH DE BOLD1 LD A,(HL) ;байт из стандартного набора SRL A ; смещаем на 1 бит (пиксель) влево OR (HL) ; и объединяем с его прежним значением LD (DE),A ;помещаем в новый фонт INC HL ;переходим к следующему байту INC DE DEC C JR NZ,BOLD1 ;в общей сложности повторяем цикл DJNZ BOLD1 ; 768 раз POP HL DEC H ;уменьшаем адрес нового шрифта на 256 LD (23606),HL ; и заносим в системную ; переменную CHARS RET

После получения нового шрифта можно сформировать на экране все неподвижные части заставки:

SCREEN LD B,3 ; Рисование окон WIND LD C,3 CALL STAIRS LD C,27 CALL STAIRS INC B LD A,B CP 19 JR C,WIND ; Рисование рамок вокруг лестниц LD DE,ATRBOX LD BC,4 CALL 8252 LD BC,#1414 ;B = 20, C = 20 CALL 8933 CALL BOX LD BC,#14D4 ;B = 20, C = 212 CALL 8933 CALL BOX ; Печать текста LD DE,TEXT LD BC,UDG-TEXT JP 8252 ; Данные атрибутов рамок ATRBOX DEFB 16,7,17,1 ; Рисование фрагмента лестницы STAIRS LD A,17 RST 16 XOR A RST 16 LD HL,SPR5 JP PUT ; Рисование рамок BOX EXX PUSH HL LD BC,#8700 ;B = 135, C = 0 LD DE,#101 ;D = 1, E = 1 CALL 9402 LD BC,23 ;B = 0, C = 23 CALL 9402 LD BC,#8700 LD D,-1 CALL 9402 LD BC,23 LD E,-1 CALL 9402 POP HL EXX RET




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