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

📄 1.asm

📁 鼠标操作左右 空格暂停 esc退出 r重玩
💻 ASM
📖 第 1 页 / 共 5 页
字号:
;*******************************************************************
prop_screen proc near
    push ax
    push bx
    push cx
    push dx
    push si
    cmp propflag,-1
    je prop_screen_exit
    
    mov bl,propflag
    mov bh,00
    mov al,prop_color[bx]
    mov prop_color[bx],00
    call printprop
    mov prop_color[bx],al;还原数据
    
    cmp propy,187;如果落地
    jl prop_screen_add
    mov propflag,-1
    ;将光标置于右边第三个框内,写入第二行,
    		mov ah,02
   			mov bh,00
  			mov dh,11
  		    mov dl,28
  		    int 10h
    		;将none_msg写入,由各个hint变为NULL
   			mov ah,09
   			lea dx,none_msg
   			int 21h
           mov propflag,-1
    jmp prop_screen_exit;结束
    prop_screen_add:
    
    cmp propy,183;如果被球拍碰上,则相应内存改变
    
    jl prop_screen_new
        mov ax,mouse_last
        cmp ax,propx
        jnl prop_screen_new;如果在球拍的左侧掉下
        
        add ax,racket_width
        cmp ax,propx
        jl prop_screen_new;如果在球拍的右侧掉下
           cmp propflag,0;有道具,则要根据propflag的值判断是哪一个道具,然后做出相应的内存变化
           jne notprop_addlife;
           ;如果是接到增加生命的道具
               		add life_num,1;将光标置于右边第二个框内
               		mov ah,02
               		mov bh,00
               		mov dh,6
               		mov dl,26
               		int 10h
               		;将life写入
              		 mov ah,09
              		 lea dx,life_msg
              		 int 21h
              		;将变化后的生命值写入
              		 mov ah,02
              		 mov dl,life_num
               		 add dl,30h
               		 int 21h
               		jmp addpropend   
           notprop_addlife:   
           
           cmp propflag,1
           jne notprop_addscore  
           ;如果是接到增加分数的道具 
               add score_num,20
               call score_screen  
               jmp addpropend
           notprop_addscore:
           
           cmp propflag,2
           jne notprop_speedup
           ;如果是接到加速的道具
               mov ax,x
               mov bx,y
               cmp ax,0;求出ax 的绝对值
               jnl axbuxiaoyu0
               neg ax
               axbuxiaoyu0:
               cmp bx,0;求出bx的绝对
               jnl bxbuxiaoyu0
               neg bx
               bxbuxiaoyu0:
               
               add ax,bx;如果已经是中速或者快速,那么进行这个操作
               .if ax>5
                   mov speedflag,1
                   jmp addpropend
               .endif
               
               mov ax,x;如果是慢速
               mov bx,y
               add ax,ax
               add bx,bx
               mov x,ax
               mov y,bx
               jmp addpropend 
           notprop_speedup:
           
               cmp propflag,3
           jne notprop_speeddown
           ;如果是接到减速的道具
               cmp speedflag,1
               jne speeddown_hh
                   mov speedflag,0
                   jmp addpropend
               speeddown_hh:
                
               mov score_num,3
               call score_screen
               cmp x,-3
               jnl x1
                mov x,-2
                jmp shey
               x1:
                cmp x,0
                jnl x2
                mov x,-1
                jmp shey
               x2:
                cmp x,4
                jnl x3
                mov x,1
                jmp shey
               x3:
                mov x,2
               shey:
               
               cmp y,-3
               jnl y1
                mov y,-2
                jmp addpropend
               y1:
                cmp y,0
                jnl y2
                mov y,-1
                jmp addpropend
               y2:
                cmp y,4
                jnl y3
                mov y,1
                jmp addpropend
               y3:
                mov y,2               
               jmp addpropend
           notprop_speeddown:
           
           cmp propflag,4
           jne notprop_bigracket
           ;如果是接到大球拍的道具
               cmp racket_width,29
               jl bigracket30
                   mov racket_width,50
                   jmp bigracket_screen
                bigracket30:
                   mov racket_width,30
               bigracket_screen:
                  mov qidiany,193
                  mov zhongdiany,196
                  mov al,racket_color
                  mov color,al
                  mov ax,mouse_last
                  add ax,racket_width
                  cmp ax,200
                  jl racketkeyi
                      mov zhongdianx,200
                      mov ax,200
                      sub ax,racket_width
                      mov qidianx,ax
                      call setarea
                      jmp addpropend
                  racketkeyi:
                      mov ax,mouse_last
                      mov qidianx,ax
                      add ax,racket_width
                      mov zhongdianx,ax
                      call setarea
               jmp addpropend
           notprop_bigracket:
           
           cmp propflag,5
           jne notprop_smallracket
           ;如果是接到小球拍的道具
               mov qidiany,193
                   mov zhongdiany,196
                   mov ax,mouse_last
                   mov qidianx,ax
                   add ax,racket_width
                   mov zhongdianx,ax
                   mov color,00
                   call setarea
                   
               cmp racket_width,40
               jnl smallracket30
                   mov racket_width,20
                   mov ax,qidianx
                   add ax,20
                   mov zhongdianx,ax
                   mov al,racket_color
                   mov color,al
                   call setarea
                   jmp addpropend
               smallracket30:
                   mov racket_width,30
                   mov ax,qidianx
                   add ax,30
                   mov zhongdianx,ax
                   mov al,racket_color
                   mov color,al
                   call setarea
               jmp addpropend
           notprop_smallracket:
           
           ;如果是接到炸弹的道具
           cmp propflag,6
           jne notbomb_1
             ;mov qidiany,45
             ;mov zhongdiany,75
             ;mov qidianx,4
             ;mov zhongdianx,202
             ;mov color,00
             ;call setarea
             mov bomb_flag,1
             
             add score_num,40
             call score_screen
             mov brick_num,60;接到这个道具后,剩余的数量为60个砖块
             mov si,59
             mov cx,40
             bomb_loop:
                 add si,1
                 mov brick_life[si],0
                 loop bomb_loop
             jmp addpropend
            ;如果是接到大炸弹的道具
            notbomb_1:
             mov cmpgameflag,1
             mov score_num,181
             call score_screen
             mov brick_num,0
             mov si,-1
             mov cx,99
             bigbomb_loop:
                 add si,1
                 mov brick_life[si],0
                 loop bigbomb_loop
           
           addpropend:
           ;将光标置于右边第三个框内,写入第二行,
    		mov ah,02
   			mov bh,00
  			mov dh,11
  		    mov dl,28
  		    int 10h
    		;将none_msg写入,由各个hint变为NULL
   			mov ah,09
   			lea dx,none_msg
   			int 21h
           mov propflag,-1
           jmp prop_screen_exit
    prop_screen_new:
    add propy,1
    call printprop
    mov ah,02;将光标置于prop提示中的第二行
   	mov bh,00
  	mov dh,11
  	mov dl,28
  	int 10h
  	mov ah,09
  	cmp propflag,0
  	jne notlife
  	          lea dx,addlife_msg;如果是增加生命的道具
  	          int 21h
  	          jmp prop_screen_exit
  	notlife:
  	
  	cmp propflag,1
  	jne notscore
  	          lea dx,addscore_msg
  	          int 21h
  	          jmp prop_screen_exit
  	notscore:
  	
  	cmp propflag,2
  	jne notspeedup
  	          lea dx,speed_up_msg
  	          int 21h
  	          jmp prop_screen_exit
  	notspeedup:
  	
  	cmp propflag,3
  	jne notspeeddown
  	          lea dx,speed_down_msg
  	          int 21h
  	          jmp prop_screen_exit
  	notspeeddown:
  	
  	cmp propflag,4
  	jne notlargeracket
  	          lea dx,large_racket_msg
  	          int 21h
  	          jmp prop_screen_exit
  	notlargeracket:
  	
  	cmp propflag,5
  	jne notsmallracket
  	          lea dx,small_racket_msg
  	          int 21h
  	          jmp prop_screen_exit
  	notsmallracket:
  	
  	cmp propflag,6
  	jne notbomb
  	     lea dx,bomb_msg
  	     int 21h
  	     jmp prop_screen_exit
  	notbomb:
  	
  	   lea dx,bigbomb_msg
  	   int 21h
  	   jmp prop_screen_exit
    prop_screen_exit:
    pop si
    pop dx
    pop cx
    pop bx
    pop ax 
ret
prop_screen endp
;********************************************************************
;是用来画出球拍的位置,其中球拍的左端位置以及球拍的宽度由内存记录
mouse_racket proc near
    push ax
    push bx
    push cx
    push dx
    mov ax,0bh;读取鼠标变化位置量
    int 33h
    cmp cx,0
    je mouse_racket_exit;如果没有移动则直接退出
    jl mouse_racket_xiaoyu;如果是向右移动则跳转
    
    mov dx,mouse_last;确定左角
    mov qidianx,dx
    add dx,cx
    
    mov ax,dx;如果已经超出了199,则跳转
    add ax,racket_width
    cmp ax,203
    jnl mouse_racket_exit
    
    mov mouse_last,dx;先把左侧的画为黑色
    mov zhongdianx,dx
    mov qidiany,193
    mov zhongdiany,196
    mov color,00
    call setarea
    
    add dx,racket_width;再把右侧的画为球拍色
    mov zhongdianx,dx
    sub dx,cx
    mov qidianx,dx
    mov bl,racket_color
    mov color,bl
    call setarea
    
    jmp mouse_racket_exit
    
    mouse_racket_xiaoyu:;如果是向右移动
    mov dx,mouse_last
    mov zhongdianx,dx
    add dx,cx
    
    cmp dx,4;如果超出了0则挑战
    jl mouse_racket_exit
    
    mov mouse_last,dx;右侧添为球拍色
    mov qidianx,dx
    mov qidiany,193
    mov zhongdiany,196
    mov bl,racket_color
    mov color,bl
    call setarea
    
    add dx,racket_width;左侧为黑色
    mov qidianx,dx
    sub dx,cx
    mov zhongdianx,dx
    mov color,00
    call setarea
  
    mouse_racket_exit:
    pop dx
    pop cx
    pop bx
    pop ax
ret
mouse_racket endp
;*************************************************************
;inmenufun这个函数是进入画面
inmenufun proc near
    push ax
    push bx
    push cx
    push dx
    
    mov qidianx,0
    mov qidiany,0
    mov zhongdianx,320
    mov zhongdiany,2
    call setarea
    mov al,inmenu_color
    mov color,al
    ;画左边
    mov zhongdianx,3
    mov zhongdiany,200
    call setarea
    ;画底部
    mov qidianx,0
    mov qidiany,197
    mov zhongdianx,320
    mov zhongdiany,200
    call setarea
    ;画右边
    mov qidianx,317
    mov qidiany,0
    call setarea
    mov dx,3;dx这里用来存放宽度
    mov qidianx,0
    mov zhongdianx,319
    mov qidiany,0
    mov al,inmenu_color
    mov cx,50
    inmenu_loop1:;这个是用来生成初始画面中的上边的线的
        mov color,00
        mov bx,qidiany
        ;add bx,1
        mov zhongdiany,bx
        call setarea
        
        add bx,1
        mov qidiany,bx
        add bx,dx
        mov zhongdiany,bx
        mov color,al
        call setarea
    loop inmenu_loop1
    ;将光标置于上方
    mov ah,02
    mov bh,00
    mov dh,4
    mov dl,18
    int 10h
    ;将标题BRICK写入
    mov ah,09
    lea dx,brick_msg
    int 21h

⌨️ 快捷键说明

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