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

📄 菜单-打字游戏.txt

📁 汇编下的打字游戏
💻 TXT
字号:
 自己编的一个打字游戏,有菜单,可选练习字母和速度,大家给点意见
changemenu macro top,left,num,att,name                    ;改变宏
press
mov ah,6
mov ch,top
mov cl,30
mov dh,top
mov dl,50
mov al,0
mov bh,0fh
int 10h
menu att,num,top,left,name
outh
endm
press macro;压入宏
push ax
push bx
push cx
push dx
endm
outh macro;出宏
pop dx
pop cx
pop bx
pop ax
endm
cut macro att,top,left,bot,right           ;清屏宏
press
mov ah,6
mov al,0
mov bh,att
mov ch,top
mov cl,left
mov dh,bot
mov dl,right
int 10h
outh
endm
menu macro att,num,top,left,name          ;字符串输出宏
press
mov ah,13h
mov al,1
mov bh,0
mov bl,att
mov cx,num
mov dh,top
mov dl,left
mov bp,offset name
int 10h
outh
endm
move macro name                           ;数据传送宏
local next
press
cld
push ds
pop es
mov cx,30
mov si,offset name
mov di,offset char
next:
movsb
loop next 
outh
endm
showcut macro num                        ;隐藏光标宏
push ax
push cx
mov ah,1
mov cl,0
mov ch,num
int 10h
pop cx
pop ax
endm
;
data segment;数据段
charnum db ?
speednum dw ?
mainnum db ?
son2num db ?
son3num db ?
headchar db '****************************************'
head1 db 'Thank you for your use!!!'
head2 db 'Welcome to my game!!!!!!!'
men db 'Made by Caohong'
main1 db 'start'
main2 db 'choose char'
main3 db 'choose speed'
main4 db 'exit'
maintime db '7,26,2004'
subhead db 'please choose:'
c1 db '1234567890'
c2 db 'qwertyuiop'
c3 db 'asdfghjkl;'
c4 db 'zxcvbnm,.?'
s1 db 'speed one'
s2 db 'speed two'
s3 db 'speed three'
s4 db 'speed four'
char1 db '136829340968573463412348560783'
char2 db 'uipreqwwrutyrtpituryterwrqeyti'
char3 db 'gfhsak;lkhhggffsdashfjgjjlgkfh'
char4 db 'zvcnbm,.?bnvbcczxvmn?bcvzmbn?b'
char db 30 dup (?)
data ends
;
code segment                            ;代码段        
assume cs:code,ds:data,es:data
start:
mov ax,data
mov ds,ax
mov es,ax
mov charnum,1
mov mainnum,1
mov son2num,1
mov son3num,1
mov speednum,1500
showcut 1
;
mainmenu:                               ;主不动菜单绘制
cut 17h,0,0,24,79
menu 1fh,40,4,20,headchar
menu 97h,25,5,27,head1
menu 1fh,25,7,27,head2
menu 97h,25,9,27,head1
menu 1fh,40,10,20,headchar
menu 1fh,15,11,61,men
menu 1fh,5,13,37,main1
menu 1fh,11,16,34,main2
menu 1fh,12,19,34,main3
menu 1fh,4,22,37,main4
menu 1fh,9,24,67,maintime
;                                    ;移动光标绘制
movemenu1:                           ;判断光标位置                            
cmp mainnum,1
jne movemenu2
changemenu 13,37,5,0fh,main1
movemenu2:
cmp mainnum,2
jne movemenu3
changemenu 16,34,11,0fh,main2
movemenu3:
cmp mainnum,3
jne movemenu4
changemenu 19,34,12,0fh,main3
movemenu4:
cmp mainnum,4
jne waitword
changemenu 22,37,4,0fh,main4
waitword:                                  ;等待输入
mov ah,8
int 21h
;
compare:                                ;比较按键
cmp al,65h
je cmpdown1
cmp al,66h
je cmpup1
cmp al,0dh
je cmpenter1
jmp waitword
cmpdown1:                               ;按下下移
cmp mainnum,4
jne cmpdown2
mov mainnum,1
jmp mainmenu;movemenu1
cmpdown2:
down1:
cmp mainnum,1
jne down2
mov mainnum,2
jmp mainmenu;movemenu1
down2:
cmp mainnum,2
jne down3
mov mainnum,3
jmp mainmenu;movemenu1
down3:
mov mainnum,4
jmp mainmenu;movemenu1
cmpup1:                                ;按下上移
cmp mainnum,1
jne cmpup2
mov mainnum,4
jmp mainmenu;movemenu1
cmpup2:
up1:
cmp mainnum,4
jne up2
mov mainnum,3
jmp mainmenu;movemenu1
up2:
cmp mainnum,3
jne up3
mov mainnum,2
jmp mainmenu;movemenu1
up3:
mov mainnum,1
jmp mainmenu;movemenu1
cmpenter1:                                ;按下回车
cmp mainnum,1
jne cmpenter2
jmp son1                                 ;son1代表开始
cmpenter2:
cmp mainnum,2
jne cmpenter3
jmp son2menu                                 ;son2代表选择字母
cmpenter3:
cmp mainnum,3
jne cmpenter4
jmp son3menu                                ;son3代表选择速度
cmpenter4:
jmp son4                                ;son4代表结束(主菜单绘制完成)
;
son2menu:                               ;son2不动菜单绘制
cut 17h,0,0,24,79
menu 1fh,14,3,5,subhead
menu 1fh,10,8,35,c1
menu 1fh,10,12,35,c2
menu 1fh,10,16,35,c3
menu 1fh,10,20,35,c4
;                                    ;移动光标绘制
s2movemenu1:                           ;判断光标位置                            
cmp son2num,1
jne s2movemenu2
changemenu 8,35,10,0fh,c1
s2movemenu2:
cmp son2num,2
jne s2movemenu3
changemenu 12,35,10,0fh,c2
s2movemenu3:
cmp son2num,3
jne s2movemenu4
changemenu 16,35,10,0fh,c3
s2movemenu4:
cmp son2num,4
jne s2waitword
changemenu 20,35,10,0fh,c4
s2waitword:                                  ;等待输入
mov ah,8
int 21h
;
s2compare:                                ;比较按键
cmp al,65h
je s2cmpdown1
cmp al,66h
je s2cmpup1
cmp al,0dh
je s2cmpenter1
jmp s2waitword
s2cmpdown1:                               ;按下下移
cmp son2num,4
jne s2cmpdown2
mov son2num,1
jmp son2menu
s2cmpdown2:
s2down1:
cmp son2num,1
jne s2down2
mov son2num,2
jmp son2menu
s2down2:
cmp son2num,2
jne s2down3
mov son2num,3
jmp son2menu
s2down3:
mov son2num,4
jmp son2menu
s2cmpup1:                                ;按下上移
cmp son2num,1
jne s2cmpup2
mov son2num,4
jmp son2menu
s2cmpup2:
s2up1:
cmp son2num,4
jne s2up2
mov son2num,3
jmp son2menu
s2up2:
cmp son2num,3
jne s2up3
mov son2num,2
jmp son2menu
s2up3:
mov son2num,1
jmp son2menu
s2cmpenter1:                                ;按下回车
cmp son2num,1
jne s2cmpenter2
mov charnum,1
jmp mainmenu                               
s2cmpenter2:
cmp son2num,2
jne s2cmpenter3
mov charnum,2
jmp mainmenu                                 
s2cmpenter3:
cmp son2num,3
jne s2cmpenter4
mov charnum,3
jmp mainmenu                                
s2cmpenter4:
mov charnum,4
jmp mainmenu                              ;son2菜单绘制完毕 
;
son3menu:                               ;son3不动菜单绘制
cut 17h,0,0,24,79
menu 1fh,14,3,5,subhead
menu 1fh,9,8,34,s1
menu 1fh,9,12,34,s2
menu 1fh,11,16,34,s3
menu 1fh,10,20,34,s4
;                                    ;移动光标绘制
s3movemenu1:                           ;判断光标位置                            
cmp son3num,1
jne s3movemenu2
changemenu 8,34,9,0fh,s1
s3movemenu2:
cmp son3num,2
jne s3movemenu3
changemenu 12,34,9,0fh,s2
s3movemenu3:
cmp son3num,3
jne s3movemenu4
changemenu 16,34,11,0fh,s3
s3movemenu4:
cmp son3num,4
jne s3waitword
changemenu 20,34,10,0fh,s4
s3waitword:                                  ;等待输入
mov ah,8
int 21h
;
s3compare:                                ;比较按键
cmp al,65h
je s3cmpdown1
cmp al,66h
je s3cmpup1
cmp al,0dh
je s3cmpenter1
jmp s3waitword
s3cmpdown1:                               ;按下下移
cmp son3num,4
jne s3cmpdown2
mov son3num,1
jmp son3menu
s3cmpdown2:
s3down1:
cmp son3num,1
jne s3down2
mov son3num,2
jmp son3menu
s3down2:
cmp son3num,2
jne s3down3
mov son3num,3
jmp son3menu
s3down3:
mov son3num,4
jmp son3menu
s3cmpup1:                                ;按下上移
cmp son3num,1
jne s3cmpup2
mov son3num,4
jmp son3menu
s3cmpup2:
s3up1:
cmp son3num,4
jne s3up2
mov son3num,3
jmp son3menu
s3up2:
cmp son3num,3
jne s3up3
mov son3num,2
jmp son3menu
s3up3:
mov son3num,1
jmp son3menu
s3cmpenter1:                                ;按下回车
cmp son3num,1
jne s3cmpenter2
mov speednum,1500
jmp mainmenu                               
s3cmpenter2:
cmp son3num,2
jne s3cmpenter3
mov speednum,1000
jmp mainmenu                                 
s3cmpenter3:
cmp son3num,3
jne s3cmpenter4
mov speednum,500
jmp mainmenu                                
s3cmpenter4:
mov speednum,100
jmp mainmenu                               ; son3绘制完毕
;
son1:                                      ;游戏开始
cut 1fh,0,0,24,79
cmpchar1:                                   ;判断字母
cmp charnum,1
jne cmpchar2
move char1
jmp openchar
cmpchar2:
cmp charnum,2
jne cmpchar3
move char2
jmp openchar
cmpchar3:
cmp charnum,3
jne cmpchar4
move char3
jmp openchar
cmpchar4:
move char4
openchar:
mov si,offset char
mov cx,1
open:                                     ;先在0行显示一个字母
push cx
push cx
mov ah,2
mov dh,0
mov dl,[si]-50h
mov bh,0
int 10h
mov ah,0ah
mov al,[si]
mov cx,1
mov bh,0
int 10h
mov cx,0
outtime:                             ;眼时部分
push cx
mov cx,0
outtime1:
push cx
mov cx,0
outtime2:
inc cx
cmp cx,50000
jne outtime2
pop cx
inc cx
cmp cx,speednum
jne outtime1
input:                                         ;读键部分
push dx                                        ;保存数据
mov ah,6
mov dl,0ffh
int 21h
pop dx
cmpare0:                                        ;是否为空
jz nexthang
cmpare1:                                        ;是否为暂停
cmp al," "
jne cmpare2
pause:                                          ;暂停部分
mov ah,8
int 21h
cmp al," "
je input
jmp pause
cmpare2:
cmp al,1bh
jne cmpare3
jmp mainmenu                                     ;跳转主菜单
cmpare3:
cmp al,[si]
jne nexthang
mov dl,07h                                       ;发声
mov ah,2
int 21h
pop cx
cmp cx,30
je son5
inc cx
jmp nextchar
nexthang:                                  ;换行部分
mov ah,0ah
mov al," "
mov bh,0
mov cx,1
int 10h
inc dh
mov ah,2
mov bh,0
int 10h
mov ah,0ah
mov al,[si]
mov bh,0
mov cx,1
int 10h
pop cx
inc cx
cmp cx,25
jne outtime
nextchar:                                     ;换字母部分
mov ah,0ah
mov al," "
mov cx,1
mov bh,0
int 10h
inc si
pop cx
cmp cx,30
je son5
inc cx
jmp open
son4:
cut 07h,0,0,24,79
mov ah,4ch
int 21h
son5:
jmp far ptr mainmenu
code ends
end start  

⌨️ 快捷键说明

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