📄 dazi1.asm
字号:
DATA SEGMENT
;******** 控制类 ********
HANGID DB 5 ; 行号
POSITION DB 0 ; 字母出现的起始列数
WHICH DB 0 ; SI指针的定位
TOTAL DB 0 ; MODE1下落字母的总数或者是MODE2按键的次数
DELAYTIME DB 03H ; 下落延时(难度控制)
BLANK DB ' ', 0H ; 覆盖用的空格
OUTFLAG DB 0 ; 记录退出选项
DIFFICULTYFLAG DB 0 ; 难度选项
MODEFLAG DB 0 ; 模式选项
;******** 数据类 ********
ARTICLE DB 'Human vision like that of other primates has evolved in an arboreal environment In the dense complex world of a tropical forest it is more important to see well that to develop an acute sense of smell'
LIST DB 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
TIPS1 DB 'I', 0EH, 'N', 0EH, 'S', 0EH, 'T', 0EH, 'R', 0EH, 'U', 0EH, 'C', 0EH, 'T', 0EH, 'I', 0EH, 'O', 0EH, 'N', 0EH, ':', 0EH
TIPS2 DB 'D',0EH, 'I',0EH, 'F',0EH,'F',0EH,'I',0EH,'C',0EH,'U',0EH,'L',0EH,'T',0EH,'Y',0EH,' ',0EH,'S',0EH,'E',0EH,'L',0EH,'E',0EH,'C',0EH,'T',0EH
TIPS3 DB 'MODE SELECT'
TIPS4 DB 'DON''T USE BACKSPACE OR ARROWS, JUST TYPE THE LETTERS!!'
TIPS5 DB 'PRESS ESC TO QUIT'
CONTENT DB 'MODE1: SPEED TYPING; MODE2: EXERCISE TYPING'
STR1 DB 'YOU HAVE SELECTED ', '$'
STR2 DB ' PRESS ANYKEY TO START GAME!', '$'
STR3 DB 'GAME FINISHED! YOUR RANK IS '
STR4 DB 'PRESS ESC TO DIPLAY THE MENU'
STR5 DB 'START TIME: '
STR6 DB 'ACCURACY: '
STR7 DB 'END TIME: '
MAX DB '100 %'
INFO DB 'VERSION: 0.2 PRODUCED BY: Sure'
NORMAL DB 'NORMAL'
HARD DB ' HARD '
MODE1 DB 'MODE1'
MODE2 DB 'MODE2'
YESQUIT DB ' I WANT TO QUIT!! '
NOTQUIT DB 'CONTINUE TO PLAY!!'
ENDL DB 0DH, 0AH, '$'
RANK DB 0
SCORE DB 'SCORE:'
HIT DB 'HIT:'
MISS DB 'MISS:'
SCORENUMBER DB 0 ; 得分
HITNUMBER DB 0
MISSNUMBER DB 0
TEMP DB 2 DUP(0) ; 暂存计算所得的成绩(10进制)
HOUR DB 0 ; 存储小时
MINUTE DB 0 ; 存储分钟
SECOND DB 0 ; 存储秒
THANKS DB 'THANK YOU FOR PLAYING! ^O^'
JIESHU DB 'PRESS ANY KEY TO QUIT...'
DATA ENDS
STACK SEGMENT PARA STACK
DW 100 DUP(0)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE, SS:STACK, DS:DATA, ES:DATA
BEGIN: MOV AX, DATA
MOV DS, AX
MOV ES, AX
MOV BX, 0 ; 保存当前显示方式
MOV AH, 0FH
INT 10H
PUSH AX
PUSH BX
MOV AL, 03H ; 置显示模式
MOV AH, 0
INT 10H
;********************************开始界面********************************
;**********显示欢迎信息(打字效果)**********
MOV AH, 0EH
MOV BH, 0
MOV AL, 'W'
INT 10H
CALL DELAY
MOV AH, 0EH
MOV BH, 0
MOV AL, 'E'
INT 10H
CALL DELAY
MOV AH, 0EH
MOV BH, 0
MOV AL, 'L'
INT 10H
CALL DELAY
MOV AH, 0EH
MOV BH, 0
MOV AL, 'C'
INT 10H
CALL DELAY
MOV AH, 0EH
MOV BH, 0
MOV AL, 'O'
INT 10H
CALL DELAY
MOV AH, 0EH
MOV BH, 0
MOV AL, 'M'
INT 10H
CALL DELAY
MOV AH, 0EH
MOV BH, 0
MOV AL, 'E'
INT 10H
CALL DELAY
MOV AH, 0EH
MOV BH, 0
MOV AL, ' '
INT 10H
CALL DELAY
MOV AH, 0EH
MOV BH, 0
MOV AL, 'T'
INT 10H
CALL DELAY
MOV AH, 0EH
MOV BH, 0
MOV AL, 'O'
INT 10H
CALL DELAY
MOV AH, 0EH
MOV BH, 0
MOV AL, ' '
INT 10H
CALL DELAY
MOV AH, 0EH
MOV BH, 0
MOV AL, 'T'
INT 10H
CALL DELAY
MOV AH, 0EH
MOV BH, 0
MOV AL, 'H'
INT 10H
CALL DELAY
MOV AH, 0EH
MOV BH, 0
MOV AL, 'E'
INT 10H
CALL DELAY
MOV AH, 0EH
MOV BH, 0
MOV AL, ' '
INT 10H
CALL DELAY
MOV AH, 0EH
MOV BH, 0
MOV AL, 'G'
INT 10H
CALL DELAY
MOV AH, 0EH
MOV BH, 0
MOV AL, 'A'
INT 10H
CALL DELAY
MOV AH, 0EH
MOV BH, 0
MOV AL, 'M'
INT 10H
CALL DELAY
MOV AH, 0EH
MOV BH, 0
MOV AL, 'E'
INT 10H
CALL DELAY
MOV AH, 0EH
MOV BH, 0
MOV AL, ' '
INT 10H
CALL DELAY
MOV AH, 0EH
MOV BH, 0
MOV AL, 'W'
INT 10H
CALL DELAY
MOV AH, 0EH
MOV BH, 0
MOV AL, 'O'
INT 10H
CALL DELAY
MOV AH, 0EH
MOV BH, 0
MOV AL, 'R'
INT 10H
CALL DELAY
MOV AH, 0EH
MOV BH, 0
MOV AL, 'L'
INT 10H
CALL DELAY
MOV AH, 0EH
MOV BH, 0
MOV AL, 'D'
INT 10H
CALL DELAY
MOV AH, 0EH
MOV BH, 0
MOV AL, ' '
INT 10H
CALL DELAY
MOV AH, 0EH
MOV BH, 0
MOV AL, '!'
INT 10H
CALL DELAY
MOV AH, 0EH
MOV BH, 0
MOV AL, ' '
INT 10H
CALL DELAY
MOV AH, 0EH
MOV BH, 0
MOV AL, '^'
INT 10H
CALL DELAY
MOV AH, 0EH
MOV BH, 0
MOV AL, '_'
INT 10H
CALL DELAY
MOV AH, 0EH
MOV BH, 0
MOV AL, '^'
INT 10H
; **********显示其它提示信息************
MOV BP, OFFSET INFO
MOV CX, 32D
MOV DH, 0
MOV DL, 46D
MOV AL, 1
MOV BL, 0BH
MOV AH, 13H
INT 10H
CALL ENDLINE
MOV AH, 09H
MOV BH, 0
MOV CX, 80D
MOV BL, 02H
MOV AL, '*'
INT 10H
CALL ENDLINE
MOV BP, OFFSET TIPS1
MOV CX, 12D
MOV DH, 04H
MOV DL, 0
MOV AL, 03
MOV AH, 13H
INT 10H
MOV BP,OFFSET CONTENT
MOV CX, 45D
MOV DH, 06D
MOV DL, 17D
MOV AL, 01
MOV BL, 0CH
MOV AH, 13H
INT 10H
CALL ENDLINE
MOV AH, 09H
MOV BH, 0
MOV CX, 80D
MOV BL, 02H
MOV AL, '*'
INT 10H
CALL ENDLINE
MOV AH, 02H
MOV BH, 0
MOV DH, 15D
MOV DL, 0
INT 10H
MOV AH, 09H
MOV BH, 0
MOV CX, 80D
MOV BL, 02H
MOV AL, '*'
INT 10H
; ************显示选择菜单**************
MOV BP, OFFSET TIPS3
MOV CX, 11D
MOV DH, 10D
MOV DL, 0
MOV AL, 01
MOV BL, 0EH
MOV AH, 13H
INT 10H
CALL MODESELECT
CMP MODEFLAG, 0
JE GOGAME1
JMP GOGAME2
GOGAME1: MOV BP, OFFSET TIPS2
MOV CX, 17D
MOV DH, 17D
MOV DL, 0
MOV AL, 03
MOV AH, 13H
INT 10H
MOV AH, 02H
MOV BH, 0
MOV DH, 22D
MOV DL, 0
INT 10H
MOV AH, 09H
MOV BH, 0
MOV CX, 80D
MOV BL, 02H
MOV AL, '*'
INT 10H
CALL SELECT ; 调用难度选择菜单函数
MOV AH, 02H
MOV BH, 0
MOV DH, 24D
MOV DL, 25D
INT 10H
MOV DX, OFFSET STR1 ; 确认难度选项
MOV AH, 09H
INT 21H
CMP DIFFICULTYFLAG, 0FFH
JE SHARD
MOV AH, 13H
MOV BL, 0EH
MOV BH, 0
MOV BP, OFFSET NORMAL
MOV AL, 1
MOV CX, 6
MOV DH, 24D
MOV DL, 43D
INT 10H
JMP NEXT1
SHARD: MOV AH, 13H
MOV BL, 0EH
MOV BH, 0
MOV BP, OFFSET HARD
MOV AL, 1
MOV CX, 6
MOV DH, 24D
MOV DL, 42D
INT 10H
NEXT1: MOV DX, OFFSET STR2
MOV AH, 09H
INT 21H
MOV AH, 07H
INT 21H
CMP DIFFICULTYFLAG, 0 ; 根据选择难度设置延时和字符下落个数
JE NEXT2
MOV DELAYTIME, 01H
MOV TOTAL, 50D
JMP NEXT3
NEXT2: MOV DELAYTIME, 04H
MOV TOTAL, 50D
;********************************游戏开始********************************
NEXT3: MOV AH, 05H ; 置当前页为第2页
MOV AL, 2
INT 10H
; ******显示统计信息******
MOV AH, 13H
MOV BH, 2
MOV BL, 0AH
MOV CX, 04H
MOV DH, 1D
MOV DL, 50D
MOV AL, 1
MOV BP, OFFSET HIT
INT 10H
MOV AH, 13H
MOV BH, 2
MOV BL, 07H
MOV CX, 05H
MOV DH, 1D
MOV DL, 60D
MOV AL, 1
MOV BP, OFFSET MISS
INT 10H
MOV AH, 13H
MOV BH, 2
MOV BL, 0DH
MOV CX, 06H
MOV DH, 1D
MOV DL, 70D
MOV AL, 1
MOV BP, OFFSET SCORE
INT 10H
MOV AH, 13H
MOV BH, 2
MOV BL, 08H
MOV CX, 28D
MOV DH, 20D
MOV DL, 26D
MOV AL, 1
MOV BP, OFFSET STR4
INT 10H
MOV AH, 02H
MOV BH, 2
MOV DH, 3D
MOV DL, 0
INT 10H
MOV AH, 09H
MOV BH, 2
MOV CX, 80D
MOV BL, 02H
MOV AL, '*'
INT 10H
MOV AH, 02H
MOV BH, 2
MOV DH, 17D
MOV DL, 0
INT 10H
MOV AH, 09H
MOV BH, 2
MOV CX, 80D
MOV BL, 02H
MOV AL, '*'
INT 10H
;**********MODE1主循环***********
MAINLOP: CALL SETPOS
CALL WHICHONE
MOV BP, OFFSET LIST
MOV BX, 0
MOV BL, WHICH
ADD BP, BX
MOV CX, 1
MOV BH, 2 ; 2号页为MODE1游戏主窗口
MOV DH, 05H
MOV DL, POSITION
MOV AL, 1
MOV BL, 0EH
MOV AH, 13H
INT 10H
CALL DOWN
MOV BL, TOTAL ; 判定是否达到下落字符总数
DEC BL
MOV TOTAL, BL
CMP TOTAL, 0
JE TONGJI
JMP MAINLOP
; **********显示MODE1评价画面********** 使用4号页面
TONGJI: MOV AH, 05H
MOV AL, 04H
INT 10H
MOV AH, 02H
MOV BH, 4
MOV DH, 14D
MOV DL, 0
INT 10H
MOV AH, 09H
MOV BH, 4
MOV CX, 80D
MOV BL, 05H
MOV AL, '*'
INT 10H
MOV AH, 02H
MOV BH, 4
MOV DH, 18D
MOV DL, 0
INT 10H
MOV AH, 09H
MOV BH, 4
MOV CX, 80D
MOV BL, 05H
MOV AL, '*'
INT 10H
MOV AH, 13H
MOV BH, 4
MOV BL, 0EH
MOV CX, 28D
MOV DH, 16D
MOV DL, 26D
MOV AL, 1
MOV BP, OFFSET STR3
INT 10H
MOV AH, 02H
MOV BH, 4
MOV DH, 16D
MOV DL, 53D
INT 10H
MOV AH, 02H
MOV BH, 4
MOV DH, 16D
MOV DL, 55D
INT 10H
CMP SCORENUMBER, 90D ; 评价标准
JA NEXT4
CMP SCORENUMBER, 80D
JA NEXT5
CMP SCORENUMBER, 70D
JA NEXT6
CMP SCORENUMBER, 60D
JA NEXT7
MOV AL, 'D'
MOV BH, 4
MOV BL, 0CH
MOV CX, 1
MOV AH, 09H
INT 10H
JMP NEXT8
NEXT4: MOV AL, 'S'
MOV BH, 4
MOV BL, 0CH
MOV CX, 1
MOV AH, 09H
INT 10H
JMP NEXT8
NEXT5: MOV AL, 'A'
MOV BH, 4
MOV BL, 0CH
MOV CX, 1
MOV AH, 09H
INT 10H
JMP NEXT8
NEXT6: MOV AL, 'B'
MOV BH, 4
MOV BL, 0CH
MOV CX, 1
MOV AH, 09H
INT 10H
JMP NEXT8
NEXT7: MOV AL, 'C'
MOV BH, 4
MOV BL, 0CH
MOV CX, 1
MOV AH, 09H
INT 10H
JMP NEXT8
NEXT8: MOV AH, 13H
MOV BL, 0CH
MOV BH, 4
MOV BP, OFFSET THANKS
MOV AL, 1
MOV CX, 26D
MOV DH, 22D
MOV DL, 45D
INT 10H
MOV AH, 13H
MOV BL, 07H
MOV BH, 4
MOV BP, OFFSET JIESHU
MOV AL, 1
MOV CX, 25D
MOV DH, 23D
MOV DL, 50D
INT 10H
MOV AH, 07H
INT 21H
MOV AH, 07H
INT 21H
JMP OVER
;*******************MODE2游戏主程序*********************
GOGAME2: MOV AH, 02H
MOV BH, 0
MOV DH, 20D
MOV DL, 45D
INT 10H
MOV DX, OFFSET STR2
MOV AH, 09H
INT 21H
MOV AH, 07H
INT 21H
MOV AH, 05H ; 5号页为MODE2游戏页面
MOV AL, 5D
INT 10H
MOV AH, 02H
MOV BH, 5D
MOV DH, 04D
MOV DL, 0
INT 10H
MOV AH, 09H
MOV BH, 5D
MOV CX, 80D
MOV BL, 02H
MOV AL, '*'
INT 10H
MOV AH, 02H
MOV BH, 5D
MOV DH, 12D
MOV DL, 0
INT 10H
MOV AH, 09H
MOV BH, 5D
MOV CX, 80D
MOV BL, 08H
MOV AL, '-'
INT 10H
MOV AH, 02H
MOV BH, 5D
MOV DH, 20D
MOV DL, 0
INT 10H
MOV AH, 09H
MOV BH, 5D
MOV CX, 80D
MOV BL, 02H
MOV AL, '*'
INT 10H
MOV BP, OFFSET TIPS4
MOV BH, 05H
MOV CX, 54D
MOV DH, 22D
MOV DL, 13D
MOV BL, 0CH
MOV AL, 01H
MOV AH, 13H
INT 10H
MOV BP, OFFSET TIPS5
MOV BH, 05H
MOV CX, 17D
MOV DH, 23D
MOV DL, 55D
MOV BL, 0AH
MOV AL, 01H
MOV AH, 13H
INT 10H
MOV BP, OFFSET ARTICLE
MOV BH, 05H
MOV CX, 200D
MOV DH, 07D
MOV DL, 0
MOV AL, 01H
MOV BL, 0EH
MOV AH, 13H
INT 10H
MOV AH, 02H
MOV BH, 5D
MOV DH, 15D
MOV DL, 0
INT 10H
MOV SI, OFFSET ARTICLE
MOV AH, 2CH
INT 21H
MOV MINUTE, CL
MOV SECOND, DH
MOV HOUR, CH ; 存储计算所得的结果(当前时间换算成秒的总和)
TYPELOP: CALL TYPESTART
JMP TYPELOP
;**********显示MODE2评价画面**********(使用7号页面)
PINGJIA: MOV AH, 05H
MOV AL, 07H
INT 10H
MOV AH, 13H
MOV BH, 7
MOV BL, 0EH
MOV CX, 28D
MOV DH, 12D
MOV DL, 05D
MOV AL, 1
MOV BP, OFFSET STR3
INT 10H
MOV AH, 13H ; 结束信息
MOV BL, 0CH
MOV BH, 07H
MOV BP, OFFSET THANKS
MOV AL, 1
MOV CX, 26D
MOV DH, 21D
MOV DL, 45D
INT 10H
MOV AH, 13H
MOV BL, 07H
MOV BH, 07H
MOV BP, OFFSET JIESHU
MOV AL, 1
MOV CX, 25D
MOV DH, 23D
MOV DL, 50D
INT 10H
MOV AH, 02H
MOV BH, 7
MOV DH, 14D
MOV DL, 0
INT 10H
MOV AH, 09H
MOV BH, 7
MOV CX, 80D
MOV BL, 05H
MOV AL, '*'
INT 10H
MOV AH, 02H
MOV BH, 7
MOV DH, 18D
MOV DL, 0
INT 10H
MOV AH, 09H
MOV BH, 7
MOV CX, 80D
MOV BL, 05H
MOV AL, '*'
INT 10H
MOV BP, OFFSET STR5
MOV BH, 7
MOV CX, 12D
MOV DH, 16D
MOV DL, 5D
MOV AL, 01H
MOV AH, 13H
MOV BL, 07H
INT 10H
;***********显示出开始打字的时间************
MOV AX, 0
MOV AL, HOUR
MOV DI, OFFSET TEMP
INC DI
MOV DX, 0
MOV BX, 10D
DIV BX
XCHG AX, DX
ADD AL, 30H
MOV [DI], AL
DEC DI
ADD DL, 30H
MOV [DI], DL
MOV BP, OFFSET TEMP
MOV BH, 7
MOV CX, 2
MOV DH, 16D
MOV DL, 18D
MOV AL, 01H
MOV AH, 13H
MOV BL, 0EH
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -