📄 richard.asm
字号:
jl j2
mov cl,2
mul cl
add al,BOARD_LEFT+1
mov cl,i
add cl,BOARD_TOP+1
add cl,yp
gotoxy al,cl
mov al,yp
add al,i
mov cl,BOARD_WIDTH+2
mul cl
add al,xp
add al,j
mov cx,[bp+6]
push bx
mov bx,ax
cmp array[bx],cl
pop bx
jnz j2
string 0dbh,2
j2:
inc j
cmp j,3
jl e
inc i
cmp i,3
jl d
exit1:
popall
pop bp
ret 4
draw endp
generate proc near
pushall
cmp next_set,0
je next1
cmp next_set,1
jne ran
mov ax,next_brick_no
push ax
mov ax,BOARD_BACK
push ax
call show_next
ran:
random
mov next_brick_no,ax
mov next_set,0
next1:
mov ax,next_brick_no
mov brick_no,ax
random
mov next_brick_no,ax
mov ax,brick_no
push ax
mov ax,BOARD_BACK
push ax
call show_next
mov ax,next_brick_no
push ax
mov ax,next_brick_no
add ax,8
push ax
call show_next
cmp mess12,1
jne j35
mov brick_no,6
mov mess12,0
j35:
cmp brick_no,6
jae el
mov i,0
j4:
mov j,4
jr:
mov ax,brick_no
mov cl,6
mul cl
mov bx,ax
mov ax,0
mov al,i
mov cl,3
mul cl
add al,j
sub ax,4
add bx,ax
mov dl,brick_set[bx]
mov ax,0
mov al,i
mov cl,BOARD_WIDTH+2
mul cl
add al,j
adc ah,0
mov bx,ax
mov array[bx],dl
mov xp,5
mov yp,0
inc j
cmp j,7
jb jr
inc i
cmp i,2
jb j4
jmp exit2
el: ;draw stick
mov bx,3
el1:
mov array[bx],BRICK
inc bx
cmp bx,7
jb el1
mov xp,4
mov yp,0
mov ticket,1
exit2:
mov ax,BRICK
push ax
mov ax,15
push ax
call draw
popall
ret
generate endp
new_game proc near
pushall
mov ax,BOARD_HEIGHT+2 ;MAKE ARRAY ZERO
mov cl,BOARD_WIDTH+2
mul cl
mov cx,ax
loop1:
mov bx,cx
dec bx
mov array[bx],EMPTY
loop loop1
mov next_set,1
mov bl,SCORE_ATTR
gotoxy SCORE_LEFT+3,SCORE_TOP+6
cprintf '0'
mov time_set,0
mov down_speed,0
gotoxy SCORE_LEFT+3,SCORE_TOP+4
cprintf '0'
mov ax,WALL
push ax
mov ax,15
push ax
call draw
popall
ret
new_game endp
move proc near
push bp
mov bp,sp
pushall
mov ax,BRICK
push ax
mov ax,BOARD_BACK
push ax
call draw
mov ax,[bp+4]
cmp ax,MOVE_DOWN
je dow
cmp ax,MOVE_LEFT
je lef
cmp ax,MOVE_RIGHT
je rig
cmp ax,REVOLVE
je rev
jmp exit3
dow:
mov bx,(BOARD_HEIGHT+2)*(BOARD_WIDTH+2)
sh:
dec bx
cmp array[bx],BRICK
jne ren
mov array[bx],EMPTY
mov array[bx+BOARD_WIDTH+2],BRICK
ren:
cmp bx,0
jge sh
inc yp
jmp redraw
lef:
mov bx,0
le0:
cmp array[bx],BRICK
jne le1
mov array[bx],EMPTY
mov array[bx-1],BRICK
le1:
inc bx
cmp bx,(BOARD_HEIGHT+2)*(BOARD_WIDTH+2)
jb le0
dec xp
jmp redraw
rig:
mov bx,(BOARD_HEIGHT+2)*(BOARD_WIDTH+2)
ri0:
dec bx
cmp array[bx],BRICK
jne ri1
mov array[bx],EMPTY
mov array[bx+1],BRICK
ri1:
cmp bx,0
jge ri0
inc xp
he1:
jmp redraw
he2:
jmp cstrick
rev:
cmp brick_no,5
je he1
cmp brick_no,6
je he2
mov i,-1
rev1:
mov bl,yp
add bl,i
mov ax,BOARD_WIDTH+2
mul bl
mov bx,ax
mov j,-1
rev3:
mov cl,xp
add cl,j
mov ch,0
mov si,cx
mov al,array[bx][si]
and al,0fh
cmp al,BRICK
jne rev2
push bx
mov bl,yp
add bl,j
mov ax,BOARD_WIDTH+2
mul bl
mov bx,ax
add bl,xp
sub bl,i
or array[bx],10h
pop bx
rev2:
inc j
cmp j,2
jl rev3
inc i
cmp i,2
jl rev1
mov i,-1
rev4:
mov bl,yp
add bl,i
mov ax,BOARD_WIDTH+2
mul bl
mov bx,ax
mov j,-1
rev5:
mov cl,xp
add cl,j
mov ch,0
mov si,cx
mov cl,4
shr array[bx][si],cl
inc j
cmp j,2
jl rev5
inc i
cmp i,2
jl rev4
jmp redraw
cstrick:
cmp ticket,1
jne str2
mov bl,yp
mov ax,BOARD_WIDTH+2
mul bl
mov bx,ax
mov cl,-1
str1:
mov dl,xp
add dl,cl
mov dh,0
mov si,dx
mov array[bx][si],EMPTY
push bx
mov bl,yp
add bl,cl
mov ax,BOARD_WIDTH+2
mul bl
mov bx,ax
mov al,xp
mov ah,0
mov si,ax
mov array[bx][si],BRICK
pop bx
inc cl
cmp cl,3
jl str1
mov ticket,0
jmp redraw
str2:
mov cl,-1
str3:
mov bl,yp
add bl,cl
mov ax,BOARD_WIDTH+2
mul bl
mov bx,ax
mov ax,0
mov al,xp
mov si,ax
mov array[bx][si],EMPTY
push bx
mov bl,yp
mov ax,BOARD_WIDTH+2
mul bl
mov bx,ax
mov ax,0
mov al,xp
add al,cl
mov si,ax
mov array[bx][si],BRICK
pop bx
inc cl
cmp cl,3
jl str3
mov ticket,1
redraw:
mov ax,BRICK
push ax
mov ax,15
push ax
call draw
exit3:
popall
pop bp
ret 2
move endp
moveable proc near
push bp
mov bp,sp
pushall
mov mable,YES
mov ax,[bp+4]
cmp ax,MOVE_DOWN
je mdj
cmp ax,MOVE_LEFT
je mlj
cmp ax,MOVE_RIGHT
je mrj
cmp ax,REVOLVE
je rr
jmp exit6
mdj: jmp md
mlj: jmp ml
mrj: jmp mr
rr: jmp rl
md:
mov bx,BOARD_HEIGHT-1;
mov ax,BOARD_WIDTH+2
mul bl
mov bx,ax
mov si,0
md0:
cmp array[bx][si],BRICK
jne md1
jmp b5
md1:
inc si
cmp si,BOARD_WIDTH
jb md0
;sub bx,BOARD_WIDTH+2
md2:
cmp array[bx],BRICK
jne md3
cmp array[bx+BOARD_WIDTH+2],WALL
jb md3 ;
jmp b5
md3:
dec bx
cmp bx,0
jge md2
jmp exit6
ml:
mov bx,0
mov cl,0
ml0:
cmp array[bx],BRICK
jne ml1
jmp b5
ml1:
add bx,BOARD_WIDTH+2
inc cl
cmp cl,BOARD_HEIGHT
jb ml0
mov bx,BOARD_HEIGHT
mov ax,BOARD_WIDTH+2
mul bl
mov bx,ax
ml2:
dec bx
cmp array[bx],BRICK
jne ml3
cmp array[bx-1],WALL
jb ml3 ;
jmp b5
ml3:
cmp bx,0
jge ml2
jmp exit6
mr:
mov bx,BOARD_WIDTH-1
mov cx,BOARD_HEIGHT
mr0:
cmp array[bx],BRICK
jne mr1
jmp b5
mr1:
add bx,BOARD_WIDTH+2
loop mr0
mov bx,BOARD_HEIGHT
mov ax,BOARD_WIDTH+2
mul bl
mov bx,ax
mr2:
cmp array[bx],BRICK
jne mr3
cmp array[bx+1],WALL
jb mr3 ;
jmp b5
mr3:
dec bx
cmp bx,0
jge mr2
jmp exit6
rl:
cmp brick_no,5
je b50
cmp brick_no,6
je b600
cmp yp,0
je b50
cmp yp,BOARD_HEIGHT-1
je b50
cmp xp,0
je b50
cmp xp,BOARD_WIDTH-1
je b50
jmp rl00
b50:
jmp b5
b600:
jmp b6
rl00:
mov i,-1
rl0:
mov j,-1
rl2:
mov bl,yp
add bl,i
mov ax,BOARD_WIDTH+2
mul bl
mov bx,ax
add bl,xp
add bl,j
cmp array[bx],BRICK
jne rl1
mov bl,yp
add bl,j
mov ax,BOARD_WIDTH+2
mul bl
mov bx,ax
sub bl,i
cmp array[bx],WALL
jb rl1 ;
jmp b5
rl1:
inc j
cmp j,2
jl rl2
inc i
cmp i,2
jl rl0
jmp exit6
b6:
cmp ticket,1
jne b60
cmp yp,0
je b5
cmp yp,BOARD_HEIGHT-2
jae b5
jmp b61
b60:
cmp xp,0
je b5
cmp xp,BOARD_WIDTH-2
jae b5
mov i,-1
b61:
mov bl,yp
mov ax,BOARD_WIDTH+2
mul bl
mov bx,ax
add bl,xp
add bl,i
mov dl,array[bx]
mov bl,yp
add bl,i
mov ax,BOARD_WIDTH+2
mul bl
mov bx,ax
add bl,xp
add dl,array[bx]
cmp dl,BRICK+WALL
jb b62 ;
jmp b5
b62:
inc i
cmp i,3
jl b61
jmp exit6
b5:
mov mable,NO
exit6:
popall
pop bp
ret 2
moveable endp
brick_reach_bottom proc near
pushall
mov down_offset,0
mov i,BOARD_HEIGHT;-1
rea0:
mov cx,0
mov bl,i
mov ax,BOARD_WIDTH+2
mul bl
mov bx,ax
mov si,0
rea1:
cmp array[bx][si],BRICK
jne rea2
mov dx,brick_no
add dx,8
mov array[bx][si],dl
rea2:
cmp array[bx][si],0
je rea3
inc cx
rea3:
inc si
cmp si,BOARD_WIDTH
jb rea1
mov bx,0
mov bl,i
cmp cx,BOARD_WIDTH
jne rea4
inc down_offset
mov row_down_offset[bx],0
jmp rea5
rea4:
mov dl,down_offset
mov row_down_offset[bx],dl
rea5:
dec i
cmp i,0
jge rea0
mov i,BOARD_HEIGHT-1
rea6:
mov al,down_offset
cmp al,0
je exit7
mov bx,0
mov bl,i
cmp row_down_offset[bx],al
jne rea7
mov bl,i
add bl,down_offset
mov ax,BOARD_WIDTH+2
mul bl
mov cx,ax
mov bl,i
mov ax,BOARD_WIDTH+2
mul bl
mov si,0
rea8: mov bx,ax
mov dl,array[bx][si]
mov bx,cx
mov array[bx][si],dl
mov bx,ax
mov array[bx][si],EMPTY
inc si
cmp si,BOARD_WIDTH
jb rea8
rea7:
dec i
cmp i,0
jge rea6
exit7:
mov ax,WALL
push ax
mov ax,15
push ax
call draw
popall
ret
brick_reach_bottom endp
game_over proc near
pushall
mov gover,NO
mov bx,0
ga1:
cmp array[bx],WALL
jb ga2
mov gover,YES
jmp exit8
ga2:
inc bx
cmp bx,BOARD_WIDTH
jb ga1
exit8:
popall
ret
game_over endp
new_int proc near
push ds
push es
push bx
push ax
push cx
push dx
mov ax,data
mov ds,ax
sti
inc time_set
cmp time_set,1000
jb exit9
mov time_set,0
exit9:
cli
pop dx
pop cx
pop ax
pop bx
pop es
pop ds
iret
new_int endp
calc proc near
pushall
mov al,down_offset
cmp al,0
je exitc
cmp al,1
je d1
cmp al,2
je d2
cmp al,3
je d3
add current_score,60
jmp exitc
d1:
add current_score,10
jmp exitc
d2:
add current_score,25
jmp exitc
d3:
add current_score,40
exitc:
popall
ret
calc endp
dec_div proc near
mov ax,bx
mov dx,0
div cx
mov bx,dx
add al,30h
push bx
push cx
mov bl,SCORE_ATTR
cprintf al
pop cx
pop bx
ret
dec_div endp
score proc near
pushall
call calc
printscore SCORE_LEFT+3,SCORE_TOP+6,current_score
printscore SCORE_LEFT+3,SCORE_TOP+2,high_score
mov ax,current_score
cmp high_score,ax
ja comp
mov high_score,ax
printscore SCORE_LEFT+3,SCORE_TOP+2,high_score
comp:
mov ax,level
cmp current_score,ax
jb exitsc
inc down_speed
add level,300 ;add level
mov bl,SCORE_ATTR
gotoxy SCORE_LEFT+3,SCORE_TOP+4,current_score
mov dx,down_speed
add dl,30h
cprintf dl
exitsc:
popall
ret
score endp
code ends
end start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -