Из журнала Deja Vu #0A, Кемерово, 2000 __________________________________________ (C) KAPsoft '2000 __________________________________________ К ВОПРОСУ ... ...О СТРЕЛКАХ. А точнее о стрелочных интерфейсах. Во всех виденных мною "интеллектуальных" ин- терфейсах (таких, что если вы долго давите джойстик в одном направлении, то скорость курсора - стрелки увеличивается) скорость увеличивается в одном направлении, и ее сброс на начальную происходит при любом движении джойстика. Я предлагаю другой алгоритм. Скорость изменяется для четырех направлений отдель- но. Если пользователь не давит в каком-ли- бо направлении, то скорость в этом направ- лении сбрасывается на начальное значение. Вот листинг: ORG 30000 ENT LD DE,#8080 ;Начальные START HALT ;координаты LD HL,TABL IN A,(#1F) ;Опросили джойстик BIT 0,A ;Вправо ? PUSH AF LD A,#3C LD (LOOP),A LD A,#51 LD (SBROS),A LD A,#57 LD (REG),A CALL NZ,MOVE ;Да - двигаемся POP AF CALL Z,SBR ;Нет - сброс BIT 1,A ;Влево ? PUSH AF LD A,#3D LD (LOOP),A CALL NZ,MOVE POP AF CALL Z,SBR BIT 2,A ;Вниз ? PUSH AF LD A,#5F LD (REG),A LD A,#59 LD (SBROS),A CALL NZ,MOVE POP AF CALL Z,SBR BIT 3,A ;Вверх ? PUSH AF LD A,#3C LD (LOOP),A CALL NZ,MOVE POP AF CALL Z,SBR BIT 4,A ;Огонь - выход RET NZ LD C,D ;Рисуем точку с LD B,E ;помощью программы PUSH DE ;ПЗУ по адресу + CALL #22E5 ; <------------+ POP DE JR START ; MOVE LD A,(REG) ;Подпрограмма CP #57 ;перемещения LD A,E JR NZ,NEXT LD A,D NEXT LD C,(HL) INC HL LD B,(HL) LOOM CP C JR Z,SBROS LOOP INC A ;или DEC A DJNZ LOOM REG LD D,A ;или LD E,A INC HL DEC (HL) JR NZ,L_1 LD (HL),24 ;Время закончи- DEC HL ;лось - увеличиваем INC (HL) ;скорость INC HL L_1 INC HL RET ; SBROS LD D,C ;или LD E,C JR CONT SBR INC HL ;Сброс скорости и LD (HL),1 ;времени на началь- INC HL ;ные значения. LD (HL),24 INC HL RET ; TABL DEFB 255,1,24 ;Первое - MAX/MIN DEFB 0,1,24 ;Второе - скорость DEFB 0,1,24 ;Третье - время DEFB 175,1,24 Для упрощения вместо стрелки использу- ется точка. Для того, чтобы бегала стре- лочка, вместо CALL #22E5 поставьте вызов своей процедуры вывода стрелки. Чтобы точка бегала быстрее,можете умень- шать значение времени, но не в таблице, а в строках LD (HL),24 в конце процедур MOVE и SBROS. Также можно участить вызов проце- дуры (в этой программе-один раз в прерыва- ние или 50 раз в секунду).