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


         

нижняя граница координаты ROW JR


Теперь приводим тексты соответствующих подпрограмм:

; Перемещение человечков MAN LD A,(ROW) LD B,A LD A,(DIRECT) LD D,A CP 1 ;проверка направления движения JR NZ,MAN1 CALL PRMAN1 LD E,17 ; нижняя граница координаты ROW JR MAN2 MAN1 CALL PRMAN2 LD E,3 ;верхняя граница координаты ROW MAN2 LD HL,POSIT ;изменение переменной POSIT LD A,(HL) XOR 1 LD (HL),A LD HL,ROW LD A,(HL) CP E ;проверка необходимости смены LD A,D ; направления движения JR NZ,MAN3 NEG ;изменение знака в аккумуляторе LD (DIRECT),A ;изменение переменной DIRECT MAN3 ADD A,(HL) ;изменение переменной ROW ; (адресуемой парой HL) LD (HL),A RET

; Левый человечек идет вниз, правый - вверх PRMAN1 DEC B ;координата ROW LD C,3 ;горизонтальная координата левого ; человечка LD HL,SPR5 ;восстановление фона CALL PUT INC B LD A,(POSIT) AND A LD HL,SPR1 JR NZ,PRM11 LD HL,SPR2 PRM11 CALL PUT LD A,22 ;вычисление вертикальной координаты SUB B ; правого человечка LD B,A LD C,27 ;горизонтальная координата правого ; человечка LD HL,SPR5 ;восстановление фона CALL PUT DEC B DEC B LD A,(POSIT) AND A LD HL,SPR4 JR Z,PRM12 LD HL,SPR3 PRM12 JP PUT

; Левый человечек идет вверх, правый - вниз PRMAN2 INC B INC B LD C,3 LD HL,SPR5 CALL PUT DEC B DEC B LD A,(POSIT) AND A LD HL,SPR3 JR NZ,PRM21 LD HL,SPR4 PRM21 CALL PUT LD A,19 SUB B LD B,A LD C,27 LD HL,SPR5 CALL PUT INC B LD A,(POSIT) AND A LD HL,SPR2 JR Z,PRM22 LD HL,SPR1 PRM22 JP PUT

Теперь объединим рассмотренные подпрограммы и напишем управляющую часть:

ORG 60000 ENT $ LD HL,UDG LD (23675),HL CALL BOLD LD A,15 LD (23693),A XOR A CALL 8859 CALL 3435 LD A,2 CALL 5633 ; Инициализация переменных LD A,4 LD (ROW),A LD A,1 LD (DIRECT),A LD (POSIT),A CALL SCREEN LD A,17 RST 16 XOR A RST 16 ; Начало динамической части заставки MAIN LD E,7 ;код цвета шариков, окаймляющих ; рабочий экран ; Вывод рамки, состоящей из разноцветных шариков MAIN1 LD B,22 ;в регистрах BC - координаты экрана MAIN2 LD C,1 CALL PRINT LD C,32 CALL PRINT DJNZ MAIN2 LD C,31 MAIN3 LD B,1 CALL PRINT LD B,22 CALL PRINT DEC C JR NZ,MAIN3 PUSH BC PUSH DE CALL MAN ;вывод очередной фазы движения ; человечков POP DE POP BC PUSH BC LD B,9 ;счетчик цикла задержки перемещения ; человечков MAIN4 PUSH BC LD BC,1 CALL 7997 POP BC ; Проверка нажатия клавиш от 0 до 4. Если нажаты - выход на EXIT LD A,(23560) CP "4"+1 JR NC,MAIN5 ;проверка >"4" (>="4"+1) CP "0" JR NC,EXIT MAIN5 DJNZ MAIN4 POP BC DEC E JR NZ,MAIN1 JR MAIN EXIT LD (KEY),A ;сохраняем код клавиши для других ; частей многокадровой заставки, ; принцип построения которой будет ; рассмотрен в следующей главе POP BC RET ; Подпрограммы

; Блоки данных

; Переменные ROW DEFB 0 DIRECT DEFB 0 POSIT DEFB 0 KEY DEFB 0 ; Адрес размещения нового фонта (обязательно в самом конце, ; чтобы коды набора не перекрыли коды программы) END


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