⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 aaa.asm

📁 1.可设置方格数目
💻 ASM
📖 第 1 页 / 共 3 页
字号:
	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 + -