📄 aaa.asm
字号:
sub ah,ah
mov al,dh ;x in ax
mov dh,ah ;clear dh,y in dx
mov cl,4
shl ax,cl ;ax *=16
shl dx,cl ;dx *=16 Y in screen
mov cx,ax ;x in cx X in screen
call drawc
pop bp
pop di
pop si
pop dx
pop cx
pop bx
pop ax
ret
setxyc endp
;;;;;;;;;;;;;;;;;绘图(不覆盖背景)di=data x=cx y=dx col=color 为增加速度,不保护寄存器
draw proc near
mov si,dx
add si,16
mov bottom,si ;y上限
mov si,cx
add si,16 ;x上限
mov bl,color ;颜色
dr:
mov bp,[di]
drline:
rol bp,1
mov ax,bp
and al,00000001b
jz short drfinish
mov al,bl
mov ah,0ch
int 10h ;画点
drfinish:
inc cx
cmp cx,si
jne short drline
sub cx,16
add di,2
inc dx
cmp dx,bottom
jne short dr
ret
draw endp
;;;;;;;;;;;;;;;;;
display proc near
mov color,15
mov cx,disx
mov dx,disy
mov di,offset hua0
call draw
mov cx,disx+32
mov dx,disy
mov di,offset bei0
call draw
mov cx,disx+64
mov dx,disy
mov di,offset gong0
call draw
mov cx,disx+96
mov dx,disy
mov di,offset xue0
call draw
mov cx,disx+128
mov dx,disy
mov di,offset yuan0
call draw
;;;;;;;;;
mov cx,disx+16
mov dx,disy+32
mov di,offset n9
call draw
mov cx,disx+32
mov dx,disy+32
mov di,offset n9
call draw
mov cx,disx+48
mov dx,disy+32
mov di,offset n0
call draw
mov cx,disx+64
mov dx,disy+32
mov di,offset n9
call draw
mov cx,disx+80
mov dx,disy+32
mov di,offset n0
call draw
mov cx,disx+96
mov dx,disy+32
mov di,offset wordb
call draw
mov cx,disx+112
mov dx,disy+32
mov di,offset n4
call draw
;;;;;;;;;;;;
mov cx,disx+40
mov dx,disy+64
mov di,offset ke0
call draw
mov cx,disx+40+16
mov dx,disy+64
mov di,offset cheng0
call draw
mov cx,disx+56+16
mov dx,disy+64
mov di,offset she0
call draw
mov cx,disx+56+32
mov dx,disy+64
mov di,offset ji0
call draw
;;;;;;;;;;;;;;;;;
mov cx,250
mov dx,300
mov di,offset zhu0
call draw
mov cx,250+16
mov dx,300
mov di,offset zhang0
call draw
mov cx,250+32
mov dx,300
mov di,offset mh
call draw
mov cx,250+32+32
mov dx,300
mov di,offset zhang
call draw
mov cx,250+32+32+16
mov dx,300
mov di,offset shi1
call draw
mov cx,250+32+32+32
mov dx,300
mov di,offset liang
call draw
;;;;;;;;;;;;;;;;;
mov cx,250
mov dx,300+32
mov di,offset zhu0
call draw
mov cx,250+16
mov dx,300+32
mov di,offset yuan1
call draw
mov cx,250+32
mov dx,300+32
mov di,offset mh
call draw
mov cx,250+32+32
mov dx,300+32
mov di,offset yan0
call draw
mov cx,250+32+32+16
mov dx,300+32
mov di,offset hai0
call draw
mov cx,250+32+32+32
mov dx,300+32
mov di,offset tao0
call draw
mov cx,250+32+32+32+32
mov dx,300+32
mov di,offset lin0
call draw
mov cx,250+32+32+32+16+32
mov dx,300+32
mov di,offset hai0
call draw
mov cx,250+32+32+32+16+32+16
mov dx,300+32
mov di,offset jun0
call draw
;;;;;;;;;;;;;;;;;;;
mov cx,250+32+32
mov dx,300+32+32
mov di,offset wang0
call draw
mov cx,250+32+32+32
mov dx,300+32+32
mov di,offset bo0
call draw
mov cx,250+32+32+32+32
mov dx,300+32+32
mov di,offset wang0
call draw
mov cx,250+32+32+32+16+32
mov dx,300+32+32
mov di,offset hong0
call draw
mov cx,250+32+32+32+16+32+16
mov dx,300+32+32
mov di,offset fei0
call draw
;;;;;;;;;;;;;;;;;;;;
mov cx,250+32+32
mov dx,300+32+32+32
mov di,offset shi0
call draw
mov cx,250+32+32+32
mov dx,300+32+32+32
mov di,offset hui0
call draw
ret
display endp
;;;;;;;;;;;;;;;;;绘图(覆盖背景)di=data x=cx y=dx col=color 为增加速度,不保护寄存器
drawc proc near
mov si,dx
add si,16
mov bottom,si ;y上限
mov si,cx
add si,16 ;x上限
mov bl,color ;颜色
drc:
mov bp,[di]
drcline:
rol bp,1
mov ax,bp
and al,00000001b
jz short drcpoint
mov al,bl
drcpoint:
mov ah,0ch
int 10h ;画点
jmp short drcfinish
drcfinish:
inc cx
cmp cx,si
jne short drcline
sub cx,16
add di,2
inc dx
cmp dx,bottom
jne short drc
ret
drawc endp
;;;;;;;;;;;;;;;;;;;取数组x=dh,y=dl,bl
getxy proc near
push ax
push cx
push dx
push si
mov ch,maxx
mov al,dl
mul ch
sub cx,cx
mov cl,dh
add ax,cx
;;;;赋值
mov si,ax
mov bl,bgspace[si]
pop si
pop dx
pop cx
pop ax
ret
getxy endp
;;;;;;;;;;;;;;;;;;;初始化游戏
gamestart proc near
;;;;;;;;;;;;;;隐藏鼠标
mov ax,2
; int 33h
;;;;;;;初始化背景
mov color,bkcol
mov dx,0101h
@bg:
call getxy
cmp bl,divit
jz @bg1
cmp bx,255
jnz short coverclear
mov bx,divit
call setxy
jmp short @bg1
coverclear:
mov bx,divit
call setxyc
@bg1:
inc dh
cmp dh,29
jnz short @bg
mov dh,1
inc dl
cmp dl,29
jnz short @bg
;;;;;;;;;初始化变量
mov way,1
mov way+1,0
;初始化时间
mov ah,2
int 1ah
mov minute,0
mov second,0
mov timesec,dh
mov score,0
;;;;;;;;;;;;;;初始化文字
mov color,timecol
;score
mov cx,wordx
clscor:
push cx
mov dx,wordy
lea di,space
call drawc
pop cx
add cx,16
cmp cx,wordx+16*4
jnz clscor
mov cx,wordx-32-10
mov dx,wordy
lea di,de
call drawc
add cx,16
sub dx,16
lea di, fen
call drawc
mov di,ntable
sub dx,16
mov cx,wordx+16*4
call drawc
;time
mov cx,wordx-32-10
mov dx,wordy+16+5
lea di,shi
call drawc
add cx,16
sub dx,16
lea di,jian
call drawc
mov cx,wordx
sub dx,16
mov di,ntable
call drawc
add cx,16
sub dx,16
mov di,ntable
call drawc
add cx,16
sub dx,16
lea di,mh
call drawc
add cx,16
sub dx,16
mov di,ntable
call drawc
add cx,16
sub dx,16
mov di,ntable
call drawc
;;;;;;;;;;;;;;;;;;
call disvv
;;;;;;;;;;;;;;初始化蛇
mov dh,minl+2-1
lea si,snakespace
mov dl,15
mov color,snhcol
mov bx,3
mov [si],dx
call setxy ;画蛇头
add si,2
dec dh
mov bx,0 ;body
loopaa:
mov color,snbcol
mov [si],dx
call setxy
add si,2
dec dh
cmp dh,2
jnz loopaa
mov [si],dx
mov snaketauda_,si
mov bx,2
call setxy ;画蛇尾
;;;;;;;;;;;;;;老鼠
mov bx,5
@orat:
call outrat
dec bx
jnz @orat
;;;;;
mov ah,0ch
mov al,5 ;不等待,不回显
int 21h ;清空键盘缓存
ret
gamestart endp
;;;;;;;;;;;;;;;;;;;游戏结束
gameover proc near
;;;显示文字
mov color,15
mov dh,11
mov dl,13
mov bx,7
call setxyc
add dh,2
mov bx,8
call setxyc
add dh,2
mov bx,9
call setxyc
add dh,2
mov bx,10
call setxyc
;;;pause
; mov ah,0
; int 16h
mov isover,1
ret
gameover endp
;;;;;;;;;;;;;;;;;;;断裂
collapsing proc near
push di
push si
mov si,snaketauda_
lea di,snakespace
add di,minl*2-2
mov snaketauda_,di
pop si
pop di
ret
collapsing endp
;;;;;;;;;;;;;;;;;;;;;加分
addscore proc near
push bx
push di
push si
push bp
mov color,timecol
inc score
mov ax,score
cmp ax,10
jl @scr2
cmp ax,100
jl @scr1
mov dl,100
div dl
push ax
mov cx,wordx+16
mov dx,wordy
sub bh,bh
mov bl,al
shl bx,1
mov di,ntable[bx]
call drawc
pop ax
mov al,ah
sub ah,ah
@scr1:
mov dl,10
div dl
push ax
mov cx,wordx+32
mov dx,wordy
sub bh,bh
mov bl,al
shl bx,1
mov di,ntable[bx]
call drawc
pop ax
mov al,ah
@scr2:
mov cx,wordx+48
mov dx,wordy
sub bh,bh
mov bl,al
shl bx,1
mov di,ntable[bx]
call drawc
pop bp
pop si
pop di
pop bx
ret
addscore endp
;;;;;;;;;;;;;;;;;;;outrat
outrat proc near
push ax
push bx
push dx
begin_outrat:
mov maxrnd,28
call rnd
inc al
mov dl,al
mov maxrnd,28
call rnd
inc al
mov dh,al
mov maxrnd,13
call rnd
inc al
mov color,al
call getxy
cmp bl,divit
jnz begin_outrat
mov bx,5
call setxyc
pop dx
pop bx
pop ax
ret
outrat endp
;;;;;;;;;;;;;;;;;;;暂停
pause proc near
; mov ah,0ah
; mov bh,2
; mov al,'0'
; mov cx,10
; int 10h
not [ispause]
mov color,15
cmp ispause,0ffh
jne @paul
mov dh,13
mov dl,0
mov bx,11
call setxyc
add dh,3
mov bx,12
call setxyc
jmp short ext_pause
@paul:
mov color,kkcol
mov bx,1
mov dh,13
mov dl,0
call setxyc
add dh,3
call setxyc
ext_pause:
ret
pause endp
;;;;;;;;;;;;;;;;;;;
drawpic proc near
lea dx,filename ;文件名
mov ax,3d00h
int 21H ;打开文件
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -