📄 block.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 + -