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

📄

📁 用汇编程序编写的俄罗斯方块
💻
📖 第 1 页 / 共 2 页
字号:
            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
            mul cl
            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
            jmp LINE_CHECK_SHAPE2
            
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:
            call clear_long
            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 + -