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

📄 block.asm

📁 用汇编做的简单的打砖块游戏
💻 ASM
字号:
DATA SEGMENT
PX DW 0
PY DW 0
PC DB 0
TIMEPLUS DB 0
TIMELOOP DW 0
BARX DW 0
BARY DW 0
BOARDX DW 0
BOARDY DW 0
DELAYTIME DW 0
BX1 DW 0
BX2 DW 0
BY1 DW 0
BY2 DW 0
ADDRE DW 0
BARMODE DB 0
BAR0 DB 15,15,15,15,15,15,15,15,15,15,15,15,15
     DB 15,12,12,12,12,12,12,12,12,12,12,12, 8
     DB 15,12, 7, 7, 7, 7, 7, 7, 7, 7, 7, 9, 8
     DB 15,12, 7, 7, 7, 7, 7, 7, 7, 7, 7, 9, 8
     DB 15,12, 7, 7, 7, 7, 7, 7, 7, 7, 7, 9, 8
     DB 15,12, 7, 7, 7, 7, 7, 7, 7, 7, 7, 9, 8
     DB 15,12, 7, 7, 7, 7, 7, 7, 7, 7, 7, 9, 8
     DB 15, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 8
     DB  8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8
BLOCKS DW 0
BLOCK0 DB 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0
       DB 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
       DB 0,1,1,1,1,0,0,0,0,0,0,1,1,1,1,0
       DB 1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1
       DB 1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1
       DB 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
       DB 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1
       DB 1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1
       DB 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1
       DB 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0
BALLMODE DB 0
BALL1 DB  0,21,23,21, 0
      DB 21,25,28,25,21
      DB 23,28,31,28,23
      DB 21,25,28,25,21
      DB  0,21,23,21, 0
BALLX DW 0
BALLY DW 0
BALLVX DW 0
BALLVY DW 0
LPI DW 0
LPJ DW 0
LPK DW 0                     ;LP?--------FOR LOOP
DATA ENDS

SUBS SEGMENT
ASSUME CS:SUBS,ES:DATA
POINT PROC FAR
      MOV AX,PY
      MOV BX,320
      MUL BX
      ADD AX,PX
      MOV BX,AX
      MOV DL,PC
      MOV AX,0A000H
      MOV DS,AX
      MOV [BX],DL
      MOV AX,ES
      MOV DS,AX
      RET
POINT ENDP

;----------------DRAW BALL-------------
DRAWBALL PROC FAR
        MOV AX,BALLY
        SUB AX,2
        MOV BY1,AX
        ADD AX,5
        MOV BY2,AX
        LEA BX,BALL1
        MOV ADDRE,BX
DRAWBALLOOP1:      
             MOV AX,BALLX
             SUB AX,2
             MOV BX1,AX              
             ADD AX,5
             MOV BX2,AX

DRAWBALLOOP2:MOV AX,BX1
             MOV PX,AX
             MOV AX,BY1
             MOV PY,AX
             MOV PC,0
             MOV BL,BALLMODE
             CMP BL,0
             JE DRAWBLACKBALL
             MOV BX,ADDRE
             MOV CL,[BX]            
             MOV PC,CL
             INC BX
             MOV ADDRE,BX
DRAWBLACKBALL:CALL POINT

             MOV AX,BX1
             INC AX
             CMP AX,BX2
             MOV BX1,AX
             JNE DRAWBALLOOP2

             MOV AX,BY1
             INC AX
             CMP AX,BY2
             MOV BY1,AX
             JNE DRAWBALLOOP1
             RET                   
DRAWBALL ENDP


;----------------DRAW BAR-------------
DRAWBAR PROC FAR
        MOV AX,BARY
        SUB AX,4
        MOV BY1,AX
        ADD AX,9
        MOV BY2,AX
        LEA BX,BAR0
        MOV ADDRE,BX
DRAWBARLOOP1:      
             MOV AX,BARX
             SUB AX,6
             MOV BX1,AX              
             ADD AX,13
             MOV BX2,AX

DRAWBARLOOP2:MOV AX,BX1
             MOV PX,AX
             MOV AX,BY1
             MOV PY,AX
             MOV PC,0
             MOV BL,BARMODE
             CMP BL,0
             JE DRAWBLACK
             MOV BX,ADDRE
             MOV CL,[BX]            
             MOV PC,CL
             INC BX
             MOV ADDRE,BX
DRAWBLACK:   CALL POINT

             MOV AX,BX1
             INC AX
             CMP AX,BX2
             MOV BX1,AX
             JNE DRAWBARLOOP2

             MOV AX,BY1
             INC AX
             CMP AX,BY2
             MOV BY1,AX
             JNE DRAWBARLOOP1
             RET                   
DRAWBAR ENDP
;-----------------------INITMOUSE-----------------------
INITMOUSE PROC FAR
WAIT1:MOV AX,3
      INT 33H
      CMP BX,0
      JNE WAIT1
      RET
INITMOUSE ENDP

;----------------INIT------------------------
INIT PROC FAR
      MOV AX,DATA
      MOV DS,AX
      MOV ES,AX
      MOV AX,13H
      INT 10H
      LEA BX,BLOCK0
      MOV BLOCKS,BX
      MOV BARY,10
INITLOOP1:
      MOV BARX,50
INITLOOP2:
      MOV BX,BLOCKS
      MOV CL,[BX]
      ADD BX,1
      MOV BLOCKS,BX
      MOV BARMODE,CL
      CALL DRAWBAR
      MOV AX,BARX
      ADD AX,13
      MOV BARX,AX
      CMP AX,258
      JNE INITLOOP2
      MOV AX,BARY
      ADD AX,9
      MOV BARY,AX
      CMP AX,100
      JNE INITLOOP1
      MOV BARX,100
      MOV BARY,100
      MOV BALLMODE,1
      MOV BALLX,120
      MOV BALLY,150
      CALL DRAWBALL
      MOV AX,1010H
      MOV BX,8
      MOV DH,0
      MOV CH,15
      MOV CL,15
      INT 10H
      MOV BX,7
      MOV DH,0
      MOV CH,44
      MOV CL,44
      INT 10H
      MOV BX,15
      MOV DH,0
      MOV CH,63
      MOV CL,63
      INT 10H
      MOV BX,12
      MOV DH,0
      MOV CH,55
      MOV CL,55
      INT 10H
      MOV BX,9
      MOV DH,0
      MOV CH,30
      MOV CL,30
      INT 10H

      RET
INIT ENDP
SUBS ENDS

CODE SEGMENT
ASSUME CS:CODE,ES:DATA
;--------------------------DELAY----------------------
DELAY PROC FAR
DELAYLOOP1:
        MOV AH,2CH
        INT 21H
        MOV TIMEPLUS,DL
DELAYLOOP:
        MOV AH,2CH
        INT 21H
        MOV BL,TIMEPLUS
        CMP BL,DL
        JE DELAYLOOP
        MOV CX,DELAYTIME
        DEC CX
        MOV DELAYTIME,CX
        LOOP DELAYLOOP1
        RET
DELAY ENDP
;-----------------------HIT--------------------------
BALLHIT PROC FAR
UPHIT:
      MOV AX,BALLY
      MOV DX,BARY
      ADD AX,6
      CMP AX,DX
      JNE DOWNHIT
      MOV AX,BALLX
      MOV DX,BARX
      ADD AX,8
      CMP AX,DX
      JB DOWNHIT
      MOV AX,BALLX
      MOV DX,BARX
      SUB AX,8
      CMP AX,DX
      JA DOWNHIT
      MOV BALLVY,0
      MOV BARMODE,0
      CALL DRAWBAR
      MOV BX,BLOCKS
      DEC BX
      MOV DL,0
      MOV [BX],DL
UPHITEND:JMP DOWNHITEND
DOWNHIT:
      MOV AX,BALLY
      MOV DX,BARY
      SUB AX,6
      CMP AX,DX
      JNE LEFTHIT
      MOV AX,BALLX
      MOV DX,BARX
      ADD AX,8
      CMP AX,DX
      JB LEFTHIT
      MOV AX,BALLX
      MOV DX,BARX
      SUB AX,8
      CMP AX,DX
      JA LEFTHIT
      MOV BALLVY,2
      MOV BARMODE,0
      CALL DRAWBAR
      MOV BX,BLOCKS
      DEC BX
      MOV DL,0
      MOV [BX],DL
DOWNHITEND:JMP LEFTHITEND
LEFTHIT:
      MOV AX,BALLX
      MOV DX,BARX
      ADD AX,9
      CMP AX,DX
      JNE RIGHTHIT
      MOV AX,BALLY
      MOV DX,BARY
      ADD AX,5
      CMP AX,DX
      JB RIGHTHIT
      MOV AX,BALLY
      MOV DX,BARY
      SUB AX,5
      CMP AX,DX
      JA RIGHTHIT
      MOV BALLVX,0
      MOV BARMODE,0
      CALL DRAWBAR
      MOV BX,BLOCKS
      DEC BX
      MOV DL,0
      MOV [BX],DL
LEFTHITEND:JMP HITOVER
RIGHTHIT:
      MOV AX,BALLX
      MOV DX,BARX
      SUB AX,9
      CMP AX,DX
      JNE HITOVER
      MOV AX,BALLY
      MOV DX,BARY
      ADD AX,5
      CMP AX,DX
      JB HITOVER
      MOV AX,BALLY
      MOV DX,BARY
      SUB AX,5
      CMP AX,DX
      JA HITOVER
      MOV BALLVX,2
      MOV BARMODE,0
      CALL DRAWBAR
      MOV BX,BLOCKS
      DEC BX
      MOV DL,0
      MOV [BX],DL
HITOVER:RET
BALLHIT ENDP

CLEANANDJUDGE PROC FAR
      LEA BX,BLOCK0
      MOV BLOCKS,BX
      MOV BARY,10
HITLOOP1:
      MOV BARX,50
HITLOOP2:
      MOV BX,BLOCKS
      MOV CL,[BX]
      ADD BX,1
      MOV BLOCKS,BX
      MOV BARMODE,CL
      CMP CL,1
      JNE NOTHIT
      CALL BALLHIT
NOTHIT:
      MOV AX,BARX
      ADD AX,13
      MOV BARX,AX
      CMP AX,258
      JNE HITLOOP2
      MOV AX,BARY
      ADD AX,9
      MOV BARY,AX
      CMP AX,100
      JNE HITLOOP1

      MOV BALLMODE,1
      CALL DRAWBALL

      MOV AX,TIMELOOP
      INC AX
      MOV TIMELOOP,AX
      CMP AX,5
      JE DODELAY
      JMP NODELAY
DODELAY:
      MOV DELAYTIME,2
      CALL DELAY
      MOV TIMELOOP,0
NODELAY:
      MOV AX,BOARDX
      MOV BARX,AX
      MOV AX,BOARDY
      MOV BARY,AX
      MOV BARMODE,0
      CALL DRAWBAR
      MOV BALLMODE,0
      CALL DRAWBALL
      RET
CLEANANDJUDGE ENDP

;---------------------------MAIN-----------------------
MAINPRO PROC FAR
BEGIN:CALL INIT
;-----------GAME START-----------
      MOV AX,8
      MOV CX,180
      MOV DX,185
      INT 33H
      MOV AX,7
      MOV CX,50
      MOV DX,244
      INT 33H
      MOV AX,3
      INT 33H
      MOV BARX,CX
      MOV BARY,DX
      MOV BARMODE,1
      CALL DRAWBAR
      CALL INITMOUSE
MOUSEWAIT:
      MOV AX,3
      INT 33H
      CMP BX,1
      JNE MOUSEWAIT
      MOV BARMODE,0
      CALL DRAWBAR
      MOV BALLMODE,0
      CALL DRAWBALL
      CALL INITMOUSE
GAMELOOP:
      MOV AX,3
      INT 33H
      MOV BOARDX,CX
      MOV BOARDY,DX
      MOV AX,BOARDX
      MOV BARX,AX
      MOV AX,BOARDY
      MOV BARY,AX
      MOV BARMODE,1
      CALL DRAWBAR

      MOV AX,BALLX
      ADD AX,BALLVX
      DEC AX
      MOV BALLX,AX
      MOV AX,BALLY
      ADD AX,BALLVY
      DEC AX
      MOV BALLY,AX

      MOV AX,BALLX
      CMP AX,42
      JA CASE0
      MOV BALLVX,2
CASE0:
      MOV AX,BALLX
      CMP AX,250
      JB CASE1
      MOV BALLVX,0
CASE1:
      MOV AX,BALLY
      CMP AX,8
      JA CASE2
      MOV BALLVY,2
CASE2:
      MOV AX,BALLY
      MOV BX,BOARDY
      SUB BX,7
      CMP AX,BX
      JB CASE3
      MOV AX,BALLX
      MOV BX,BOARDX
      ADD AX,8
      CMP AX,BX
      JB GAMEOVER
      MOV AX,BALLX
      SUB AX,8
      CMP AX,BX
      JA GAMEOVER
      MOV BALLVY,0
GAMEOVER:
      MOV AX,BALLY
      MOV BX,BOARDY
      CMP AX,BX
      JA GAMEOV
CASE3:CALL CLEANANDJUDGE
      MOV AX,3
      INT 33H
      CMP BX,1
      JE GAMEOV
      JMP GAMELOOP

GAMEOV: CALL INITMOUSE
      
      MOV AX,3
      INT 10H
      MOV AH,4CH
      INT 21H
MAINPRO ENDP

CODE ENDS
     END BEGIN

⌨️ 快捷键说明

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