📄 1.asm
字号:
;*******************************************************************
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 + -