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


         

Чтобы точка, перемещаясь по экрану,


Чтобы точка, перемещаясь по экрану, не ушла за его пределы, необходимо ввести ограничения. Как это осуществить, покажем на конкретном примере, в котором мы используем приведенный выше принцип для воспроизведения реальной игровой ситуации, например, для управления самолетом. Прежде всего создадим три спрайта (блоки SAM1, SAM2 и SAM3), первый из которых будет соответствовать полету самолета прямо, второй повороту вправо (самолет при этом должен слегка наклониться) и, наконец, третий - его повороту влево. Таким образом, наклоняя ручку джойстика в ту или иную сторону, вы можете в приведенной ниже программе легко изменять положение спрайта на экране.

ORG 60000 ENT $ LD A,5 LD (23693),A XOR A CALL 8859 CALL 3435 ; Основная часть программы LD BC,#505 ;в регистре B вертикальная координата Y, ; а в C горизонтальная JOY IN A,(31) ;читаем данные из порта джойстика LD E,A ;освобождаем аккумулятор ; для проверки границ LD HL,SAM1 ;задаем адрес первого спрайта RRC E ;сдвигаем E вправо на один бит JR NC,JOY1 LD A,C CP 30 ;задаем границу перемещения вправо JR NC,JOY1 ;если правая граница достигнута, ; то увеличивать X уже нельзя - ; переходим на метку JOY1 INC C ;увеличиваем координату X, что соответствует ; перемещению самолета вправо LD HL,SAM2 ;задаем адрес второго спрайта JOY1 RRC E JR NC,JOY2 LD A,C CP 1 JP M,JOY2 DEC C ;уменьшаем координату X LD HL,SAM3 ;задаем адрес третьего спрайта JOY2 RRC E JR NC,JOY3 LD A,B CP 22 JR NC,JOY3 INC B ;увеличиваем координату Y JOY3 RRC E JR NC,JOY4 LD A,B CP 1 JP M,JOY4 DEC B ;уменьшаем координату Y JOY4 RRC E RET C ;если кнопка «огонь» нажата - ; выходим из программы ; Вывод на экран по принципу XOR одного из трех спрайтов самолета PUSH BC PUSH HL LD A,SPRXOR ;устанавливаем режим вывода XOR CALL PTBL ;печатаем один из самолетов LD BC,10 ;вводим задержку CALL 7997 POP HL POP BC PUSH BC LD A,SPRXOR ;устанавливаем режим вывода XOR CALL PTBL ;стираем изображение самолета POP BC JR JOY ;переходим в начало программы ; для изменения координат

; Заголовок данных спрайта первого самолета, соответствующего полету вперед и назад SAM1 DEFB 4 DEFB 0,0,5,0,1,5,1,0,5,1,1,5 ; Данные для первого самолета DEFB 0,0,5,0,95,254,56,66 DEFB 0,0,160,0,250,127,28,66 DEFB 61,1,1,5,13,0,0,0 DEFB 188,128,128,160,176,0,0,0 ; Заголовок данных спрайта второго самолета, соответствующего повороту вправо SAM2 DEFB 4 DEFB 0,0,5,0,1,5,1,0,5,1,1,5 ; Данные для второго самолета DEFB 0,0,5,0,11,95,78,35 DEFB 0,0,160,0,244,62,28,8 DEFB 29,1,1,2,2,0,0,0 DEFB 176,128,128,192,224,192,0,0 ; Заголовок данных спрайта третьего самолета, соответствующего повороту влево SAM3 DEFB 4 DEFB 0,0,5,0,1,5,1,0,5,1,1,5 ; Данные для третьего самолета DEFB 0,0,5,0,47,124,56,16 DEFB 0,0,160,0,208,250,114,196 DEFB 13,1,1,3,7,3,0,0 DEFB 184,128,128,64,64,0,0,0


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