📄 work2.asm
字号:
DATA SEGMENT
LEN DB 0CH
POINTSX DB 46,45,44,43,42,41,40,39,38,37,36,35,34,33,86 DUP(0)
POINTSY DB 14 DUP(12),86 DUP(0)
DIR DB 00H
UDIR DB 01H
FOODX DB 40H
FOODY DB 06H
MESSAGE1 DB "---GAME OVER---","$"
MESSAGE2 DB "CONGRATULATIONS","$"
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
AND AX,0000H
AND BX,0000H
AND CX,0000H
AND DX,0000H
MOV AX,DATA
MOV DS,AX
MOV AL,03H
MOV AH,00H
INT 10H
MOV AH,01H
MOV CX,1000H
INT 10H
L2: JMP SCREEM
RE: MOV CX,0FFFH
L3: MOV DI,CX
MOV CX,02FFH
L5: MOV AH,01H ;;WAITING FOR INPUT
INT 16H
JZ L7
L6: MOV AH,00H ;;GET THE INPUT
INT 16H
CMP AH,72
JNZ R1
MOV DL,02H
MOV DH,03H
JMP R4
R1: CMP AH,80
JNZ R2
MOV DL,03H
MOV DH,02H
JMP R4
R2: CMP AH,75
JNZ R3
MOV DL,01H
MOV DH,00H
JMP R4
R3: CMP AH,77
JNZ L7
MOV DL,00H
MOV DH,01H
R4: CMP DL,[UDIR] ;;IS THE OPPOSITE?
JZ L7
MOV [DIR],DL
MOV [UDIR],DH
JMP L8
L7: LOOP L5
MOV CX,DI
LOOP L3
L8: AND CX,0000H ;;CHANG THE BODY
MOV CL,[LEN]
ADD CX,2
L4: DEC CX
MOV SI,CX
MOV AL,[SI+POINTSY]
INC SI
MOV [SI+POINTSY],AL
DEC SI
MOV AL,[SI+POINTSX]
INC SI
MOV [SI+POINTSX],AL
INC CX
LOOP L4
MOV AL,[DIR] ;;CHANGE THE HEAD
MOV AH,AL
MOV BL,[POINTSX]
MOV BH,[POINTSY]
AND AL,02H
JZ D3
AND AH,01H
JNZ D2
D1: DEC BH
JMP D6
D2: INC BH
JMP D6
D3: AND AH,01H
JZ D5
D4: DEC BL
JMP D6
D5: INC BL
D6: CMP BL,0 ;;ACROSS THE LIMIT
JL Y1
CMP BL,79
JA Y2
CMP BH,0
JL Y3
CMP BH,24
JA Y4
JMP Y5
Y1: MOV BL,79
JMP Y5
Y2: MOV BL,0
JMP Y5
Y3: MOV BH,24
JMP Y5
Y4: MOV BH,0
JMP Y5
Y5: AND CX,0000H ;;CHECK HEAD-BODY
MOV CL,[LEN]
INC CX
D7: MOV SI,CX
CMP BL,[SI+POINTSX]
JNZ D9
D8: CMP BH,[SI+POINTSY]
JZ M1
D9: LOOP D7
CMP BL,[FOODX] ;;CHECK FOR FOOD
JNZ D10
CMP BH,[FOODY]
JNZ D10 ;;NOTHING
MOV CL,[LEN] ;;FIND FOOD
INC CL
CMP CL,30
JZ M2 ;;CHECK FOR VICTORY
MOV [LEN],CL ;;CHANG THE FOOD
AND AX,0000H
MOV AL,[FOODX]
ADD AL,BL
MOV DL,80
DIV DL
MOV [FOODX],AH
AND AX,0000H
MOV AL,[FOODY]
ADD AL,BH
MOV DL,25
DIV DL
MOV [FOODY],AH
D10:MOV [POINTSX],BL ;;THE HEAD
MOV [POINTSY],BH
JMP L2
SCREEM: ;;PRINT ON SCREEM
MOV AL,0
MOV BH,16H
MOV CH,0
MOV CL,0
MOV DH,24
MOV DL,79
MOV AH,6
INT 10H
MOV DH,[FOODY] ;;PRINT THE FOOD
MOV DL,[FOODX]
MOV BH,00H
MOV AH,02H
INT 10H
MOV AL,'o'
MOV BL,16H
MOV CX,0001H
MOV AH,09H
INT 10H
MOV DH,[POINTSY] ;;PRINT THE HEAD
MOV DL,[POINTSX]
MOV BH,00H
MOV AH,02H
INT 10H
MOV AL,'#'
MOV BL,16H
MOV CX,0001H
MOV AH,09H
INT 10H
AND CX,0000H ;;PRINT THE TAIL
MOV CL,[LEN]
MOV SI,CX
INC SI
MOV DH,[SI+POINTSY]
MOV DL,[SI+POINTSX]
MOV BH,00H
MOV AH,02H
INT 10H
MOV AL,'-'
MOV BL,16H
MOV CX,0001H
MOV AH,09H
INT 10H
MOV CX,0000H ;;PRINT THE BODY
MOV CL,[LEN]
L1: MOV SI,CX
MOV DH,[SI+POINTSY]
MOV DL,[SI+POINTSX]
MOV BH,00H
MOV AH,02H
INT 10H
MOV DI,CX
MOV AL,'='
MOV BL,16H
MOV CX,0001H
MOV AH,09H
INT 10H
MOV CX,DI
LOOP L1
JMP RE
M1: MOV AL,0 ;;GAME OVER
MOV BH,16H
MOV CH,0
MOV CL,0
MOV DH,24
MOV DL,79
MOV AH,6
INT 10H
MOV DH,12
MOV DL,33
MOV BH,00H
MOV AH,02H
INT 10H
MOV DX,OFFSET MESSAGE1
MOV AH,9
INT 21H
JMP EN
M2: MOV AL,0 ;;VICTORY
MOV BH,16H
MOV CH,0
MOV CL,0
MOV DH,24
MOV DL,79
MOV AH,6
INT 10H
MOV DH,12
MOV DL,33
MOV BH,00H
MOV AH,02H
INT 10H
MOV DX,OFFSET MESSAGE2
MOV AH,9
INT 21H
;;CONTROL THE "PRESS ANY KEY TO CONTINUE"
EN: MOV DH,24
MOV DL,79
MOV BH,00H
MOV AH,02H
INT 10H
MOV AH,4CH
INT 21H
CODE ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -