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

📄 letter.asm

📁 此打字游戏采用取系统时间生成随机数来完成的,打开letter.exe文件,输入1则进入游戏 输入2,选择游戏难度 3或Ese退出游戏.
💻 ASM
📖 第 1 页 / 共 2 页
字号:
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 + -