📄 park13.asm
字号:
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 + -