??
字號:
cmp POINT_OK,0
je stop_falling
jmp end_of_bottom_check
stop_falling: mov FALL_OK,0
end_of_bottom_check:
pop cx
pop bx
pop ax
ret
BOTTOM_CHECK ENDP
;--------------------------------------------------------------------
;********************************************************************
POINT_CHECK PROC
push ax
push bx
push cx
push si
push dx
mov POINT_OK,1 ;change to coordnite of POINTS
sub ax,60 ;X
mov cl,7
div cl
mov ch,al
sub bx,40 ;Y
mov ax,bx
div cl
mov cl,10 ;10*Y+X
add al,ch
mov ah,0
add si,ax ;check points
mov al,[si]
cmp al,1
je end_of_point_check
mov POINT_OK,0
END_OF_POINT_CHECK:
pop dx
pop si
pop cx
pop bx
pop ax
ret
POINT_CHECK ENDP
;-------------------------------------------
;*****************************************
LINE_CHECK PROC
push ax
push bx
push cx
mov al,current.shape
shr al,1
jc LINE_CHECK_SHAPE1
LINE_CHECK_SHAPE1:
mov al,current.status
shr al,1
jnc LINE_CHECK_SHAPE1_STATUS2
LINE_CHECK_SHAPE1_STATUS1:
mov bx,current.rectY
call ONE_LINE_CHECK
cmp ONE_LINE_OK,1
jne END_OF_LINE_CHECK
call CLEAR_LINE
jmp end_of_line_check
LINE_CHECK_SHAPE1_STATUS2:
mov cx,4
mov bx,current.rectY
LINE_CHECK_SHAPE1_STATUS2_L:
call ONE_LINE_CHECK
cmp ONE_LINE_OK,1
jne END_OF_LINE_CHECK_SHAPE1_STATUS2
call CLEAR_LINE
END_OF_LINE_CHECK_SHAPE1_STATUS2:
ADD BX,7
LOOP LINE_CHECK_SHAPE1_STATUS2_L
jmp end_of_line_check
LINE_CHECK_SHAPE2:
mov bx,current.rectY
call ONE_LINE_CHECK
cmp ONE_LINE_OK,1
jne LINE_CHECK_SHAPE2_sec
call CLEAR_LINE
LINE_CHECK_SHAPE2_sec:
add bx,7
call ONE_LINE_CHECK
cmp ONE_LINE_OK,1
jne end_of_line_check
call CLEAR_LINE
END_OF_LINE_CHECK:
pop cx
pop bx
pop ax
ret
LINE_CHECK ENDP
;-------------------------------------------
;*****************************************
ONE_LINE_CHECK PROC
push bx
push si
push ax
MOV ONE_LINE_OK,1
mov ax,bx
sub ax,40
mov bl,7
div bl
mov bl,10
mul bl
mov ah,0
add si,ax
ONE_LINE_CHECK_L:
mov al,[si]
cmp al,0
jne FAIL
inc si
dec bl
jnz ONE_LINE_CHECK_L
jmp END_OF_ONE_LINE
FAIL: mov ONE_LINE_OK,0
END_OF_ONE_LINE:
pop ax
pop si
pop bx
ret
ONE_LINE_CHECK ENDP
;-----------------------------------------------------------------------------------------------------------------------
;***************************************** END OF CHECK PROC ***************************************************
;-----------------------------------------------------------------------------------------------------------------------
;******************************************** CLEAR PROC **************************************************
CLEAR_CURRENT PROC
push ax
mov al,current.shape
shr al,1
jc clear_shape1
shr al,1
jc clear_current_shape2
jmp clear_current_exit
clear_shape1:
jmp clear_current_exit
clear_current_shape2:
call clear_diamond
clear_current_exit:
pop ax
ret
CLEAR_CURRENT ENDP
;-------------------------------------------------------------------
;*******************************************************************
CLEAR_LONG PROC
push cx
push dx
push bx
mov bh,current.status
mov cx,current.rectx
mov dx,current.recty
mov bl,4
shr bh,1
jc clear_long_l1
shr bh,1
jc clear_long_l2
jmp clear_long_exit
clear_long_l1:
call clear_point
add cx,7
dec bl
jnz clear_long_l1
jmp clear_long_exit
clear_long_l2:
call clear_point
add dx,7
dec bl
jnz clear_long_l2
clear_long_exit:
pop bx
pop dx
pop cx
ret
CLEAR_LONG ENDP
;-------------------------------------------------------------------------
;*************************************************************************
CLEAR_DIAMOND PROC
push cx
push dx
mov cx,current.rectX
mov dx,current.rectY
call CLEAR_POINT
add cx,7
call CLEAR_POINT
add dx,7
call CLEAR_POINT
sub cx,7
call CLEAR_POINT
pop dx
pop cx
ret
CLEAR_DIAMOND ENDP
;-------------------------------------------------------------------------
;*************************************************************************
CLEAR_POINT PROC
push cx
push dx
push bx
push ax
mov al,0
mov ah,0ch
mov bl,6
CLEAR_P_L1: mov bh,6
push dx
CLEAR_P_l2: int 10h
inc dx
dec bh
jnz CLEAR_P_L2
pop dx
inc cx
dec bl
jnz CLEAR_P_L1
pop ax
pop bx
pop dx
pop cx
ret
CLEAR_POINT ENDP
;---------------------------------------------
;**********************************************
CLEAR_LINE PROC
push ax
push bx
push si
PUSH CX
PUSH DX
MOV DX,bx
MOV CX,123
mov ax,bx
sub ax,40
mov bl,7
div bl
;inc al
mov bl,10
mul bl
mov ah,0
add si,ax
mov bl,al
add si,9
PUSH SI
PUSH BX
CLEAR_LINE_L1:
mov al,[si-10]
mov [si],al
dec si
dec bl
jnz CLEAR_LINE_L1
POP BX
POP SI
REDRAW: mov al,[si]
cmp al,0
jne not_zero
call DRAW_POINT
jmp AFTER_DRAW
NOT_ZERO: call CLEAR_POINT
AFTER_DRAW: CMP CX,60
JNE NOT_60
MOV CX,123
SUB DX,7
JMP EQ_60
NOT_60: SUB CX,7
EQ_60:
dec si
dec bl
jnz REDRAW
call count
POP DX
POP CX
pop si
pop bx
pop ax
ret
CLEAR_LINE ENDP
;---------------------------------------------------------------------------------------------------------------------------------
;******************************************* DRAW PROC ************************************************************
DRAW_LONG proc
push cx
push dx
push bx
mov cx,current.rectx
mov dx,current.recty
mov bl,4
mov bh,current.status
shr bh,1
jc long_statusL1
shr bh,1
jc long_statusL2
jmp long_exit
long_statusL1:
call DRAW_POINT
add cx,7
dec bl
jnz long_statusL1
jmp long_exit
long_statusL2:
call DRAW_POINT
add dx,7
dec bl
jnz long_statusL2
long_exit:
pop bx
pop dx
pop cx
ret
DRAW_LONG endp
;-------------------------------------------------------------------------
;*************************************************************************
DRAW_POINT PROC
push cx
push dx
push ax
push bx
mov al,1
mov ah,0ch
mov bl,6
DRAW__L1: mov bh,6
push dx
DRAW__l2: int 10h
inc dx
dec bh
jnz DRAW__L2
pop dx
inc cx
dec bl
jnz DRAW__L1
pop bx
pop ax
pop dx
pop cx
ret
DRAW_POINT ENDP
;-------------------------------------------------------------------------
;*************************************************************************
DRAW_FRAME PROC
push dx
push cx
push ax
push bx
mov cx,55
mov dx,36
mov al,2
mov ah,0ch
mov bl,4
FRAME_L11: mov bh,7*10+1+4*2 ;row
push cx
FRAME_L12:
int 10h
push dx
add dx,20*7+4
int 10h
inc cx
pop dx
dec bh
jnz FRAME_L12
pop cx
inc dx
dec bl
jnz FRAME_l11
mov cx,55 ;colume
mov dx,40
mov bl,4
FRAME_L21: mov bh,7*20
push dx
FRAME_L22: int 10h
push cx
add cx,7*10+1+4
int 10h
pop cx
inc dx
dec bh
jnz FRAME_L22
inc cx
pop dx
dec bl
jnz FRAME_L21
pop bx
pop ax
pop cx
pop dx
ret
DRAW_FRAME ENDP
;-------------------------------------------------------------------------
;*************************************************************************
DRAW_DIAMOND PROC
push ax
push bx
mov cx,current.rectX
mov dx,current.rectY
call DRAW_POINT
add cx,7
call DRAW_POINT
add dx,7
call DRAW_POINT
sub cx,7
call DRAW_POINT
pop bx
pop ax
ret
DRAW_DIAMOND ENDP
;---------------------------------------------------------------------------------------------------------------------------------
;************************************* POINTS SET CLEAR PROC *******************************************************
POINT_SET PROC
push bx
push dx
push ax
push si
push cx
sub ax,60 ;change to coordnite of POINTS
mov cl,7
div cl
mov ch,al
sub bx,40
mov ax,bx
div cl
mov cl,10
mul cl
add al,ch
mov ah,0
add si,ax ;set points
mov BYTE PTR [si],0
pop cx
pop si
pop ax
pop dx
pop bx
ret
POINT_SET ENDP
;-------------------------------------------------------------------------
;*************************************************************************
;-------------------------------------------------------------------------
;*************************************************************************
COUNT PROC
push ax
push bx
push dx
cmp score3,9
jne COUNT_9_3
mov score3,0
cmp score2,9
jne COUNT_9_2
mov score2,0
inc score1
jmp COUNT_END
COUNT_9_2: inc score2
jmp COUNT_END
COUNT_9_3: inc score3
COUNT_END:
mov ah,02
mov bh,0
mov dh,9
mov dl,19
int 10h
mov ah,02
mov dl,score1
add dl,30h
int 21h
mov ah,02
mov dl,score2
add dl,30h
int 21h
mov ah,02
mov dl,score3
add dl,30h
int 21h
pop dx
pop bx
pop ax
ret
COUNT ENDP
;-------------------------------------------------------------------------
;*************************************************************************
DELAY proc
push ax
push cx
mov cx,33144
DELAY_l: in al,61h
and al,00010000b
cmp al,ah
je DELAY_l
mov ah,al
loop DELAY_l
pop cx
pop ax
ret
DELAY endp
pro_nam ends
end start
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -