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

📄 park13.asm

📁 一个汇编编写的花园寻宝游戏
💻 ASM
📖 第 1 页 / 共 3 页
字号:
;键盘ascii标识
left	EQU	4bh
right	EQU	4dh
up	EQU	48h
down	EQU	50h

	.model	small

	.stack

	.data
;------------布局数组------------------------------------------------------
MS 	DB 1,1,1,1,1,1,1,1,1,2,2,1,1,1,1,1,1,1,1,3
	DB 1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
	DB 1,1,3,3,1,1,3,3,3,3,1,3,3,3,3,1,1,2,3,1
	DB 1,1,3,2,1,1,3,1,1,1,1,1,1,1,3,1,1,3,1,1
	DB 1,1,3,3,1,1,3,1,3,3,1,3,3,1,3,1,3,1,1,1
	DB 1,1,3,2,1,1,3,1,3,1,1,2,3,1,3,1,1,1,1,1
	DB 1,1,3,3,1,1,1,1,1,1,3,1,1,1,1,1,1,2,3,1
	DB 1,1,3,1,1,1,3,1,3,2,1,1,3,1,3,1,2,3,1,1
	DB 1,1,3,1,1,1,3,1,3,3,3,3,3,1,3,1,3,1,1,1
	DB 1,1,3,2,1,1,3,1,1,1,1,1,1,3,3,1,1,1,1,1
	DB 1,1,3,1,1,1,3,3,3,3,1,3,3,3,1,1,1,1,1,1
	DB 1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
	DB 1,1,1,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1
	DB 1,1,1,1,1,1,3,2,3,1,1,1,1,1,1,1,2,1,1,1
	DB 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,1,1
	DB 1,1,1,1,2,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1
	DB 1,1,3,1,2,1,1,1,1,3,1,1,2,2,2,1,1,3,1,1
	DB 1,1,3,3,3,3,3,1,3,3,3,3,3,3,3,3,3,3,1,1
	DB 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
	DB 1,1,1,1,1,1,1,2,1,1,3,3,1,1,1,1,1,1,1,1

  	
X 	DW 180       ;地图横坐标
Y 	DW 80	     ;地图纵坐标	
;---------------------------------------------------------------------------
wel_ms  DB       12
              DB        20
              DB        10000110b
              DB        'Welcome to park finding game:)',0ffh
		DB        'Game Writer:leaf young',0ffh
              DB        00h
;---------------------------------------------------------------------------
ins_ms	  DB    18
              DB        25 
		 DB        10000110b
              DB        'Please chose:',0ffh
              DB        'Press <Esc> to quit',0ffh
              DB         'Press <Enter> to start',0ffh
	      db         00h
;----------------------------------------------------------------------------
gameover_ms  DB       2
              DB        30
              DB        10000110b
              DB        'Game Over! :(',0ffh
		DB        'Press<Esc> to quit',0ffh
		DB        'Press<Enter> to new game',0ffh
              DB        00h
;------------------------------------------------------------------------------
youwin_ms  DB       2
              DB        30
              DB        10000110b
              DB        'You Win! :)',0ffh
		DB        'Press<Esc> to quit',0ffh
		DB        'Press<Enter> to new game',0ffh
              DB        00h
	
	
start_col DB 0
;---------------------------------------------------------------------------------
hole_color	DW	25	;陷阱颜色
;----------------------------------------------------------------------------------
gold_color	DW	142	;宝物颜色
gold_number	DW	18	;宝物数量
;----------------------------------------------------------------------------------
a_color	DW	2	;方块a颜色
a_y	DW	384	;行数
a_x	DW	180	;列数
a_size	DW	16
;---------------------------------------------------------------------------------
b_color	DW	2	;方块b颜色
b_y	DW	384	;行数
b_x	DW	484	;列数
b_size	DW	16
;----------------------------------------------------------------------------------
my_color DW	5	;方块my颜色
my_y	DW	80	;行数
my_x	DW	180	;列数
my_size	DW	16
;--------------------------frame----------------------------------------------------
f_color	DW	7	;frame 颜色
f_l_c	DW	180	;frame 坐表
f_r_c	DW	501
f_u_r	DW	80
f_d_r	DW	401	
;----------------------活动边界------------------------------------------------------
lim_right equ	468	
lim_left equ	196
lim_up	equ	96
lim_down equ	368
;--------------------------------------------------------------------------------------
temp	DW	16
;----------------------用于计算数组中位置的参量----------------------------------------------------------------
row	DW 0
col	DW 0 
row_a	dw 0
col_a	dw 304
row_b	dw 304
col_b	dw 304

;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
              
	.code

main	PROC	FAR

start:
	MOV	AX,@data 
	MOV	DS,AX
	
;-----------------------------保存当前显示模式----------------------------
	MOV	AH,0fh
	INT	10h
	PUSH	AX
;-----------------------------初始显示模式------------------------------	
	MOV	AH,0
	MOV	AL,12h
	INT	10h

	MOV       AX,0A000H
        MOV       ES,AX
;-------------------------------打印欢迎信息-----------------------------------------
	MOV       AL,0        
	CALL      set_write_mode          
        CALL      welcome_screen
;------------------------------接受键盘响应-------------------------------------------------
	mov	ah,0
	int	16h
	
	cmp al,1bh
	jz return
	cmp ah,1ch
	jz begin
;------------------------------退出--------------------------------------
return:
	jmp near ptr gowindows
;------------------------------进入游戏------------------------------------
begin:
;----------------------------填充屏幕---------------------------------	
	MOV AL,2
	CALL set_write_mode

        MOV CH,0
	MOV CL,0
	MOV DH,80
	MOV DL,60
	MOV AL,00000000b
	CALL COARSE_FILL
	
	MOV AL,0
	CALL set_write_mode	
;-----------------------------绘制游戏地图-------------------------------------------------------------	
	call draw_map
;------------------------------绘制游戏角色--------------------------------------------------	
draw:
	call	rectmy
	call	recta
	call	rectb
;------------------------------判断是否达到游戏胜利条件----------------------------------	
	mov ax,gold_number
	mov temp,0
	cmp ax,temp
	jnz goto0
	jmp near ptr youwin
;------------------------------------判断是否达到游戏失败条件------------------------------------------------------	
goto0:	
	mov ax,b_x
	cmp my_x,ax
	jnz goto1
	mov ax,b_y
	cmp my_y,ax
	jnz goto1
	jmp near ptr exit
goto1:	
	mov ax,a_x
	cmp my_x,ax
	jnz	beginkeyjudge
	mov ax,a_y
	cmp my_y,ax
	jnz	beginkeyjudge
	jmp near ptr exit
	
;-----------------------------------------检测键盘----------------------------------------------------------------
beginkeyjudge:
	mov	ah,0
	int	16h
;---------------------------------------处理键盘响应--------------------------------
	cmp	ah,right	
	jz	jump_mov_r
judge1:	cmp	ah,right
	jz	judge5

	cmp	ah,left
	jz	jump_mov_l
judge2:	cmp	ah,left
	jz	judge5

	cmp	ah,up
	jz	jump_mov_u
judge3:	cmp	ah,up	
	jz	judge5
	
	cmp	ah,down
	jz	jump_mov_d
judge4:	cmp	ah,down
	jz	judge5

	cmp	al,1bh                 ;esc
	jnz	beginkeyjudge
	jmp	near ptr exit


judge5:	;call judgea
	call judgeb
	jmp near ptr draw
;-----------------------------------------------------------------------	
jump_mov_l:
	push ax
	cmp	my_x,lim_left
	jae	middle1
	jmp near ptr draw
middle1:	
	call	mov_l
	call count_left
	
	mov ax,0
	mov ax,16
	sub row,ax
	
	pop ax
	jmp	near ptr judge2
jump_mov_r:
	push ax
	cmp	my_x,lim_right	
	jbe	middle2
	jmp near ptr draw	
middle2:	
	call	mov_r
	call count_right

	mov ax,0
	mov ax,16
	add row,ax	

	pop ax
	jmp	near ptr judge1
jump_mov_u:
	push ax
	
	cmp	my_y,lim_up
	jae	middle3
	jmp	near ptr draw
	
middle3:
	call	mov_u
	call count_up
	
	mov ax,0
	mov ax,16
	sub col,ax
	
	pop ax
	jmp	near ptr judge3
jump_mov_d:
	push ax	

	cmp	my_y,lim_down
	jbe	middle4
	jmp	near ptr draw
	
middle4: call	mov_d
	 call	count_down
	
	mov ax,0
	mov ax,16
	add col,ax
	
	pop ax
	jmp	near ptr judge4
;-----------------------------------判断是否退出游戏或继续游戏---------------------------------------------------
exit:	
	      
        CALL      gameover_screen
	jmp check
youwin:
	call youwin_screen	

	
check:	mov	ah,0
	int	16h
	cmp al,1bh
	jz gowindows
	cmp ax,1c0dh
	jz tobegin
	jmp check
;------------------------------------从新初始化个变量开始新游戏----------------------------------------
tobegin:
	mov ax,80
	mov y,ax
	mov ax,180
	mov x,ax
	
	mov ax,80
	mov my_y,ax
	mov ax,180
	mov my_x,ax
	mov ax,0
	mov row,ax
	mov col,ax
	
	mov ax,384
	mov a_y,ax
	mov ax,180
	mov a_x,ax
	mov ax,0
	mov row_a,ax
	mov ax,304
	mov col_a,ax
	
	mov ax,384
	mov b_y,384
	mov ax,484
	mov b_x,ax
	mov ax,304
	mov row_b,ax
	mov col_b,ax
	
	mov ax,18
	mov gold_number,ax
	
	jmp near ptr begin
	
;------------------------------------------------退出游戏-----------------------------------
gowindows:
	pop	ax
	mov	ah,00h
	int	10h	

	mov	ax,4c00h
	int	21h

main	endp
;********************************************************************************************
;*******************************控制追击者a的状态**************************************************************
judgea proc near

	mov ax,my_y
	cmp a_y,ax
	jbe  goon0
	jmp near ptr mov_up_a
goon0:	
	cmp a_y,ax
	jae goon1
	jmp near ptr mov_down_a
goon1:
	mov ax,my_x
	cmp a_x,ax
	jae goon2
	jmp near ptr mov_right_a
goon2:	
	cmp a_x,ax
	jbe  goon3
	jmp near ptr mov_left_a
goon3:
	
	jmp near ptr exit
;**********************************************************************up	
mov_up_a:
	cmp	a_y,lim_up
	jae 	goon4
	jmp near ptr draw
goon4:  	
	push ax
    	push cx
	mov ax,0
	mov cx,0
		
	mov ax,col_a
	mov cl,16
	div	cl

		

	mov cl,20
	
	mov ah,0
	mul cl
	mov temp,ax
	
	mov	cl,16
	mov ax,row_a	
	div cl
	mov ah,0
	add ax,temp

	MOV temp,OFFSET MS
	add ax,temp

	mov temp,20
	sub ax,temp
	mov si,ax
	
	mov al,1
	cmp al,[si]
	jz run1
	jmp near ptr mov_down_a

run1:
	push	cx
	push	a_color
	mov	cx,0
	mov	a_color,cx
	call	recta
	mov	cx,a_y
	sub	cx,a_size
	mov	a_y,cx
	pop	a_color
	pop	cx

	mov ax,0
	mov ax,16
	sub col_a,ax
	
	jmp	near ptr finish
;****************************************************************down
mov_down_a:
	cmp	a_y,lim_down
	jbe 	goon5
	jmp near ptr draw
goon5:	
	push ax
    	push cx
	mov ax,0
	mov cx,0
		
	mov ax,col_a
	mov cl,16
	div	cl


	mov cl,20
	mov ah,0
	mul cl
	mov temp,ax
	
	mov	cl,16
	mov ax,row_a	
	div cl
	mov ah,0
	add ax,temp

	MOV temp,OFFSET MS
	add ax,temp

	mov temp,20
	add ax,temp
	mov si,ax
	
	mov al,1
	cmp al,[si]
	jz run2
	jmp near ptr mov_left_a

run2:
	push	cx
	push	a_color
	mov	cx,0
	mov	a_color,cx
	call	recta                         ;在原来的地方重画
	mov	cx,a_y
	add	cx,a_size
	mov	a_y,cx
	pop	a_color
	pop	cx

	mov ax,0
	mov ax,16
	add col_a,ax

	jmp	near ptr finish
;***************************************************************left
mov_left_a:
	cmp	a_x,lim_left
	jae	goon6
	jmp near ptr draw
goon6:	
	push ax
    	push cx
	mov ax,0
	mov cx,0
		
	mov ax,col_a
	mov cl,16
	div	cl

	mov cl,20
	mov ah,0
	mul cl
	mov temp,ax
	
	mov	cl,16
	mov ax,row_a	
	div cl
	mov ah,0
	add ax,temp

	MOV temp,OFFSET MS
	add ax,temp

	dec ax
	mov si,ax
	
	mov al,1
	cmp al,[si]
	jz run3
	jmp near ptr mov_right_a

run3:
	push	cx
	push	a_color
	mov	cx,0
	mov	a_color,cx
	call	recta
	mov	cx,a_x
	sub	cx,a_size
	mov	a_x,cx
	pop	a_color
	pop	cx

	mov ax,0
	mov ax,16
	sub row_a,ax
	
	jmp	near ptr finish
	 
;***************************************************************right
mov_right_a:
	cmp	a_x,lim_right	
	jbe	goon7	
	jmp near ptr draw	
goon7:
	push ax
    	push cx
	mov ax,0
	mov cx,0
		
	mov ax,col_a
	mov cl,16
	div	cl

	mov cl,20
	mov ah,0
	mul cl
	mov temp,ax
	
	mov	cl,16
	mov ax,row_a	
	div cl
	mov ah,0
	add ax,temp

	MOV temp,OFFSET MS
	add ax,temp

	inc ax
	mov si,ax
	
	mov al,1
	cmp al,[si]
	jz run4
	jmp near ptr mov_up_a

run4:
	pop cx
	pop ax

	push	cx
	push	a_color
	mov	cx,0
	mov	a_color,cx
	call	recta
	mov	cx,a_x
	add	cx,a_size
	mov	a_x,cx
	pop	a_color
	pop	cx

	mov ax,0
	mov ax,16
	add row_a,ax	

	jmp	near ptr finish

finish:
	ret
judgea endp
;********************************************************************************************
;**********************************控制追击者b状态***********************************************************
judgeb proc near

	mov ax,my_y
	cmp b_y,ax
	jbe  goon8
	jmp near ptr mov_up_b
goon8:	
	cmp b_y,ax
	jae goon9
	jmp near ptr mov_down_b
goon9:
	mov ax,my_x
	cmp b_x,ax
	jae goon10
	jmp near ptr mov_right_b
goon10:	
	cmp b_x,ax
	jbe  goon11
	jmp near ptr mov_left_b
goon11:
	
	jmp near ptr exit
;**********************************************************************up	
mov_up_b:
	cmp	b_y,lim_up
	jae 	goon12
	jmp near ptr draw
goon12:  	
	push ax
    	push cx
	mov ax,0
	mov cx,0
		
	mov ax,col_b
	mov cl,16
	div	cl

		

	mov cl,20
	
	mov ah,0
	mul cl
	mov temp,ax
	
	mov	cl,16
	mov ax,row_b	
	div cl
	mov ah,0
	add ax,temp

	MOV temp,OFFSET MS

⌨️ 快捷键说明

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