📄 wu.asm
字号:
DATA SEGMENT
S1 DB 0AH,0DH,'------------------MENU--------------------------'
DB 0AH,0DH,'1.PLAY THE GAME'
DB 0AH,0DH,'2.THE KEY OF THE GAME'
DB 0AH,0DH,'3.EXIT'
DB 0AH,0DH,'YOUR CHOOSE:',24H
S2 DB 0AH,0DH,'INPUT ERROR',24H
S3 DB 0AH,0DH,'THE LEVEL(1-10)',24H
SET DB ?
S4 DB 0AH,0DH,'GREAT!!!!!!!!!!!',24H
S5 DB 0AH,0DH,'GOOD,BUT IT HAS A BETTER WAY!',24H
S6 DB 0AH,0DH,'DO YOU REALLY GIVE UP?(Y/N)',24H
LEVEL DB ?
S7 DB 'DO YOU LIKE TO PLAY AGAIN?(Y/N)',24H
STACK1 DB 11 DUP(?)
STACK2 DB 11 DUP(?)
STACK3 DB 11 DUP(?)
TOP1 DB ?
TOP2 DB ?
TOP3 DB ?
CHOOSE1 DB ?
CHOOSE2 DB ?
STEP1 DB ?
STEP2 DB ?
ONE DB ?
TWO DB ?
THREE DB ?
COUNT DB ?
FAIT DB ?
COLOR DB ?
XUAN DB ?
PRESS DB ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
MAIN PROC FAR
PUSH DS
MOV AX,DATA
MOV DS,AX
XOR AX,AX
PUSH AX
INPUT:
CALL BACKGROUND
CMP SET,'1'
JZ SET1
CMP SET,'2'
JZ SET2
CMP SET,'3'
JZ SET3
MOV DX,OFFSET S2
MOV AH,09H
INT 21H
MOV AH,01H
INT 21H
JMP INPUT
SET1:
MOV LEVEL,1
CALL PLAYGAME
MOV DX,OFFSET S7
CALL CLEAR
MOV AH,09H
INT 21H
MOV AH,01H
INT 21H
CMP AL,'Y'
JZ SET1
JMP INPUT
SET2:
CALL KEYGAME
JMP INPUT
SET3:
CALL CLEAR
RET
MAIN ENDP
BACKGROUND PROC NEAR
PUSH DX
PUSH AX
CALL CLEAR
LEA DX,S1
MOV AH,09H
INT 21H
MOV AH,01H
INT 21H
MOV SET,AL
POP AX
POP DX
RET
BACKGROUND ENDP
CLEAR PROC NEAR
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV AH,08H
INT 10H
MOV BH,AH
MOV AX,0600H
MOV CX,0000
MOV DX,184FH
INT 10H
MOV AH,02H
MOV BX,0
MOV DX,0
INT 10H
POP DX
POP CX
POP BX
POP AX
RET
CLEAR ENDP
PLAYGAME PROC NEAR
PUSH AX
PUSH CX
PUSH DX
GAME:
MOV SI,1
MOV AL,LEVEL
MOV DL,AL
INC DX
XOR DH,DH
INIT1:
MOV STACK1[SI],AL
MOV FAIT,' '
DEC AL
INC SI
CMP SI,DX
JNE INIT1
MOV AL,LEVEL
MOV TOP1,AL
MOV TOP2,0
MOV TOP3,0
MOV CHOOSE1,1
MOV CHOOSE2,1
MOV STEP1,0
PLAY1:MOV AL,CHOOSE2
MOV CHOOSE1,AL
CALL MOVE1
CMP FAIT,'F'
JZ FAIL
CMP CHOOSE1,1
JZ F1
CMP CHOOSE1,2
JZ F2
CALL FROM3
JMP TO
FAIL: JMP END1
F1:
CALL FROM1
JMP TO
F2:
CALL FROM2
TO:
CMP CHOOSE2,1
JZ T1
CMP CHOOSE2,2
JZ T2
CALL TO3
JMP COMP
T1:
CALL TO1
JMP COMP
T2:
CALL TO2
COMP:
CMP TOP3,0
JZ PLAY1
MOV CX,WORD PTR LEVEL
XOR CH,CH
MOV SI,1
CMPE:
CMP STACK3[SI],CL
JNZ PLAY1
INC SI
LOOP CMPE
MOV STEP2,0
MOV PRESS,1
CALL HANIO1
MOV AL,STEP2
CMP STEP1,AL
JNA GREAT
MOV DX,OFFSET S5
MOV AH,09H
INT 21H
JMP END2
GREAT:
MOV DX,OFFSET S4
MOV AH,09H
INT 21H
END2:
MOV AH,01H
INT 21H
CMP LEVEL,10
JE END1
INC LEVEL
JMP GAME
END1:
POP DX
POP CX
POP AX
RET
PLAYGAME ENDP
FROM1 PROC NEAR
MOV SI,WORD PTR TOP1
AND SI,00FFH
MOV AL,STACK1[SI]
MOV XUAN,AL
DEC TOP1
RET
FROM1 ENDP
FROM2 PROC NEAR
MOV SI,WORD PTR TOP2
AND SI,00FFH
MOV AL,STACK2[SI]
MOV XUAN,AL
DEC TOP2
RET
FROM2 ENDP
FROM3 PROC NEAR
MOV SI,WORD PTR TOP3
AND SI,00FFH
MOV AL,STACK3[SI]
MOV XUAN,AL
DEC TOP3
RET
FROM3 ENDP
TO1 PROC NEAR
MOV DI,WORD PTR TOP1
AND DI,00FFH
INC DI
MOV AL,XUAN
MOV STACK1[DI],AL
INC TOP1
INC STEP1
RET
TO1 ENDP
TO2 PROC NEAR
MOV DI,WORD PTR TOP2
AND DI,00FFH
INC DI
MOV AL,XUAN
MOV STACK2[DI],AL
INC TOP2
INC STEP1
RET
TO2 ENDP
TO3 PROC NEAR
MOV DI,WORD PTR TOP3
AND DI,00FFH
INC DI
MOV AL,XUAN
MOV STACK3[DI],AL
INC TOP3
INC STEP1
RET
TO3 ENDP
MOVE1 PROC NEAR
CALL CLEAR
MOV AH,0FH
INT 10H
PUSH AX
CALL B10MODE
WAITIN:
CALL C10DISPL1
MOV AH,10H
INT 16H
CMP AH,4BH
JE LEFT
CMP AH,4DH
JE RIGHT
CMP AH,48H
JE UP
JMP GAMEOVER
LEFT:
MOV BL,CHOOSE1
DEC CHOOSE1
CMP CHOOSE1,0
JE TURN3
CMP CHOOSE1,1
JE CHA1
CMP CHOOSE1,2
JE CHA2
H1:
CMP DL,0
JZ HUIFU
JMP WAITIN
HUIFU:
MOV CHOOSE1,BL
JMP WAITIN
TURN3:
MOV CHOOSE1,3
MOV DL,TOP3
JMP H1
CHA1:
MOV DL,TOP1
JMP H1
CHA2:
MOV DL,TOP2
JMP H1
RIGHT:
MOV BL,CHOOSE1
INC CHOOSE1
CMP CHOOSE1,4
JE TURN1
CMP CHOOSE1,3
JE TURN3
CMP CHOOSE1,2
JE CHA2
JMP H1
TURN1:
MOV CHOOSE1,1
MOV DL,TOP1
JMP H1
UP:
CMP CHOOSE1,1
JE B1
CMP CHOOSE1,2
JE B2
MOV SI,WORD PTR TOP3
AND SI,00FFH
MOV DL,STACK3[SI]
MOV XUAN,DL
JMP WAITIN2
B1:
MOV SI,WORD PTR TOP1
AND SI,00FFH
MOV DL,STACK1[SI]
MOV XUAN,DL
JMP WAITIN2
B2:
MOV SI,WORD PTR TOP2
AND SI,00FFH
MOV DL,STACK2[SI]
MOV XUAN,DL
WAITIN2:
CALL C10DISPL1
MOV AL,CHOOSE1
MOV CHOOSE2,AL
MOV AH,10H
INT 16H
CMP AH,4BH
JZ LEFT2
CMP AH,4DH
JZ RIGHT2
JMP GAMEOVER
LEFT2:
DEC CHOOSE2
CMP CHOOSE2,0
JE W3
CMP CHOOSE2,1
JE W1
JMP W2
RIGHT2:
INC CHOOSE2
CMP CHOOSE2,3
JE W3
CMP CHOOSE2,4
JE W1
W2:
MOV CHOOSE2,2
CMP TOP2,0
JE MV
MOV SI,WORD PTR TOP2
AND SI,00FFH
MOV DL,XUAN
CMP DL,STACK2[SI]
JB MV
JMP WAITIN2
W3:
MOV CHOOSE2,3
CMP TOP3,0
JE MV
MOV SI,WORD PTR TOP3
AND SI,00FFH
MOV DL,XUAN
CMP DL,STACK3[SI]
JB MV
JMP WAITIN2
W1:
MOV CHOOSE2,1
CMP TOP1,0
JE MV
MOV SI,WORD PTR TOP1
AND SI,00FFH
MOV DL,XUAN
CMP DL,STACK1[SI]
JB MV
JMP WAITIN2
GAMEOVER:
MOV FAIT,'F'
MOV DL,FAIT
MOV AH,02H
INT 21H
MOV AH,01H
INT 21H
MV:
POP AX
MOV AH,00H
INT 10H
RET
MOVE1 ENDP
B10MODE PROC NEAR
MOV AX,0012H
INT 10H
MOV AH,0BH
MOV BX,0
INT 10H
RET
B10MODE ENDP
INITU PROC NEAR
MOV BX,00
MOV CX,40
MOV DX,330
C20:
MOV AH,0CH
MOV AL,0AH
INT 10H
INC CX
CMP CX,200
JNE C20
MOV CX,240
C30:
MOV AH,0CH
MOV AL,0AH
INT 10H
INC CX
CMP CX,400
JNE C30
MOV CX,440
C40:
MOV AH,0CH
MOV AL,0AH
INT 10H
INC CX
CMP CX,600
JNE C40
RET
INITU ENDP
C10DISPL1 PROC NEAR
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH SI
PUSH DI
CALL INITU
MOV CX,40
MOV DX,330
MOV BX,0
CMP TOP1,0
JZ D2
CALL DRAW1
D2:
MOV CX,240
MOV DX,330
CMP TOP2,0
JZ D3
CALL DRAW2
D3:
MOV CX,440
MOV DX,330
CMP TOP3,0
JZ OK
CALL DRAW3
OK:
POP DI
POP SI
POP DX
POP CX
POP BX
POP AX
RET
C10DISPL1 ENDP
DRAW1 PROC NEAR
MOV DI,WORD PTR TOP1
AND DI,00FFH
MOV SI,0
CMP TOP1,1
JZ CD1
DRAW11:
INC SI
MOV AX,10
SUB AL,STACK1[SI]
PUSH BX
PUSH DX
MOV BX,5
MUL BX
POP DX
POP BX
ADD AX,40
MOV CX,AX
MOV COUNT,28
L1:
PUSH CX
LINE1:
MOV AX,0C0AH
INT 10H
INC CX
MOV AX,10
SUB AL,STACK1[SI]
PUSH BX
PUSH DX
MOV BX,5
MUL BX
MOV BX,200
XCHG AX,BX
SUB AX,BX
POP DX
POP BX
CMP CX,AX
JB LINE1
POP CX
DEC DX
DEC COUNT
CMP COUNT,0
JNZ L1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -