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

📄 aaa.asm

📁 1.可设置方格数目
💻 ASM
📖 第 1 页 / 共 3 页
字号:
	jc closef

	mov si,ax				;保存文件代号



	mov bx,si
	sub cx,cx
	mov dx,76h
	mov al,0				;file指针移动
	mov ah,42h
	int 21h

	mov dx,479
begin_dp:
;;;;;;读文件
mov di,dx
	mov bx,si
	mov cx,80
	mov dx,offset tempmem
	mov ah,3fh
	int 21H
mov dx,di		;保护dx
	
	sub di,di			;tempmem指针
;	sub cx,cx			;x=0
	mov cx,480
readmem:
	mov bl,byte ptr[tempmem+di]
	inc di

	mov al,bl
	shr al,1
	shr al,1
	shr al,1
	shr al,1
	and al,00001111b
	mov ah,0ch
	int 10h				;画点	

push cx
	inc cx
	mov al,bl
	and al,00001111b	
	mov ah,0ch
	int 10h				;画点	
pop cx

	add cx,2
	cmp cx,640
	jne short readmem

	dec	dx
	cmp dx,-1
	jne short begin_dp	
closef:
	mov ah,3eh
    int 21h				;关闭文件

ret
drawpic endp 
;;;;;;;;;;;;;;;;;;;;;;按键处理
button proc near
but1:	
	cmp dx,163
	jl	fail_but

	cmp dx,194
	jg short but2

	cmp cx,14+480
	jl  ext_but
	cmp cx,45+480
	jg short but11
	not soundswitch		;sound
	jmp ext_but

 but11:
	cmp cx,84+480
	jl  fail_but
	cmp cx,107+480
	jg  but12
	cmp vv,9
	je  ext_but
	inc vv
	call disvv
	jmp  ext_but
 but12:
	cmp cx,120+480
	jl fail_but
	cmp cx,145+480
	jg ext_but
	cmp vv,0
	je ext_but
	dec vv
	call disvv
	jmp ext_but

but2:
	cmp dx,227
	jl fail_but

	cmp dx,306
	jg short but3

	cmp cx,53+480
	jl fail_but
	cmp cx,131+480
	jg fail_but

	cmp dx,267
	jl butsave

	;初始化背景
		mov color,bkcol
		mov dx,0101h
	 @abg:
		call getxy
		cmp bl,divit
		jz @abg1
		mov bx,divit
		call setxyc
	 @abg1:
		inc dh
		cmp dh,29
		jnz short @abg

		mov dh,1
		inc dl
		cmp dl,29
		jnz short @abg

	call load
	call gameresume
	jmp ext_but

 butsave:
	call save
	jmp ext_but
but3:
	cmp dx,384
	jl	fail_but

	cmp dx,48
	jl	ext_but
	
	mov color,bkcol
	mov dx,0101h
	;初始化背景
	 @bbg:
		call getxy
		cmp bl,divit
		jz @bbg1
		mov bx,divit
		call setxyc
	 @bbg1:
		inc dh
		cmp dh,29
		jnz short @bbg

		mov dh,1
		inc dl
		cmp dl,29
		jnz short @bbg

	call display
	mov exitmain,1

	mov musicn,'3'
	call play


ext_but:
	mov musicn,'8'
	call play
	jmp short realexit_play
fail_but:
	mov musicn,'9'
	call play
realexit_play:	
ret
button endp
;;;;;;;;;;;;;;;;;;;显示游戏速度
disvv proc near
	mov color,1001b
	mov cx,wordx+32+17
	mov dx,wordy+78
	sub bh,bh
	mov bl,vv
	shl bx,1
	mov di,ntable[bx]
	call drawc
ret
disvv endp
;;;;;;;;;;;;;;;;;;;恢复游戏数据
gameresume proc near
;;;;;;;恢复背景
	mov color,bkcol
	mov dx,0101h
@bgr:
	call getxy
	cmp bl,divit
	jz @bgr1

	sub bh,bh
	call setxyc
@bgr1:
	inc dh
	cmp dh,29
	jnz short @bgr

	mov dh,1
	inc dl
	cmp dl,29
	jnz short @bgr

;;;;;;;;;;;;;;恢复文字
	mov color,timecol
;score
	dec score
	call addscore
	call disvv
;;;;;;;
	mov ah,0ch
	mov al,5	;不等待,不回显
	int 21h		;清空键盘缓存
	
	mov exitmain,0
	mov isover,0
	cmp ispause,0ffffh
	jnz exit_gameresume
	call pause

exit_gameresume:
ret
gameresume endp
exit_main:
ret
exit_main  endp
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;												;
;		模块2 游戏的存档和读档		制作:王洪飞	;
;												;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;	

;;;;;;;;;;;;;;;;;;;;;;存档
save proc near

	lea dx,savefilename	;文件名

	mov ah,3ch
	mov cx,0			;文件属性
	int 21H				;创建
	jc closesf			;失败

	mov ax,3d01h
	int 21H				;打开文件
	jc closesf			;失败

	mov bx,ax			;文件代号

	mov ah,40h
	mov dx,offset savedatabegin
	mov cx,savedataend-savedatabegin
	int 21h

closesf:
	mov ah,3eh
    int 21h				;关闭文件
ret
save endp
;;;;;;;;;;;;;;;;;;;;;;读档
load proc near

	lea dx,savefilename	;文件名

	mov ax,3d00h
	int 21H				;打开文件
	jc cloself			;失败

	mov bx,ax			;文件代号

	mov ah,3fh
	mov dx,offset savedatabegin
	mov cx,savedataend-savedatabegin
	int 21h

	mov ah,3eh
    int 21h
cloself:
ret
load endp

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;											;
;		  模块3 随机函数	制作:石慧		;
;											;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
rnd proc near
push bx
push cx
push dx
	mov ah,2
	int 1ah			;调用系统时钟

	mov ax,0		
	mov al,ch		;(ax)=当前小时

 	mov bl,60
	mul bl			;化时为分

	mov ch,0		;清空(ch)后  (cx)=当前分
	add ax,cx		;(ax)当前时到0时0分的总共分钟数

	mov cx,0
	mov cl,dl		;(cx)中保存dl中的秒钟数

 	mov bx,60
	mul bx			;化分为秒,结果在(dx,ax)    0<=(dx,ax)<=86400

	add ax,cx		;(cx)当前时到0时0分0秒的总共秒数(不考虑ax到dx总的加法进位)

	mov bx,lastrnd	;lastrnd为产生上一个随机数时留下的数字,因为有可能在同一秒内多次调用此函数,使用lastrnd变量可防治出现相同随机数

	;一个简单函数: (ax)=((dx,ax)/bx余数)+((dx:ax)/bx商)
	div bx

	add ax,dx

	add al,ah		;返回值(al)=(al)+(ah) 不考虑加法溢出

	mov ah,0		;(ax)=(al)
	mov bl,maxrnd	;maxrnd为随机数上限
	div bl	
		
	mov  al,ah		;(al)=((ax)/maxrnd余数)  则满足条件 0<=al<=maxrnd
	
	;以下代码产生本次lastrnd的值
	
	mov ah,0		;(ax)=(al)
	mov bx,lastrnd
	add bx,ax		
	add bl,bh		;防止(ah)==0时,lastrnd保持不变
		
	cmp bx,3000			
	jl @rnd
	sub bx,1511		;当lastrnd>3000时,lastrnd=lastrnd-511
@rnd:
	cmp bx,100		
	jge rndfinish
	add bx,333		;当lastrnd<=100时,lastrnd=lastrnd+333

rndfinish:
	mov lastrnd,bx
pop dx
pop cx
pop bx
ret
rnd endp
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;										;
;		  模块4 音乐播放   制作:林海君 ;
;										;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
play proc near
	cmp soundswitch,0
	jnz beg_play
	ret

beg_play:
push ax
push bx
push cx
push dx
push si
push di

	mov al,musicn

	lea si,mus1   ;;;;;;回送有效地址
    
      cmp al,'1'   ;;;;;;;
      je  d1
	  cmp al,'2'
	  je  d2
	  cmp al,'3'  ;;;;;;;退出音乐
	  je  d3
	  cmp al,'4'  ;;;;;;;开始
	  je d4
	  cmp al,'5'   ;;;;碰壁
	  je d5
	  cmp al,'6'   
	  je d6
	  cmp al,'7'   ;;;;;;吃到老鼠
	  je d7
	  cmp al,'8'   ;;;;;;点击有效
	  je d8
	  cmp al,'9'   ;;;;;点击无效
	  je d9
	  cmp al,'0'    ;;;;;;键盘移动 
	  je d0


	d1:  mov si,4    ;;;;;末地址
	     mov di,0    ;;;;;起始地址
	     mov  bian,4000;;;;;赋变量,延迟时间长短
	     jmp loop1
    d2:  mov si,104  ;;;;末地址
         mov di,52   ;;;;起始地址
	     mov bian ,10000
	     jmp loop1
    d3:  mov si,122
		 mov di,108
		 mov bian,4000
		 jmp loop1
    d4:  mov si,166
		 mov di,142
		 mov bian,3000
		 jmp loop1
    d5:  mov si,204
		 mov di,198
		 mov bian,1500
		 jmp loop1
    d6:  mov si,210
		 mov di,204
		 mov bian,5000
		 jmp loop1
    d7:  mov si,228   
	     mov di,220
	     mov bian,1000
	     jmp loop1
    d8:  mov si,232
	     mov di,228
	     mov bian,3000
	     jmp loop1
    d9:  mov si,240
	     mov di,238
	     mov bian,5000
	     jmp loop1
	d0:  mov si,250
	     mov di,248
	     mov bian,5000
	     jmp loop1

    loop1:   
          call sound 
	sub si,2
	cmp si,di
          jnz loop1

pop di
pop si
pop dx
pop cx
pop bx
pop ax
ret
play endp
;;;;;;;;;;;;;;;;;;;;;;;;;;;sound
sound proc near
          mov al,0b6h  ;;;;;;定时器2的方式寄存器初始化
          out 43h,al
          mov ax,533h
          mov bx,896
          mul bx     ;;;;;;;计时常数533h*896
          mov bx,[si]
          div bx
          out 42h,al 
          mov al,ah
          out 42h,al
          in al,61h
          mov ah,al
          or al,3     ;;;;;置0,1位为1
          out 61h,al
          mov bx,bian
   wait1: mov cx,3801   ;;;;;;;延迟
   delay: loop delay
         dec bx
         jnz wait1
         mov al,ah
         out 61h,al
          ret
sound endp
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;										;
;		  模块5 排行榜	制作:闫海涛	;
;										;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


;;;;;;;;;;;;;;;;;;;;;;
rank proc near

    mov nam,'yh'
;    mov score,89

    lea si,store.hname
    lea di,store.hname

    call openh
    call readh
    mov dx,0              ;control the numer
    mov cx,4
    div cx
    mov cx,ax
    add cx,1
    mov xh,cx
yht:
     mov bp,[si+2]
     mov bx,score
     cmp bp,bx
     jnl yht1
   mov bp,nam
   mov dx,score
   mov ax,[si]
   mov bx,[si+2]
   mov nam,ax
   mov score,bx
   mov [si],bp
   mov [si+2],dx
yht1:
  add si,4d
loop yht

   lea si,store

   call writeh
   call closeh

 yht2:
    mov ah,0      ;display the name
    mov al,3
    int 10h

    mov bp,seg store
    mov es,bp
    mov bp,si
    mov cx,2
    mov dx,0
    mov bl,0a8h
    mov al,1
    mov ah,13h
    int 10h
    call crc
    call crc
    call crc
    call crc
   mov bx,[si+2]    ;display the score
   mov cx,10000d
   call decdiv
   mov cx,1000d
   call decdiv
   mov cx,100d
   call decdiv
   mov cx,10d
   call decdiv
   mov cx,1d
   call decdiv
   mov dl,'0'
   mov ah,2
   int 21h

   add si,4
   call jjj
   dec xh
   cmp xh,0
   jl yht2
   ret
rank  endp
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
openh proc near             ;open the file
      mov ah,3dh
      mov al,2
      mov dx,seg path
      mov ds,dx
      lea dx,path
      int 21h
      mov handle,ax
      jc y1
      ret
  y1:
      lea dx,error1
      mov ah,9
      int 21h
      ret
openh endp
readh proc near             ;read the file
      mov ah,3fh
      mov bx,handle
      mov cx,40
      mov dx,seg store
      mov ds,dx
      lea dx,store
      int 21h
      jc y2
      ret
 y2:
      lea dx,error2
      mov ah,9
      int 21h
      ret
readh endp
writeh proc near            ;write the file
      mov ah,40h
      mov bx,handle
      mov dx,seg store
      mov ds,dx
      lea dx,store
      mov cx,40
	  int 21h
      jc y3
      ret
  y3:
      lea dx,error3
      mov ah,9
      int 21h
      ret
writeh endp
closeh proc near
     mov ah,3eh
     mov bx,handle
     int 21h
     ret
closeh  endp
crc proc near       ;display blank
      mov dl,' '
      mov ah,2
      int 21h
      ret
crc endp
jjj proc near
    mov dl,0dh
    mov ah,2
    int 21h
    mov dl,0ah
    mov ah,2
    int 21h
    ret
jjj endp
;;;;;;;;;;;;;;;;;;;;;;;;;;;
decdiv proc near    ;display the score
     mov ax,bx
     mov dx,0
     div cx
     mov bx,dx
     mov dl,al
     add dl,30h
     mov ah,2

     int 21h
     ret
decdiv endp
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;										;
;		  模块6 鼠标键盘操作  制作:王博;
;										;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;由于程序需要,本模块已经内嵌入主程序的主循环段
code ends

end start

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -