📄 move.asm
字号:
caly macro xx ;calculate y=k(x-x0)+y0
mov dx,0
mov ax,dely
mov cx,xx
sub cx,x0
imul cx
mov cx,delx
idiv cx
add ax,y0
mov y,ax
endm
data_seg segment
dely dw ? ;dely=y2-y1
delx dw ? ;delx=x2-x1
savecolor db 3 ;save the ball color
x0 dw ? ;ball begin position (x0,y0)
y0 dw ?
addx db 0 ;addx=0 then x increasing
midx dw ?
midy dw ?
psx dw ? ;
psy dw ?
rk dw ? ;rk=|k1-k2|/|1+k1*K2|
data_seg ends
moveball proc near
mov dx,0 ;the begin mov to position is middle of point[2] point[3]
mov ax,pointx+2
mov x0,ax
mov ax,pointy+2
mov y0,ax
mov addx,0
mov ax,pointx+4
add ax,pointx+6
mov cx,2
div cx
mov midx,ax ;middx=(x1+x2)/2
sub ax,pointx+2
jns nextm0
mov addx,1
nextm0:
mov dx,0
mov delx,ax ;delx=x2-x1
mov ax,pointy+4
add ax,pointy+6
mov cx,2
div cx
mov midy,ax
sub ax,pointy+2
mov dely,ax ;dely=y2-y1
loopmov:
call drawball ;draw ball
mov al,b_speed
cbw
mov cx,100d
mul cx
mov di,ax
delaym0: ;delay time
mov al,b_speed
mov cx,100d
mul cx
mov si,ax
delaym1:
dec si
jnz delaym1
dec di
jnz delaym0
mov al,b_color ;change ball color
mov savecolor,al
mov b_color,3
call drawball ;mask ball color
mov al,savecolor
mov b_color,al
cmp addx,0
je xadd ;x increasing
dec x
jmp nextmc
xadd:
inc x
nextmc:
caly x ;(x,y)
mov ax,x
cmp ax,midx
je exitdm
jmp loopmov
exitdm:
call drawball
ret
moveball endp
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -