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

📄 snake.asm

📁 这是一个贪吃蛇游戏的程序代码
💻 ASM
字号:
DATA SEGMENT
SSPEED	DB	'SPEED:',0DH,0AH,'$'
SSPEEDH	DB	'1.HIGH',0DH,0AH,'$'
SSPEEDN	DB	'2.NORMAL',0DH,0AH,'$'
SSPEEDL	DB	'3.LOW',0DH,0AH,'$'
SSPEEDH1	DB	'HIGH',0DH,0AH,'$'
SSPEEDN1	DB	'NORMAL',0DH,0AH,'$'
SSPEEDL1	DB	'LOW',0DH,0AH,'$'
DIRECTIONL	DB	'LEFT:A',0DH,0AH,'$'
DIRECTIONR	DB	'RIGHT:D',0DH,0AH,'$'
DIRECTIONU	DB	'UP:W',0DH,0AH,'$'
DIRECTIOND	DB	'DOWN:S',0DH,0AH,'$'
AUTHOR1	DB	'AUTHOR:',0DH,0AH,'$'
AUTHOR2	DB	'ZPQ',0DH,0AH,'$'
BETA	DB	'BETA2.0',0DH,0AH,'$'
SPEED	DB	?
EMP1	DB	50 DUP(?)
SNAKE	DB	9,9,12,9,15,9,18,9,21,9
	DB	24,9,27,9,30,9,33,9,36,9
	DB	39,9,42,9,45,9,48,9,51,9
EMP2	DB	500 DUP(?)
DATA ENDS

STACK SEGMENT	STACK
STACK ENDS

CODE SEGMENT
    ASSUME CS:CODE,DS:DATA,SS:STACK

CLEAR	PROC	NEAR	;清屏
	PUSH	AX
	PUSH	BX
	PUSH	CX
	PUSH	DX
	
	MOV	AH,6
	MOV	AL,7
	MOV	CH,0
	MOV	CL,0
	MOV	DH,200
	MOV	DL,200
	MOV	BH,0
	INT	10H
	
	POP	DX
	POP	CX
	POP	BX
	POP	AX
	RET
CLEAR	ENDP

POINT	PROC	NEAR	;画点
	PUSH	AX
	PUSH	BX
	PUSH	CX
	PUSH	DX
	
	DEC CX
	DEC	DX	
	MOV	AL,1
	MOV	AH,0CH
	INT	10H
	
	INC	CX	
	MOV	AL,1
	MOV	AH,0CH
	INT	10H
	
	INC	CX
	MOV	AL,1
	MOV	AH,0CH
	INT	10H
	
	INC	DX
	MOV	AL,1
	MOV	AH,0CH
	INT	10H
	
	DEC	CX	
	MOV	AL,3
	MOV	AH,0CH
	INT	10H
	
	DEC	CX	
	MOV	AL,3
	MOV	AH,0CH
	INT	10H
	
	INC	DX
	MOV	AL,3
	MOV	AH,0CH
	INT	10H
	
	INC	CX	
	MOV	AL,3
	MOV	AH,0CH
	INT	10H
	
	INC	CX	
	MOV	AL,3
	MOV	AH,0CH
	INT	10H
			
	POP	DX
	POP	CX
	POP	BX
	POP	AX
	RET
POINT	ENDP

POINT1	PROC	NEAR	;画框架点
	PUSH	AX
	PUSH	BX
	PUSH	CX
	PUSH	DX
	
	DEC CX
	DEC	DX	
	MOV	AL,2
	MOV	AH,0CH
	INT	10H
	
	INC	CX	
	MOV	AL,2
	MOV	AH,0CH
	INT	10H
	
	INC	CX
	MOV	AL,2
	MOV	AH,0CH
	INT	10H
	
	INC	DX
	MOV	AL,2
	MOV	AH,0CH
	INT	10H
	
	DEC	CX	
	MOV	AL,2
	MOV	AH,0CH
	INT	10H
	
	DEC	CX	
	MOV	AL,2
	MOV	AH,0CH
	INT	10H
	
	INC	DX
	MOV	AL,2
	MOV	AH,0CH
	INT	10H
	
	INC	CX	
	MOV	AL,2
	MOV	AH,0CH
	INT	10H
	
	INC	CX	
	MOV	AL,2
	MOV	AH,0CH
	INT	10H
			
	POP	DX
	POP	CX
	POP	BX
	POP	AX
	RET
POINT1	ENDP

DPOINT	PROC	NEAR	;清点
	PUSH	AX
	PUSH	BX
	PUSH	CX
	PUSH	DX
	
	DEC CX
	DEC	DX	
	MOV	AL,0
	MOV	AH,0CH
	INT	10H
	
	INC	CX	
	MOV	AL,0
	MOV	AH,0CH
	INT	10H
	
	INC	CX
	MOV	AL,0
	MOV	AH,0CH
	INT	10H
	
	INC	DX
	MOV	AL,0
	MOV	AH,0CH
	INT	10H
	
	DEC	CX	
	MOV	AL,0
	MOV	AH,0CH
	INT	10H
	
	DEC	CX	
	MOV	AL,0
	MOV	AH,0CH
	INT	10H
	
	INC	DX
	MOV	AL,0
	MOV	AH,0CH
	INT	10H
	
	INC	CX	
	MOV	AL,0
	MOV	AH,0CH
	INT	10H
	
	INC	CX	
	MOV	AL,0
	MOV	AH,0CH
	INT	10H
			
	POP	DX
	POP	CX
	POP	BX
	POP	AX
	RET
DPOINT	ENDP

READY	PROC	NEAR	;画框架
	PUSH	AX
	PUSH	BX
	PUSH	CX
	PUSH	DX
	
	MOV	BX,50
	MOV	CX,6
	MOV	DX,6

READY1:
	CALL	POINT1
	INC	CX
	INC	CX
	INC	CX
	DEC	BX
	JNZ	READY1
	
	MOV	BX,50
	
READY2:
	CALL	POINT1
	INC	DX
	INC	DX
	INC	DX
	DEC	BX
	JNZ	READY2
	
	MOV	BX,50
	
READY3:
	CALL	POINT1
	DEC	CX
	DEC	CX
	DEC	CX
	DEC	BX
	JNZ	READY3
	
	MOV	BX,50
	
READY4:
	CALL	POINT1
	DEC	DX
	DEC	DX
	DEC	DX
	DEC	BX
	JNZ	READY4
	
	MOV	BX,30
	MOV	CX,180
	MOV	DX,6
	
READY5:
	CALL	POINT1
	INC	CX
	INC	CX
	INC	CX
	DEC	BX
	JNZ	READY5
	
	MOV	BX,40
	
READY6:
	CALL	POINT1
	INC	DX
	INC	DX
	INC	DX
	DEC	BX
	JNZ	READY6
	
	MOV	BX,30
	
READY7:
	CALL	POINT1
	DEC	CX
	DEC	CX
	DEC	CX
	DEC	BX
	JNZ	READY7
	
	MOV	BX,40
	
READY8:
	CALL	POINT1
	DEC	DX
	DEC	DX
	DEC	DX
	DEC	BX
	JNZ	READY8
	
	POP	DX
	POP	CX
	POP	BX	
	POP	AX	
	RET
READY	ENDP

DRAW	PROC	NEAR	;画蛇
	PUSH	BX
	PUSH	CX
	PUSH	DX
	PUSH	SI
	PUSH	DI
	
	DEC	SI
	DEC	SI
	MOV	CL,[SI]
	XOR	CH,CH
	INC	SI
	MOV	DL,[SI]
	XOR	DH,DH
	DEC	SI
	CALL	DPOINT	
	INC	SI
	INC	SI
	
DRAW1:
	MOV	CL,[SI]
	XOR	CH,CH
	INC	SI
	MOV	DL,[SI]
	XOR	DH,DH
	INC	SI
	CALL	POINT
	DEC	BL
	JNZ	DRAW1
	POP	DI
	POP	SI
	POP	DX
	POP	CX
	POP	BX	
	RET
DRAW	ENDP

MOVE	PROC	NEAR	;移动
	INC	SI
	INC	SI
	CMP	BH,'a'
	JZ	MOVERL
	CMP	BH,'d'
	JZ	MOVERL
	CMP	BH,'w'
	JZ	MOVEUD
	CMP	BH,'s'
	JZ	MOVEUD
	
MOVERL:
	CMP	AL,'w'
	JZ	MOVEU
	CMP	AL,'s'
	JZ	MOVED
	CMP	BH,'a'
	JZ	MOVEL
	CMP	BH,'d'
	JZ	MOVER
	
MOVEUD:
	CMP	AL,'a'
	JZ	MOVEL
	CMP	AL,'d'
	JZ	MOVER
	CMP	BH,'w'
	JZ	MOVEU
	CMP	BH,'s'
	JZ	MOVED
	
MOVEL:
	MOV	AH,[DI]
	SUB	AH,3
	INC	DI
	MOV	AL,[DI]
	INC	DI
	MOV	[DI],AH
	INC	DI
	MOV	[DI],AL
	DEC	DI
	MOV	BH,'a'
	JMP	MOVEEND
	
MOVER:
	MOV	AH,[DI]
	ADD	AH,3
	INC	DI
	MOV	AL,[DI]
	INC	DI
	MOV	[DI],AH
	INC	DI
	MOV	[DI],AL
	DEC	DI
	MOV	BH,'d'
	JMP	MOVEEND	
	
MOVEU:
	MOV	AH,[DI]
	INC	DI
	MOV	AL,[DI]
	SUB	AL,3
	INC	DI
	MOV	[DI],AH
	INC	DI
	MOV	[DI],AL
	DEC	DI
	MOV	BH,'w'
	JMP	MOVEEND
	
MOVED:
	MOV	AH,[DI]
	INC	DI
	MOV	AL,[DI]
	ADD	AL,3
	INC	DI
	MOV	[DI],AH
	INC	DI
	MOV	[DI],AL
	DEC	DI
	MOV	BH,'s'	
	JMP	MOVEEND
	
MOVEEND:
	RET	
MOVE	ENDP

RESET	PROC	NEAR	;移位
	PUSH	AX
	PUSH	BX
	PUSH	CX
	PUSH	DX
	PUSH	DI
	
	MOV	DI,SI
	DEC	DI
	DEC	DI
	MOV	DX,DI
	
RESET1:
	MOV	AL,[SI]
	MOV	[DI],AL
	INC	SI
	INC	DI
	MOV	AL,[SI]
	MOV	[DI],AL
	INC	SI
	INC	DI
	DEC	Bl
	JNZ	RESET1

RESET2:	
	MOV	SI,DX
	POP	DI
	DEC	DI
	DEC	DI
	POP	DX
	POP	CX
	POP	BX
	POP	AX	
	RET	
RESET	ENDP	
	
DELAY	PROC	NEAR	;延迟
	PUSH AX
	PUSH BX
	PUSH CX
	PUSH DX
 	LEA	BX,SPEED
    MOV	BX,[BX]	

	MOV AH,0
	INT 1AH
	ADD BX,DX
LOOP1:
	INT 1AH
	CMP DX,BX
	JNZ LOOP1
	
	POP DX
	POP CX
	POP BX
	POP AX	
	RET
DELAY ENDP	
	
RPOINT 	PROC 	NEAR		;随机点
	PUSH	AX
	PUSH	BX

	CMP	CH,1
	JNZ	RPOINTEND
	JMP RPOINT1

RSET:
	POP SI
	POP BX
	PUSH BX

RPOINT1:	
	MOV	AH,2CH
	INT	21H	
	MOV	CL,4
	
	MOV	AL,DH
	SHL	AX,CL
	AND	AH,0FH
	SHR	AL,CL
	AND	AL,0FH
	
	MOV	BL,DL
	SHL	BX,CL
	AND	BH,0FH
	SHR	BL,CL
	AND	BL,0FH
	
	ADD	AL,AH
	ADD	AL,AH
	MOV	CH,AL
	ADD	AL,CH
	ADD	AL,CH
	ADD	AL,CH
	ADD	AL,CH
	ADD	AL,CH
	MOV	CL,AL
	ADD	CL,21
	XOR	CH,CH
	
	ADD	BL,BH
	MOV	DH,BL
	ADD	BL,DH
	ADD	BL,DH
	ADD	BL,DH
	ADD	BL,DH
	ADD	BL,DH
	MOV	DL,BL
	ADD DL,21
	XOR	DH,DH	
	
	POP BX
	PUSH BX
	PUSH SI
	
RPOINT2:
	;MOV AH,[SI]
	;INC SI
	;MOV AL,[SI]
	;INC SI
	;CLC
	;CMP CL,AH	
	;JZ RSET
	;CLC
	;CMP DL,AL
	;JZ RSET
	;CLC
	DEC BL
	JNZ RPOINT2
	
	CALL	POINT	
	POP SI
	
RPOINTEND:
	POP	BX
	POP	AX
	MOV	CH,0
	RET
RPOINT ENDP 

EAT	PROC	NEAR
	PUSH	AX
	PUSH	BX
	PUSH	CX
	PUSH	DX
	PUSH	DI
	PUSH	SI

	MOV	AH,[DI]
	INC	DI
	MOV	AL,[DI]
	
	CMP	AH,CL	;蛇头位置跟随机点比较
	JNZ	EAT2
	CMP	AL,DL
	JNZ	EAT2

EAT1:			;吃掉
	POP	SI
	POP	DI
	POP	DX
	POP	CX
	POP	BX	
	
	CMP	BH,'a'
	JZ	EATL
	CMP	BH,'d'
	JZ	EATR
	CMP BH,'w'
	JZ	EATU
	CMP	BH,'s'
	JZ	EATD

EATL:
	MOV	AH,[DI]
	SUB	AH,3
	INC	DI
	MOV	AL,[DI]
	INC	DI
	MOV	[DI],AH
	INC	DI
	MOV	[DI],AL
	DEC DI
	JMP	EAT11
EATR:
	MOV	AH,[DI]
	ADD	AH,3
	INC	DI
	MOV	AL,[DI]
	INC	DI
	MOV	[DI],AH
	INC	DI
	MOV	[DI],AL
	DEC DI
	JMP	EAT11
EATU:
	MOV	AH,[DI]
	INC	DI
	MOV	AL,[DI]
	SUB	AL,3
	INC	DI
	MOV	[DI],AH
	INC	DI
	MOV	[DI],AL
	DEC DI
	JMP	EAT11
EATD:
	MOV	AH,[DI]
	INC	DI
	MOV	AL,[DI]
	ADD	AL,3
	INC	DI
	MOV	[DI],AH
	INC	DI
	MOV	[DI],AL
	DEC DI
	JMP	EAT11

EAT11:
	POP	AX
	INC	BL		;蛇长度+1
	MOV	CH,1
	RET

EAT2:	
	POP	SI
	POP	DI
	POP	DX
	POP	CX
	POP	BX
	POP	AX		;没吃掉
	RET	
EAT	ENDP

FAIL	PROC	NEAR	;失败
	PUSH	AX
	PUSH	BX
	PUSH	CX
	PUSH	DX
	PUSH	DI
	PUSH	SI

	MOV	AH,[DI]
	INC	DI
	MOV	AL,[DI]
	INC	DI
	CMP	AH,6
	JZ	FAIL2
	CMP	AH,156
	JZ	FAIL2
	CMP	AL,6
	JZ	FAIL2
	CMP	AL,156
	JZ	FAIL2

FAIL1:
	DEC	BL
	CMP	BL,0
	JZ FAILNEXT
	MOV	CH,[SI]
	INC	SI
	MOV	CL,[SI]
	INC	SI
	CMP	AH,CH
	JNZ	FAIL1
	CMP	AL,CL
	JNZ	FAIL1

FAIL2:
	POP	SI
	POP	DI
	POP	DX
	POP	AX
	POP	BX
	POP	AX	
    MOV AH,4CH
    INT 21H	

FAILNEXT:
	POP	SI
	POP	DI
	POP	DX
	POP	CX
	POP	BX
	POP	AX	
	RET
FAIL	ENDP

START:
    MOV AX,DATA
    MOV DS,AX
	
	LEA	BX,SPEED
	MOV	[BX],05FFH
	
	LEA	DX,SSPEED
	MOV	AH,09
	INT	21H
	
	LEA	DX,SSPEEDH
	MOV	AH,09
	INT	21H
	
	LEA	DX,SSPEEDN
	MOV	AH,09
	INT	21H
	
	LEA	DX,SSPEEDL
	MOV	AH,09
	INT	21H
	
	MOV	AH,1
	INT	21H
	CMP	AL,'1'
	JZ	SPEED1
	CMP	AL,'2'
	JZ	SPEED2
	CMP	AL,'3'
	JZ	SPEED3
	
SPEED1:
	MOV	[BX],1
	LEA DX,SSPEEDH1
	JMP	GAMENEXT
SPEED2:
	MOV	[BX],2
	LEA DX,SSPEEDN1
	JMP	GAMENEXT
SPEED3:
	MOV	[BX],3
	LEA DX,SSPEEDL1
	JMP	GAMENEXT
	
GAMENEXT:
	PUSH	DX
	
	MOV	AH,0
	MOV	AL,4
	INT	10H
	
	MOV	AH,0BH
	MOV	BH,0
	MOV	BL,1
	INT	10H
	
	MOV DH,3	;控制光标
	MOV DL,27
	MOV BH,0
	MOV AH,2
	INT 10H
	
	POP DX
	MOV	AH,09
	INT	21H
	
	MOV DH,2
	MOV DL,24
	MOV BH,0
	MOV AH,2
	INT 10H
	
	LEA DX,SSPEED
	MOV	AH,09
	INT	21H
	
	MOV DH,5
	MOV DL,24
	MOV BH,0
	MOV AH,2
	INT 10H
	
	LEA DX,DIRECTIONL
	MOV	AH,09
	INT	21H
	
	MOV DH,6
	MOV DL,24
	MOV BH,0
	MOV AH,2
	INT 10H
	
	LEA DX,DIRECTIONR
	MOV	AH,09
	INT	21H
	
	MOV DH,7
	MOV DL,24
	MOV BH,0
	MOV AH,2
	INT 10H
	
	LEA DX,DIRECTIONU
	MOV	AH,09
	INT	21H
	
	MOV DH,8
	MOV DL,24
	MOV BH,0
	MOV AH,2
	INT 10H
	
	LEA DX,DIRECTIOND
	MOV	AH,09
	INT	21H
	
	MOV DH,10
	MOV DL,24
	MOV BH,0
	MOV AH,2
	INT 10H
	
	LEA DX,AUTHOR1
	MOV	AH,09
	INT	21H
	
	MOV DH,11
	MOV DL,27
	MOV BH,0
	MOV AH,2
	INT 10H
	
	LEA DX,AUTHOR2
	MOV	AH,09
	INT	21H
	
	MOV DH,13
	MOV DL,24
	MOV BH,0
	MOV AH,2
	INT 10H
	
	LEA DX,BETA
	MOV	AH,09
	INT	21H
	
	LEA	SI,SNAKE
	MOV	DI,SI
	ADD	DI,28
	MOV	BL,15		;蛇的初始长度
	MOV	BH,'d'		;初始移动方向
	XOR	AL,AL
	MOV	CH,1		;随机点出现条件为CH=1
	CALL	READY
	CALL	DRAW
	
	CALL	DELAY
	CALL	DELAY
	CALL	DELAY
	CALL	DELAY
	CALL	DELAY
	CALL	DELAY
	CALL	DELAY
	CALL	DELAY
	CALL	DELAY
	CALL	DELAY
	CALL	DELAY
	CALL	DELAY
	CALL	DELAY
	CALL	DELAY
	CALL	DELAY
	CALL	DELAY
	CALL	DELAY
	CALL	DELAY
	CALL	DELAY
	CALL	DELAY
	CALL	DELAY
	CALL	DELAY
	CALL	DELAY
	CALL	DELAY
	
	
GAME:
	MOV	AH,0BH
	INT	21H	
	INC	AL
	JE	GAME1
	JNE	GAME2
	
GAME1:
	MOV	AH,08H
	INT	21H	
	CALL	MOVE
	CALL	DRAW
	CALL	RESET
	CALL	RPOINT
	CALL	EAT
	CALL	FAIL
	CALL	DELAY
	JMP	GAME
	
GAME2:
	CALL	MOVE
	CALL	DRAW
	CALL	RESET
	CALL	RPOINT
	CALL	EAT
	CALL	FAIL
	CALL	DELAY		
	JMP	GAME
	
LAST:	
    MOV AH,4CH
    INT 21H
CODE ENDS
    END START

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -