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

📄 dazi1.asm

📁 汇编语言的另一个打字游戏 比较好 测试通过masm6.0
💻 ASM
📖 第 1 页 / 共 2 页
字号:
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 + -