📄 letter.asm
字号:
disappear: ;正确输入后字母消失
pop cx
pop cx
mov ah,0ah
mov bh,0
mov al," "
mov cx,1
int 10h
inc score1
push ax ;此处代码是为了同步输出得分和当前life的剩余值
push bx
mov al,score1
mov ah,0
mov bl,10
div bl
mov fen1,al
mov fen2,ah
pop bx
pop ax
mov ah,2
mov bh,0
mov dh,23
mov dl,43
int 10h
mov ah,0ah
mov bh,0
mov al," "
mov cx,1
int 10h
mov ah,0ah
mov al,fen1
add al,30h
mov bh,0
mov cx,1
int 10h
mov ah,2
mov bh,0
mov dh,23
mov dl,44
int 10h
mov ah,0ah
mov bh,0
mov al," "
mov cx,1
int 10h
mov ah,0ah
mov al,fen2
add al,30h
mov bh,0
mov cx,1
int 10h
mov dh,hang ;输入正确后,将该字符在原位置高亮显示
mov dl,line
mov bh,0
mov ah,2
int 10h
mov ah,9
mov bh,0
mov al,' '
mov cx,1
mov bl,17h
int 10h
jmp hit
to_over:
jmp start
print_next:
sub life,1
cmp life,30h ;life减为0时,游戏结束
je to_over
mov ah,0ah
mov al," "
mov bh,0
mov cx,1
int 10h
mov ah,02h
mov dh,23
mov dl,76
mov bh,0
int 10h
mov ah,0ah
mov al,life
mov bh,0
mov cx,1
int 10h ;更新life
hit:
mov ah,02h
mov bh,0
mov dh,1
mov dl,position
int 10h ;重新把光标移到顶端
mov ah,2ch
int 21h
mov al,dl
mov ah,0
div n
add ah,61h
mov [si],ah
mov ah,0ah
mov bh,0
mov cx,1
mov al,[si]
int 10h ;重新在空格处设置一个字母
jmp game
speed_c: ;速度选择
mov ah,1
int 21h
cmp al,0dh
jne otherkey
jmp speed_jm
otherkey: ;隐藏非法的字符
push ax
mov ah,2
mov bh,0
mov dh,15
mov dl,48
int 10h
mov ah,0ah
mov al," "
mov bh,00h
mov cx,01h
int 10h
mov ah,2
mov bh,0
mov dh,15
mov dl,47
int 10h
pop ax
mov dx,ax
mov ah,2
int 21h
jmp input
speed_jm: ;难度选择的界面
clean 1,1,23,78
menu 6,15,fgf
menu 8,30, menu7
menu 10,30,menu8
menu 12,30,menu9
menu 14,30,menu10
menu 16,15,fgf
menu 18,25,menu4
choose_speed:
mov ah,2
mov bh,0
mov dh,18
mov dl,47
int 10h
mov ah,1
int 21h
choose_next: ;这一段都与上面类似
cmp al,'1'
je speed1_1
jmp spe2
speed1_1:
jmp speed1
spe2:
cmp al,'2'
je speed2_2
jmp spe3
speed2_2:
jmp speed2
spe3:
cmp al,'3'
je speed3_3
jmp spe4
speed3_3:
jmp speed3
spe4:
cmp al,'4'
je h_jm
cmp al,1bh
je h_jm_d
h_jm:
mov ah,1
int 21h
cmp al,0dh
jne otherkey1
jmp jiemian
h_jm_d:
jmp jiemian
speed1:
mov sped1,50000d
jmp begin
speed2:
mov sped1,40000d
jmp begin
speed3:
mov sped1,20000d
jmp begin
otherkey1:
push ax
mov ah,2
mov bh,0
mov dh,20
mov ah,2
mov bh,0
mov dh,15
mov dl,46
int 10h
exit: ;退出游戏
mov ah,6
mov bh,7
mov al,0
mov ch,0
mov cl,0
mov dh,24
mov dl,80
int 10h
mov ah,2
mov bh,0
mov dh,0
mov dl,0
int 10h ;清屏
mov ah,4ch
int 21h
waitf proc near
push ax
waitf1:
in al,61h
and al,10h
cmp al,ah
je waitf1
mov ah,al
loop waitf1
pop ax
ret
waitf endp
sound1 proc
push cx ;此段代码是把以前的一个扬声器实验代码直接抄过来的,呵呵
push ax
mov cx,1000h
in al,61h
and al,11111100b
out 61h,al
again:
xor al,2
out 61h,al
push cx
mov cx,0ffffh
continue:
nop
loop continue
pop cx
loop again
pop ax
pop cx
sound1 endp
ret
delay0 proc
push cx
push ax
mov cx,0ffffh
delay1:
nop
mov ax,1000h
delay2:
dec ax
jnz delay2
loop delay1
pop ax
pop cx
ret
delay0 endp
disp proc near ;这一段代码是为了显示打字结果的
menu 5, 15,fgf
menu 7, 25,meg7
menu 9, 25,meg8
menu 11, 25,meg9
menu 13, 15,fgf
push ax
push bx
mov al,score1
mov ah,0
mov bl,10
div bl
mov fen3,al
mov fen4,ah
pop bx
pop ax
push ax
push dx
mov ah,2
mov bh,0 ;显示正确的得分
mov dl,45
mov dh,7
int 10h
mov al,fen3
mov dl,al
add dl,30h
mov ah,2
int 21h
mov dl,fen4
add dl,30h
mov ah,2
int 21h
pop dx
pop ax
push ax
push dx
mov al,error
add al,30h
mov fen5,al
mov ah,2
mov bh,0
mov dl,45
mov dh,9
int 10h
mov ah,2
mov dl,fen5 ;显示错误的个数
int 21h
pop dx
pop ax
push ax
push bx
push cx
push dx
mov ah,2
mov bh,0
mov dl,44
mov dh,11
int 10h
mov al,score1
mov dl,error
add dl,al
cmp al,dl
je skip
mov bl,10
mul bl
div dl
mov ma,al ;命中率十位
mov al,ah
mul bl
div dl
mov mb,al ;命中率个位
jmp next1
skip:
push dx
lea dx,string ;如果错误为0,则命中率为100%
mov ah,9
int 21h
pop dx
jmp exit1
next1:
push dx
mov dl,ma
add dl,30h
mov ah,2
int 21h
mov dl,mb
add dl,30h
mov ah,2
int 21h
mov ah,2
mov dl,25h ;输出'%'
int 21h
pop dx
exit1:
mov ah,1
int 21h
cmp al,1bh
jne exit1
pop dx
pop cx
pop bx
pop ax
ret
disp endp
code ends
end start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -