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

📄 menu.asm

📁 asm gun shot游戏源码,测试测试
💻 ASM
字号:
;
; Small tt shot game(asm final), menu section

public	EXITGAME, FUC_M, INIT, LOGO, SETUP
extrn	CALCUL:far, CURSOR:far, CHAR:far, TIMER:far

include	data.asm			; public data resources

code	segment
	assume	cs:code, ds:data, ss:stack

DR_BORDER	proc
	push	ax
	push	bx
	push	cx
	push	dx
	push	bp

	mov	cx, MAX_ROW
	mov	dx, cx
	sub	dx, 4
	mov	bx, UNITS
	add	bx, 5
	mov	bp, 1

DR_loop:				; draw a border '||'
	xor	bp, 1b
	cmp	bp, 0
	je	DR_left
	mov	LINE_CO, word ptr 1	; BLUE
	inc	cx
	inc	bx
	jmp	DR_draw
DR_left:
	mov	LINE_CO, word ptr 4	; RED
	dec	bx

DR_draw:
	push	cx
	push	bx
	call	far ptr CURSOR

	cmp	cx, dx			; whether draw bottom line '+'
	jne	DR_continue
	mov	ax, '+'
	push	ax
	push	LINE_CO
	call	far ptr CHAR
	loop	DR_loop

DR_continue:
	mov	ax, '|'
	push	ax
	push	LINE_CO
	call	far ptr CHAR
	loop	DR_loop

	pop	bp
	pop	dx
	pop	cx
	pop	bx
	pop	ax
	ret
DR_BORDER	endp

EXITGAME	proc	far		; type the score then leave, preserve nothing
	push	ax
	push	dx

	mov	ah, 2			; bell
	mov	dl, 07h
	int	21h

	mov	ax, 5			; print query message
	mov	dx, UNITS
	add	dx, 8
	PRINT	ax, dx, QUERY

	add	ax, 2
	dec	dx
	PRINT	ax, dx,	QUERY_EXTRA

	mov	ah, 7			; read key, ESC quit, else return
	int	21h
	cmp	al, 1bh	
	jne	EX_return

	mov	ah, 4ch			; return to DOS
	int	21h

EX_return:
	mov	ax, 5			; re-paint the notice
	mov	dx, UNITS
	add	dx, 8
	PRINT	ax, dx,	NOTICE_TOP

	add	ax, 2			; remove the query extra
	dec	dx
	PRINT	ax, dx, ERASE

	pop	dx			; pop pushed
	pop	ax
	ret
EXITGAME	endp

FUC_M	proc	far			; test the keypress, whether change the game mode
	push	ax
	push	bx
	push	cx

	mov	cx, 16			; init row and column
	mov	bx, 62

	cmp	al, '1'			; whether change BELL mode
	jne	FU_color
	xor	BELL, 01h
	cmp	BELL, 01h
	je	FU_bo
	PRINT	cx, bx, MODE_BELL_F
	jmp	FU_exit
FU_bo:
	PRINT	cx, bx, MODE_BELL_O
	jmp	FU_exit

FU_color:				; whether open colorful mode	
	cmp	al, '2'
	jne	FU_grade
	xor	COLOR, 01h
	add	cx, 2
	cmp	COLOR, 01h
	je	FU_co
	PRINT	cx, bx, MODE_COLOR_F
	jmp	FU_exit
FU_co:
	PRINT	cx, bx, MODE_COLOR_O
	jmp	FU_exit

FU_grade:				; whether change grade 
	cmp	al, '3'
	jne	FU_mode
FU_gadd:				; grade from 1 - 3
	mov	ax, 1
	add	GRADE, ax
	and	GRADE, 0003h
	cmp	GRADE, 0
	je	FU_gadd
	add	cx, 4
	cmp	GRADE, 1		; test grade value
	je	FU_ge1
	cmp	GRADE, 2
	je	FU_ge2
	PRINT	cx, bx, MODE_GRADE_E
	jmp	FU_exit
FU_ge2:
	PRINT	cx, bx, MODE_GRADE_M
	jmp	FU_exit
FU_ge1:
	PRINT	cx, bx, MODE_GRADE_H
	jmp	FU_exit

FU_mode:				; change the mode color
	cmp	al, '4'
	jne	FU_incsp
FU_modeU:				; if MODE=MARK, re inc MODE
	inc	MODE
	and	MODE, 0007h
	mov	ax, MARK
	cmp	MODE, ax
	jz	FU_modeU
	add	cx, 6
	PRINT	cx, bx, MODE_CHANGE_C
	jmp	FU_exit

FU_incsp:				; inc speed
	cmp	al, '5'
	jne	FU_decsp
	dec	MOMENT
	cmp	MOMENT, word ptr 0
	jnz	FU_pushsp
	inc	MOMENT
	jmp	FU_pushsp
FU_decsp:				; dec speed
	cmp	al, '6'
	jne	FU_exit
	inc	MOMENT
FU_pushsp:
	push	MOMENT
	mov	ax, 100
	push	ax
	add	cx, 8
	push	cx			; row
	add	bx, 14
	push	bx			; column
	call	far ptr CALCUL

FU_exit:
	pop	cx
	pop	bx
	pop	ax
	ret
FUC_M	endp

LOGO	proc	far
	push	MOMENT
	push	ax
	push	bx
	push	cx
	push	dx

	mov	MOMENT, 30		; slow, wait background graph
	call	far ptr TIMER

	mov	ax, MAX_ROW		; get the middle row	
	shr	ax, 1
	mov	bx, ax
	mov	cx, MAX_ROW		
	shr	cx, 1			; loop MAX_ROW/2 times
	mov	MOMENT, 4		; sooner batter

LO_floop:				; print slow extended graph from middle row
	PRINT	ax, BLACK, FULL_CHAR	; BLACK = 0 column
	PRINT	bx, BLACK, FULL_CHAR
	cmp	ax, bx
	call	far ptr TIMER
	inc	ax
	dec	bx
	loop	LO_floop

	mov	al, 0			; init the screen changes back and front color
	mov	bh, 01110000b		; background: white, front: black
	mov	ch, 0
	mov	cl, 0
	mov	dh, MAX_ROW
	mov	dl, MAX_COL
	mov	ah, 6
	int	10h

	mov	MOMENT, 35		; complete background, wait graph
	call	far ptr TIMER

	mov	ax, LEFT_ROW		; print big S
	mov	dx, LEFT_COL
	lea	bx, LOGO_S
	mov	cx, 19
LO_sloop:
	PRINT	ax, dx, [bx]
	add	bx, 16
	inc	ax
	loop	LO_sloop
	
	mov	ax, LEFT_ROW		; print big H
	add	dx, 17
	lea	bx, LOGO_H
	mov	cx, 19
LO_hloop:
	PRINT	ax, dx, [bx]
	add	bx, 16
	inc	ax
	loop	LO_hloop

	mov	ax, LEFT_ROW 		; print big O
	add	dx, 17
	lea	bx, LOGO_O
	mov	cx, 19
LO_oloop:
	PRINT	ax, dx, [bx]
	add	bx, 16
	inc	ax
	loop	LO_oloop

	mov	ax, LEFT_ROW		; print big T
	add	dx, 17
	lea	bx, LOGO_T
	mov	cx, 19
LO_tloop:
	PRINT	ax, dx, [bx]
	add	bx, 16
	inc	ax
	loop	LO_tloop

	mov	MOMENT, 30		; complete graph
	call	far ptr TIMER

	mov	ax, 42			; last print author information
	mov	bx, 59
	PRINT	ax, bx, MARK_AUTHOR

	mov	MOMENT, 100		; complete, show time
	call	far ptr TIMER

	pop	dx
	pop	cx
	pop	bx
	pop	ax
	pop	MOMENT
	ret
LOGO	endp

INIT	proc	far			; cg menu
	push	ax
	push	bx
	push	cx
	push	dx

	mov	al, 0			; init the screen
	mov	bh, 00000001b		; init common color: blue
	mov	ch, 0
	mov	cl, 0
	mov	dh, MAX_ROW
	mov	dl, MAX_COL
	mov	ah, 6
	int	10h

	pop	dx
	pop	cx
	pop	bx
	pop	ax
	ret
INIT	endp

SETUP	proc	far			; set up the static strings
	push	ax
	push	bx
	push	cx
	push	dx

	call	DR_BORDER		; draw border

	mov	ax, 5			; print notice top
	mov	bx, UNITS
	add	bx, 8
	PRINT	ax, bx,	NOTICE_TOP

	mov	ax, 36			; print hit rate
	mov	bx, 62
	PRINT	ax, bx,	HIT_RATE	

	add	ax, 2			; print save rate
	mov	bx, 62
	PRINT	ax, bx, SAVE_RATE 

	mov	ax, MAX_ROW		; print notice bottom 1
	sub	ax, 4
	mov	bx, UNITS
	add	bx, 9
	PRINT	ax, bx, NOTICE_BOTTOM_1

	add	ax, 2			; notice bottom 2
	PRINT	ax, bx,	NOTICE_BOTTOM_2

	mov	ax, 14			; print key sentence
	mov	dx, 62
	PRINT	ax, dx, MODE_SENTENCE

	add	ax, 2			; print bell mode status
	PRINT	ax, dx, MODE_BELL_F

	add	ax, 2			; print colorful status
	PRINT	ax, dx, MODE_COLOR_F

	add	ax, 2			; print grade status
	PRINT	ax, dx, MODE_GRADE_M

	add	ax, 2			; print change color mode
	PRINT	ax, dx, MODE_CHANGE_C

	add	ax, 2			; print +|- speed
	PRINT	ax, dx, MODE_CHANGE_SP

	push	MOMENT			; print the speed value
	mov	bx, 100			
	push	bx
	push	ax
	add	dx, 14
	push	dx
	call	far ptr CALCUL

	push	CA_HIT			; print the hit rate
	push	TO_HIT
	mov	cx, 36
	mov	dx, 73
	push	cx
	push	dx
	call	far ptr CALCUL

	pop	dx
	pop	cx
	pop	bx
	pop	ax
	ret
SETUP	endp

code	ends
	end

⌨️ 快捷键说明

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