?? 打字.asm
字號(hào):
DATA SEGMENT
DA1 DB 'SCORE:','$'
DA2 DB 'LIFE:','$'
DA3 DB ' ','$' ;引號(hào)內(nèi)共40個(gè)空格
DA4 DB 'GAME OVER','$'
DA5 DB 'Are you sure to quit?(Y/N)','$'
DA6 DB 'Continue or Retry?(C/R)','$'
DA7 DB 'Welcome to the word game!','$'
DA8 DB 'Maker:ZhangKuoda','$'
DA9 DB 'Class:computer 031 Number:032261','$'
DA10 DB 'YOUR SCORE:','$'
DA11 DB 'PAUSE','$'
DA12 DB 'Please choose level(1-5):','$'
DA13 DB 'WORD GAME','$'
DA14 DB 'QUIT:Esc PAUSE:Space LEVEL:','$'
DA15 DW 3
DB 01H,0,0
DB 04H,1,0
DB 13H,1,0
DA16 DB 'Right Rate:','$'
SCORE1 DW 0
SCORE2 DB '0'
RECORD1 DB 'You have make the record!Congratulation!','$'
COUNT1 DW 15
COUNT2 DW 0
COUNT3 DB 1 DUP(0)
COUNT4 DB 0
COUNT5 DB 3 DUP(0)
DATA ENDS
STACK SEGMENT PARA STACK
DW 30H DUP(?)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
START: MOV AX,DATA
MOV DS,AX
WELCOME:MOV AL,2 ;輸出WELCOME等
MOV AH,0
INT 10H
MOV AH,15
INT 10H
MOV DI,OFFSET DA15
ADD DI,2
MOV CX,11
LOP1: PUSH CX
SUB DI,2
MOV CX,[DI]
MOV DX,0
ADD DI,2
NEXT1: ADD DH,[DI+1] ;置小人的位置
ADD DL,[DI+2]
MOV AH,2
INT 10H
MOV AL,[DI] ;顯示小人圖形
PUSH CX
MOV BL,00000010B
MOV CX,1
MOV AH,9
INT 10H
POP CX
ADD DI,3
LOOP NEXT1
CALL DELAY2 ;調(diào)用延時(shí)
MOV CX,3
N1: SUB DI,3 ;清除圖形
MOV AH,2
INT 10H
PUSH CX
MOV AL,0
MOV CX,1
MOV AH,10
INT 10H
SUB DH,[DI+1]
SUB DL,[DI+2]
POP CX
LOOP N1
Y1: PUSH DX
MOV DH,[DI+1] ;改變光標(biāo)位置,使小人移動(dòng)
MOV DL,[DI+2]
INC DH
ADD DL,3
MOV [DI+1],DH
MOV [DI+2],DL
POP DX
POP CX
LOOP LOP1
MOV DH,9
MOV DL,33
MOV AH,02H
INT 10H
MOV DX,OFFSET DA13 ;輸出WORD GAME
MOV AH,09H
INT 21H
CALL DELAY1
MOV AL,2
MOV AH,0
INT 10H
MOV DH,9 ;置光標(biāo)位置
MOV DL,25
MOV AH,02H
INT 10H
MOV DX,OFFSET DA7
MOV AH,09H
INT 21H
CALL DELAY1 ;調(diào)用延時(shí)程序
MOV DH,10
MOV DL,29
MOV AH,02H
INT 10H
CALL DELAY1
MOV DX,OFFSET DA8
MOV AH,09H
INT 21H
CALL DELAY1
MOV DH,11
MOV DL,21
MOV AH,02H
INT 10H
MOV DX,OFFSET DA9
MOV AH,09H
INT 21H
CALL DELAY1
LEVEL: MOV AL,2 ;輸出選擇速度
MOV AH,0
INT 10H
MOV DH,10
MOV DL,25
MOV AH,02H
INT 10H
MOV DX,OFFSET DA12
MOV AH,09H
INT 21H
MOV AH,01H ;若為1,則BP賦值0CCCCH,決定下落速度
INT 21H
MOV COUNT3,AL
CMP AL,31H ;等待用戶輸入
JE L1
CMP AL,32H
JE L2
CMP AL,33H
JE L3
CMP AL,34H
JE L4
CMP AL,35H
JE L5
JMP LEVEL ;使得游戲開始前按任何鍵都不起作用
START2: mov al,2
mov ah,0
int 10h
MOV DX,0 ;輸出第一行的字符
MOV AH,02H
INT 10H
MOV AL,14H
MOV CX,34
MOV BL,10010100B
MOV AH,9
INT 10H
MOV DH,0
MOV DL,35
MOV AH,02H
INT 10H
MOV DX,OFFSET DA13
MOV AH,09H
INT 21H
MOV DH,0
MOV DL,45
MOV AH,02H
INT 10H
MOV AL,14H
MOV CX,35
MOV BL,10001010B
MOV AH,9
INT 10H
MOV DH,1
MOV DL,0
MOV AH,02H
INT 10H
MOV DX,OFFSET DA1 ;輸出SCORE
MOV AH,09H
INT 21H
MOV SCORE1,0
MOV COUNT1,15
MOV COUNT2,0
JMP FENSHU
L1: MOV BP,0CCCCH
JMP START2
L2: MOV BP,0AAAAH
JMP START2
L3: MOV BP,7777H
JMP START2
L4: MOV BP,5555H
JMP START2
L5: MOV BP,3333H
JMP START2
fenshu: mov dh,1
mov dl,7
mov ah,02h
int 10h
MOV AX,SCORE1 ;輸出分?jǐn)?shù)值
MOV BL,10 ;16進(jìn)制轉(zhuǎn)換成非壓縮BCD碼輸出
DIV BL
OR AH,30H
OR AL,30H
MOV CL,AL ;CL存放商
MOV DH,AH
MOV DL,AL
MOV AH,02H
INT 21H
MOV DL,DH
MOV AH,02H
INT 21H
MOV DI,OFFSET SCORE2
MOV DL,[DI]
MOV AH,02H
INT 21H
CMP CL,33H ;大于300則成為紀(jì)錄
JAE JILU1
CMP CL,30H
JA DAZI
MOV DX,OFFSET DA3 ;輸出空格
MOV AH,09H
INT 21H
MOV DX,OFFSET DA2 ;輸出LIFE
MOV AH,09H
INT 21H
SHENGMING:mov dh,1
mov dl,55
mov ah,02h
int 10h
MOV AH,09H ;輸出生命值(紅色條形)
MOV AL,20H
MOV BH,0
MOV BL,01000100B
MOV CX,COUNT1 ;紅色條減少
INT 10H
MOV BH,55
MOV BL,BYTE PTR COUNT1
ADD BH,BL
MOV DH,0
MOV DL,BH
MOV AH,02H
INT 10H
MOV AH,09H
MOV AL,20H
MOV BH,0
MOV BL,00000000B ;在要消去的生命條上輸出黑色
MOV CX,COUNT2
INT 10H
CMP CX,15
JE OVER5
MOV DH,24
MOV DL,40
MOV AH,02H
INT 10H
MOV DX,OFFSET DA14 ;輸出提示
MOV AH,09H
INT 21H
MOV DH,24
MOV DL,75
MOV AH,02H
INT 10H
MOV BL,COUNT3
OR BL,30H
MOV AL,BL
MOV CX,1
MOV AH,10
INT 10H
JMP DAZI
OVER5: JMP OVER3
JILU1: JMP JILU
dazi: PUSH CX ;利用時(shí)間計(jì)數(shù)器產(chǎn)生隨機(jī)數(shù)
PUSH DX
PUSH AX
MOV AH,0
INT 1AH
MOV AX,DX
AND AH,3
MOV DL,75
DIV DL
MOV BL,AH ;隨機(jī)數(shù)在BL中
INC COUNT4
POP AX
POP DX
POP CX
YIDONG: MOV AH,0FH ;使字符移動(dòng),掉落
INT 10H
MOV DH,10 ;清除Continue or Retry?(C/R)字符
MOV DL,25
MOV AH,02H
INT 10H
MOV AL,0
MOV CX,27
MOV AH,10
INT 10H
MOV AH,0FH
INT 10H
MOV DH,02H ;置掉落字符的光標(biāo)位置
MOV DL,BL
ADD BL,30H ;要顯示的字符的ASC碼
REPT1: MOV AH,02H
INT 10H
MOV CX,1
MOV AL,BL ;輸出顯示字符
MOV AH,10
INT 10H
CALL DELAY ;調(diào)用延時(shí)子程序
SUB AL,AL ;清除原圖形
MOV AH,10
INT 10H
PUSH DX
MOV DL,0FFH ;不等待用戶輸入,否則輸出
MOV AH,06H
INT 21H
POP DX
INC DH
CMP AL,BL ;輸入與輸出相同,則為打中
JE jizhong2
CMP AL,1BH ;若輸入為ESC,則退出
JE QUIT
CMP AL,20H ;若輸入為SPACE,則暫停
JE PAUSE
PAUSE1: CMP DH,24 ;若沒(méi)有輸入且沒(méi)有掉到最后一行,則繼續(xù)下落
JNE REPT1
JMP BUZHONG ;無(wú)輸入且掉到最后一行,則為不中
OVER3: JMP OVER2
START1: JMP START2
JILU: PUSH DX ;輸出紀(jì)錄且結(jié)束
MOV DH,10
MOV DL,20
MOV AH,02H
INT 10H
POP DX
MOV DX,OFFSET RECORD1
MOV AH,09H
INT 21H
CALL DELAY1
JMP OVER4
YIDONG1:JMP YIDONG
OVER4: JMP OVER2
JIZHONG2:JMP JIZHONG1
PAUSE2: PUSH DX ;清除PAUSE字符
MOV DH,11
MOV DL,37
MOV AH,02H
INT 10H
MOV AL,0
MOV CX,6
MOV AH,10
INT 10H
POP DX
JMP PAUSE1
PAUSE: MOV DH,11 ;輸出暫停
MOV DL,37
MOV AH,02H
INT 10H
MOV DX,OFFSET DA11
MOV AH,09H
INT 21H
MOV AH,01H
INT 21H
CMP AL,20H ;若再次輸入SPACE,則繼續(xù)游戲,否則繼續(xù)暫停
JE PAUSE2
JMP PAUSE
OVER2: JMP OVER
YIDONG2:JMP YIDONG1
QUIT: MOV DH,10 ;輸出退出
MOV DL,25
MOV AH,02H
INT 10H
MOV DX,OFFSET DA5
MOV AH,09H
INT 21H
MOV AH,01H
INT 21H
CMP AL,59H ;若輸入Y則退出
JE OVER
CMP AL,4EH ;若輸入N則判斷是否繼續(xù)
JE PANDUAN
JMP QUIT
START3: JMP START1
JIZHONG1:JMP JIZHONG
PANDUAN:MOV AH,0FH ;首先清除原字符
INT 10H
MOV DH,10
MOV DL,25
MOV AH,02H
INT 10H
MOV AL,0
MOV CX,27
MOV AH,10
INT 10H
MOV DH,10
MOV DL,25
MOV AH,02H
INT 10H
MOV DX,OFFSET DA6
MOV AH,09H
INT 21H
MOV AH,01H
INT 21H
CMP AL,'R' ;若輸入R則重新開始
JE START3
CMP AL,'C' ;若輸入C則繼續(xù)剛才的游戲
JE YIDONG2
JMP PANDUAN
OVER: MOV AL,2 ;結(jié)束游戲并輸出你的分?jǐn)?shù)值
MOV AH,0
INT 10H
MOV DH,10
MOV DL,33
MOV AH,02H
INT 10H
MOV DX,OFFSET DA10
MOV AH,09H
INT 21H
MOV DH,10
MOV DL,44
MOV AH,02H
INT 10H
MOV AX,SCORE1 ;輸出分?jǐn)?shù)值
MOV BL,10
DIV BL
MOV CH,BYTE PTR SCORE1
OR AH,30H
OR AL,30H
MOV DH,AH
MOV DL,AL
MOV AH,02H
INT 21H
MOV DL,DH
MOV AH,02H
INT 21H
MOV DI,OFFSET SCORE2
MOV DL,[DI]
MOV AH,02H
INT 21H
CALL DELAY1
MOV AH,15
INT 10H
MOV AL,2 ;輸出正確率
MOV AH,0
MOV DH,10
MOV DL,33
MOV AH,02H
INT 10H
MOV DX,OFFSET DA16
MOV AH,09H
INT 21H
MOV AL,CH
MOV BL,100
MUL BL
MOV BL,COUNT4
DIV BL ;余數(shù)在AH中,商在AL中
MOV SI,OFFSET COUNT5
MOV CX,0
LL: PUSH CX
MOV AH,0
MOV CL,10
DIV CL
XCHG AH,AL
ADD AL,30H
MOV [SI],AL
INC SI
POP CX
INC CX
MOV AL,AH
CMP AH,0
JNZ LL
DEC2: DEC SI
MOV AL,[SI]
MOV DL,AL
MOV AH,2
INT 21H
LOOP DEC2
MOV DL,25H
MOV AH,02H
INT 21H
CALL DELAY1
MOV AH,15
INT 10H
MOV AL,2
MOV AH,0
INT 10H
MOV DH,10
MOV DL,33
MOV AH,02H
INT 10H
MOV DX,OFFSET DA4 ;輸出GAME OVER,然后結(jié)束
MOV AH,09H
INT 21H
CALL DELAY1
OVER1: MOV AH,4CH
INT 21H
JIZHONG:INC SCORE1
JMP FENSHU
BUZHONG:INC COUNT2
DEC COUNT1
JMP SHENGMING
DELAY PROC ;字符掉落速度的延時(shí)子程序
PUSH CX
PUSH DX
MOV DX,01111h
DL500: MOV CX,BP
DL10MS: LOOP DL10MS
DEC DX
JNZ DL500
POP DX
POP CX
RET
DELAY ENDP
DELAY1 PROC ;第二個(gè)延時(shí)子程序
PUSH CX
PUSH DX
MOV DX,08888h
DL400: MOV CX,0FFFFH
DL20MS: LOOP DL20MS
DEC DX
JNZ DL400
POP DX
POP CX
RET
DELAY1 ENDP
DELAY2 PROC ;第三個(gè)延時(shí)子程序
PUSH CX
PUSH DX
MOV DX,06666h
DL300: MOV CX,0AAAAH
DL30MS: LOOP DL30MS
DEC DX
JNZ DL300
POP DX
POP CX
RET
DELAY2 ENDP
CODE ENDS
END START
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -