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

📄 park13.asm

📁 一个汇编编写的花园寻宝游戏
💻 ASM
📖 第 1 页 / 共 3 页
字号:
	jnz	back07
;--------------------------------------------------------
mov	cx,x
	inc	cx
	inc	cx
	inc	cx	
	inc	cx
	inc	cx ;1 lie	
	
	mov	dx,y
	inc	dx
	inc	dx
	inc	dx
	inc	dx
	inc	dx
	inc	dx
	inc	dx
	inc	dx
	inc	dx
	inc	dx
	inc	dx	;7 hang
	
	mov	di,0
	mov	si,0

back08:	
	mov	ax,gold_color	           ;gold_color
	mov	ah,0ch
	mov	bh,0
	int	10h
	inc	di
	inc	cx
	cmp	di,8	
	jnz	back08
;--------------------------------------------------------
mov	cx,x
	inc	cx
	inc	cx
	inc	cx
	inc	cx	
	inc	cx
	inc	cx ;1 lie	
	
	mov	dx,y
	inc	dx
	inc	dx
	inc	dx
	inc	dx
	inc	dx
	inc	dx
	inc	dx
	inc	dx
	inc	dx
	inc	dx
	inc	dx
	inc	dx	;7 hang
	
	mov	di,0
	mov	si,0

back09:	
	mov	ax,gold_color	           ;gold_color
	mov	ah,0ch
	mov	bh,0
	int	10h
	inc	di
	inc	cx
	cmp	di,6	
	jnz	back09
;--------------------------------------------------------
mov	cx,x
	inc	cx
	inc	cx
	inc	cx
	inc	cx
	inc	cx	
	inc	cx
	inc	cx ;1 lie	
	
	mov	dx,y
	inc	dx
	inc	dx
	inc	dx
	inc	dx
	inc	dx
	inc	dx
	inc	dx
	inc	dx
	inc	dx
	inc	dx
	inc	dx
	inc	dx
	inc	dx	;7 hang
	
	mov	di,0
	mov	si,0

back10:	
	mov	ax,gold_color	           ;gold_color
	mov	ah,0ch
	mov	bh,0
	int	10h
	inc	di
	inc	cx
	cmp	di,4	
	jnz	back10
;--------------------------------------------------------
mov	cx,x
	inc	cx
	inc	cx
	inc	cx
	inc	cx
	inc	cx
	inc	cx	
	inc	cx
	inc	cx ;1 lie	
	
	mov	dx,y
	inc	dx
	inc	dx
	inc	dx
	inc	dx
	inc	dx
	inc	dx
	inc	dx
	inc	dx
	inc	dx
	inc	dx
	inc	dx
	inc	dx
	inc	dx
	inc	dx	;7 hang
	
	mov	di,0
	mov	si,0

back11:	
	mov	ax,gold_color	           ;gold_color
	mov	ah,0ch
	mov	bh,0
	int	10h
	inc	di
	inc	cx
	cmp	di,2	
	jnz	back11
	pop	si
	pop	di
	pop	dx
	pop	cx
	pop	bx
	pop	ax
	ret
gold	endp

;********************************************************************************************
;********************画陷阱******************************************************************************



hole	proc	near
	push	ax
	push	bx
	push	cx
	push	dx

	mov	cx,x
	inc	cx
	mov	dx,y
	inc	dx
	push	di
	push	si
	mov	di,0
	mov	si,0

back_12:	
	mov	ax,hole_color	           ;color
	mov	ah,0ch
	mov	bh,0
	int	10h
	inc	di
	inc	cx
	cmp	di,16	;16 is the width of block
	jnz	back_12
	inc	si
	inc	dx
	mov	cx,x
	inc	cx
	mov	di,0
	cmp	si,16
	jnz	back_12
	pop	si
	pop	di


	mov	cx,x
	inc	cx
	inc	cx
	inc	cx
	mov	dx,y
	inc	dx
	inc	dx
	inc	dx	
	push	di
	push	si
	mov	di,0
	mov	si,0

back_13:	
	mov	ax,0	           ;color
	mov	ah,0ch
	mov	bh,0
	int	10h
	inc	di
	inc	cx
	cmp	di,12
	jnz	back_13	
	inc	si
	inc	dx
	mov	cx,x
	inc	cx
	inc	cx
	inc	cx
	mov	di,0
	cmp	si,12
	jnz	back_13
	pop	si
	pop	di

	pop	dx
	pop	cx
	pop	bx
	pop	ax
	ret
hole	endp
;***************************************************************************
;******************************画a方块*******************************************
recta	proc	near
	push	ax
	push	bx
	push	cx
	push	dx

	mov	cx,a_x
	inc	cx
	mov	dx,a_y
	inc	dx
	push	di
	push	si
	mov	di,0
	mov	si,0

back_a:	
	mov	ax,a_color	           ;color
	mov	ah,0ch
	mov	bh,0
	int	10h
	inc	di
	inc	cx
	cmp	di,16	;16 is the width of block
	jnz	back_a
	inc	si
	inc	dx
	mov	cx,a_x
	inc	cx
	mov	di,0
	cmp	si,16
	jnz	back_a
	pop	si
	pop	di
	pop	dx
	pop	cx
	pop	bx
	pop	ax
	ret
recta	endp
;********************************************************************************
;******************************画b方块**************************************************
rectb	proc	near
	push	ax
	push	bx
	push	cx
	push	dx

	mov	cx,b_x
	inc	cx
	mov	dx,b_y
	inc	dx
	push	di
	push	si
	mov	di,0
	mov	si,0

back_b:	
	mov	ax,b_color	           ;color
	mov	ah,0ch
	mov	bh,0
	int	10h
	inc	di
	inc	cx
	cmp	di,16	;16 is the width of block
	jnz	back_b
	inc	si
	inc	dx
	mov	cx,b_x
	inc	cx
	mov	di,0
	cmp	si,16
	jnz	back_b
	pop	si
	pop	di
	pop	dx
	pop	cx
	pop	bx
	pop	ax
	ret
rectb	endp
;*******************************************************************************
;******************************画my方块*********************************************
rectmy	proc	near
	push	ax
	push	bx
	push	cx
	push	dx

	mov	cx,my_x
	inc	cx
	mov	dx,my_y
	inc	dx
	push	di
	push	si
	mov	di,0
	mov	si,0

back_my:	
	mov	ax,my_color	           ;color
	mov	ah,0ch
	mov	bh,0
	int	10h
	inc	di
	inc	cx
	cmp	di,16	;16 is the width of block
	jnz	back_my
	inc	si
	inc	dx
	mov	cx,my_x
	inc	cx
	mov	di,0
	cmp	si,16
	jnz	back_my
	pop	si
	pop	di
	pop	dx
	pop	cx
	pop	bx
	pop	ax
	ret
rectmy	endp
;********************************************************************************
;*************************操纵方块左移处理*******************************************************
mov_l	proc	near
	push	cx
	push	my_color
	mov	cx,0
	mov	my_color,cx
	call	rectmy
	mov	cx,my_x
	sub	cx,my_size
	mov	my_x,cx
	pop	my_color
	pop	cx
	ret
mov_l	endp
;********************************************************************************
;*************************操纵方块右移处理*******************************************************
mov_r	proc	near
	push	cx
	push	my_color
	mov	cx,0
	mov	my_color,cx
	call	rectmy
	mov	cx,my_x
	add	cx,my_size
	mov	my_x,cx
	pop	my_color
	pop	cx
	ret
mov_r	endp
;********************************************************************************
;*************************操纵方块上移处理*******************************************************
mov_u	proc	near
	push	cx
	push	my_color
	mov	cx,0
	mov	my_color,cx
	call	rectmy
	mov	cx,my_y
	sub	cx,my_size
	mov	my_y,cx
	pop	my_color
	pop	cx
	ret
mov_u	endp
;********************************************************************************
;*************************操纵方块下移处理*******************************************************
mov_d	proc	near
	push	cx
	push	my_color
	mov	cx,0
	mov	my_color,cx
	call	rectmy                         ;在原来的地方重画
	mov	cx,my_y
	add	cx,my_size
	mov	my_y,cx
	pop	my_color
	pop	cx
	ret
mov_d	endp

;********************************************************************************
;*************************设置写模式*******************************************************
set_write_mode	PROC	NEAR
	PUSH	AX
	MOV	DX,3ceh
	MOV	AL,5
	OUT	DX,AL
	JMP	SHORT $+2
	MOV	DX,3cfh
	POP	AX
	OUT	DX,AL
	JMP	SHORT $+2
;set bit mask register to default setting
	MOV	DX,3ceh
	MOV	AL,8
	OUT	DX,AL
	JMP	SHORT $+2
	MOV	DX,3cfh
	MOV	AL,0ffh
	OUT	DX,AL
	JMP	SHORT $+2
	RET
set_write_mode	ENDP
;********************************************************************************
;*************************显示字符*******************************************************
show_char	PROC	NEAR
	MOV	AH,9
	MOV	BH,0
	MOV	CX,1
	INT	10h
	
	INC	DL
	MOV	AH,2
	MOV	BH,0
	INT	10h
	RET
show_char	ENDP
;********************************************************************************
;********************************************************************************
graphic_text	PROC	NEAR
	MOV	DH,[DI]
	INC	DI
	MOV	DL,[DI]
	MOV	start_col,DL
	MOV	AH,2
	MOV	BH,0
	INT	10h
	INC	DI
	MOV	BL,[DI]

char_write:
	INC	DI
	MOV	AL,[DI]
	CMP	AL,0ffh
	JE	bump_row
	CMP	AL,0
	JZ	end_text
	CALL	show_char
	JMP	char_write
end_text:
	RET
bump_row:
	INC	DH
	MOV	DL,start_col
	MOV	AH,2
	MOV	BH,0
	INT	10h
	JMP	char_write
graphic_text	ENDP
;********************************************************************************
;*************************填充区域内颜色*******************************************************
COARSE_FILL PROC NEAR
;在VGA640×480方式下,填充指定区域的程序模块
       PUSH      CX
	PUSH 		DX
	PUSH 		AX
	MOV 		AH,0FFH
	PUSH		AX
	CALL 		COARSE_ADD
              
	MOV 		CL,DH
	MOV 		CH,0
	PUSH 		CX
              
	MOV 		AX,DX
	MOV 		AH,0
	MOV 		CL,8
	MUL 		CL
              
	MOV 		DX,AX
	POP 		CX
	POP 		AX
OUTER:
	PUSH 		CX
	PUSH 		BX
INNER:
	CALL 		WRITE_PIX
	INC 		BX        
	LOOP 		INNER
              
	POP 		BX
	ADD 		BX,80
	POP 		CX
	DEC 		DX
	JNZ 		OUTER
              
	POP 		AX
	POP 		DX
	POP 		CX
	RET
COARSE_FILL ENDP
;********************************************************************************
;*******************************************************************************
COARSE_ADD PROC NEAR
              PUSH      AX
              PUSH      DX
              PUSH      CX
              MOV       AX,CX
              MOV       AH,0
              MOV       CX,640
              MUL       CX
              
              POP       CX
              POP       DX
              
              MOV       CL,CH
              MOV       CH,0
              ADD       AX,CX
              MOV       BX,AX
              POP       AX
              RET
COARSE_ADD ENDP
;********************************************************************************
;*************************写象素*******************************************************
WRITE_PIX PROC NEAR
	PUSH DX
	PUSH AX
	PUSH AX
	MOV DX,3CEH
	MOV AL,8
	OUT DX,AL
	JMP SHORT $+2
	INC DX
	POP AX
	MOV AL,AH
	OUT DX,AL
	JMP SHORT $+2
	MOV AL,ES:[BX]
	POP AX
	MOV ES:[BX],AL
	POP DX
	RET
WRITE_PIX ENDP
;********************************************************************************
;********************************************************************************
data_normal	proc	near
	mov	dx,03ceh
	mov	al,3
	out	dx,al
	jmp	short $+2
	inc	dx
	mov	al,00000000b
	out	dx,al
	jmp	short	$+2
	ret
data_normal	endp

;********************************************************************************
;*************************打印欢迎信息*******************************************************
welcome_screen	 PROC NEAR
              LEA       DI,wel_ms
              CALL      graphic_text
              LEA       DI,ins_ms
              CALL      graphic_text 
              ret             
welcome_screen	ENDP

;********************************************************************************
;*************************打印游戏结束信息*******************************************************
gameover_screen	 PROC NEAR
              LEA       DI,gameover_ms
              CALL      graphic_text
              ret             
gameover_screen	ENDP

;********************************************************************************
;*************************打印胜利信息*******************************************************
youwin_screen	 PROC NEAR
              LEA       DI,youwin_ms
              CALL      graphic_text
              ret             
youwin_screen	ENDP
;********************************************************************************
;*************************画frame*******************************************************

frame	PROC	NEAR	;used to draw a frame
	MOV	CX,f_l_c
	MOV	DX,f_u_r
back1:	MOV	AX,f_color
	MOV	AH,0ch
	MOV	BH,0
	INT	10h
	INC	CX
	CMP	CX,f_r_c
	JNZ	back1	;draw up line
	
	MOV	CX,f_l_c
	MOV	DX,f_u_r
back2:	MOV	AX,f_color
	MOV	AH,0ch
	MOV	BH,0
	INT	10h
	INC	DX
	CMP	DX,f_d_r
	JNZ	back2	;draw left line_1

	MOV	CX,f_r_c
	MOV	DX,f_u_r
back3:	MOV	AX,f_color
	MOV	AH,0ch
	MOV	BH,0
	INT	10h
	INC	DX
	CMP	DX,f_d_r
	JNZ	back3	;draw right line_1
	
	MOV	CX,f_l_c
	MOV	DX,f_d_r
back4:	MOV	AX,f_color
	MOV	AH,0ch
	MOV	BH,0
	INT	10h
	INC	CX
	CMP	CX,f_r_c
	JNZ	back4	;draw down line_1

	RET
frame	ENDP
;---------------------------------------------------
	END	start

⌨️ 快捷键说明

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