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


         

УПРАВЛЕНИЕ СПОМОЩЬЮ КЛАВИАТУРЫ



УПРАВЛЕНИЕ С ПОМОЩЬЮ КЛАВИАТУРЫ

При разработке игровых программ немыслимо обойтись без опроса клавиатуры. Действительно, чтобы во время игры управлять спрайтами, перемещая их хотя бы по четырем направлениям, программа обязана безошибочно различать одну из четырех нажатых клавиш. Например, O должна соответствовать движению влево, P - вправо, Q - вверх и A - вниз. В Бейсике, как вы помните, для этой цели мы пользовались функцией INKEY$, а одна из возможных программ, «узнающих», к примеру, символ P, могла бы выглядеть так:

100 IF INKEY$<>"P" THEN GO TO 100

Соответствующий ей фрагмент ассемблерной программы имеет следующий вид:

XOR A LD (23560),A ;в системную переменную LAST_K (код ; последней нажатой клавиши) заносится 0 LOOP LD A,(23560) ;из этой системной переменной ; считывается значение кода нажатой клавиши CP "P" ;сравнение двух кодов - находящегося ; в регистре A и символа P

JR NZ,LOOP ;если результат сравнения не равен 0, ; то переход на метку LOOP, если 0, RET ; то выход

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

KEY XOR A LD (23560),A MET1 LD A,(23560) CP "P" ;сравнение двух кодов ; Если результат сравнения не равен нулю (то есть нажата не P), ; то переход на метку MET2, после которой проверяются нажатия других клавиш JR NZ,MET2 LD DE,TXT1 PRINT LD BC,5 ;вывод на экран символа, CALL 8252 ; соответствующего нажатой клавише LD A,13 RST 16 JR KEY ;переход на начало программы MET2 CP "O" ;проверка нажатия клавиши O

JR NZ,MET3 LD DE,TXT2 JR PRINT MET3 CP "Q" ;проверка нажатия клавиши Q

JR NZ,MET4 LD DE,TXT3 JR PRINT MET4 CP "A" ;проверка нажатия клавиши A

JR NZ,MET5 LD DE,TXT4 JR PRINT MET5 CP "0" ;проверка нажатия клавиши 0



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