SetMissile: mov cx,3
mov bx,offset Interceptor
nextMissile: mov ax,[bx].X
add ax,5
mov [di].X,ax
mov ax,[bx].Y
add ax,9
mov [di].Y,ax
mov [di].methodShow,offset ShowPlane
mov [di].methodHide,offset HidePlane
mov [di].methodMove,offset MoveMissile
mov bx,di
add di,sz_Plane
loop NextMissile
mov byte ptr DataKey[keySpace],0
ret
MoveMissile: mov ax,[bx].Y
dec ax; -1
jz goStop
dec ax;-1=-2
jnz goNext
;закрываем объект
goStop: mov [bx].methodShow,offset Blank
mov [bx].methodHide,offset Blank
mov [bx].methodMove,offset Blank
goNext: mov [bx].Y,ax
ret
locals @@
.model tiny, C
N_MASK = 3 ; количество выводимых спрайтов
T_MASK STRUC ; положение спрайта и шаг смещения
x dw ?
y dw ?
dy dw ?
T_MASK ENDS
. . .
cmp ah, 1 ;по Esc выходим
je Exit
cmp ah, 39h ;Пробел
je S
. . .
S:
call Space ;вывод трёх спрайтов
jmp MainLoop
. . .
Space proc
mov ax,offset msk1
call drawAll ; рисуем все спрайты
call DELAY
mov ax,offset black1
call drawAll ; стираем спрайты
call raise ; сдвигаем спрайты вверх
call Proverka
ret
Space endp
. . .
drawAll proc
mov cx,N_MASK
mov si,offset pos
@@draw:
push ax cx si
call DrawSprite, [si].x, [si].y, ax ; x, y - адрес маски ;в ax адрес offset msk1
pop si cx ax
add si,SIZE T_MASK
loop @@draw
ret
drawAll endp
. . .
; сдвигаем спрайты вверх
raise proc
mov cx,N_MASK
mov si,offset pos
@@next:
mov ax,[si].dy ; шаг движения
sub [si].y,ax ;add новая позиция по вертикали
add si,SIZE T_MASK ;к следующей маске
loop @@next
ret
raise endp
. . .
.data
. . .
pos T_MASK <x,y,5>
T_MASK <x,y,5>
T_MASK <x,y,5>
seg000:044C aControl db 'control',0
seg000:0454 dw 0
seg000:0456 dw 2
seg000:0458 dw 5
seg000:045A dw 0
seg000:045C dw 2
seg000:045E dw 5
seg000:0460 dw 0
seg000:0462 dw 2
seg000:0464 dw 5
seg000:0466 aControl_0 db 'control',0
mov ax,2509h
int 21h
locals @@
.model tiny, C
N_MASK = 3 ; количество выводимых спрайтов
T_MASK STRUC ; положение спрайта и шаг смещения
x dw ?
y dw ?
dy dw ?
T_MASK ENDS
. . .
cmp ah, 1 ;по Esc выходим
je Exit
cmp ah, 39h ;Пробел
je S
. . .
S:
call Space ;вывод трёх спрайтов
jmp MainLoop
. . .
Space proc
mov ax,offset msk1
call drawAll ; рисуем все спрайты
call DELAY
mov ax,offset black1
call drawAll ; стираем спрайты
call raise ; сдвигаем спрайты вверх
call Proverka
ret
Space endp
. . .
drawAll proc
mov cx,N_MASK
mov si,offset pos
@@draw:
push ax cx si
call DrawSprite, [si].x, [si].y, ax ; x, y - адрес маски ;в ax адрес offset msk1
pop si cx ax
add si,SIZE T_MASK
loop @@draw
ret
drawAll endp
. . .
; сдвигаем спрайты вверх
raise proc
mov cx,N_MASK
mov si,offset pos
@@next:
mov ax,[si].dy ; шаг движения
sub [si].y,ax ;add новая позиция по вертикали
add si,SIZE T_MASK ;к следующей маске
loop @@next
ret
raise endp
. . .
.data
. . .
pos T_MASK <x,y,5>
T_MASK <x,y,5>
T_MASK <x,y,5>
seg000:044C aControl db 'control',0
seg000:0454 dw 304h
seg000:0456 dw 306h
seg000:0458 dw 5
seg000:045A dw 304h
seg000:045C dw 306h
seg000:045E dw 5
seg000:0460 dw 304h
seg000:0462 dw 306h
seg000:0464 dw 5
seg000:0466 aControl_0 db 'control',0
seg000:02FE loc_2FE: ; CODE XREF: sub_2D3+23j
seg000:02FE add si, 6
seg000:0301 loop loc_2DB
seg000:0303 retn
seg000:0303 sub_2D3 endp
seg000:0303
seg000:0303 ; ---------------------------------------------------------------------------
seg000:0304 word_304 dw 140h ; DATA XREF: start+5Bw
seg000:0304 ; start+72w ...
seg000:0306 word_306 dw 0F0h ; DATA XREF: start+89w
seg000:0306 ; start+A0w ...
Blank proc
ret
Blank endp
mov ax, [ bx ].row ;AX = строка
mov bx, 80
mul bx ;AХ = АХ * 80
mov di, ax ;сохранить адрес начала строки в di
mov ax, [ bx ].column
Space proc
mov bx,offset pos
; 1
mov [ bx ].column,320 ;восстановим первоначальные значения переменных
mov [ bx ].row,240
@@1:
call DrawSprite,offset msk1 ;рисуем спрайт
call DELAY
call DrawSprite,offset black1 ;стираем
; 2
sub [bx].row,5 ;передвигаем спрайт на 5 строк вверх
cmp [bx].row,10jbe @@2
; ставите одно из следующих условий перехода:
JA @@1
JNBE @@1sub [bx].row,5 ;передвигаем спрайт на 5 строк вверх
; 3loop @@1 ;пока не дойдём почти до верха экрана
@@2:
mov [ bx ].column,320 ;восстановим первоначальные значения переменных
mov [ bx ].row,240
ret
Если Вы уже зарегистрированы на Портале - войдите в систему, если Вы еще не регистрировались - пройдите простую процедуру регистрации.