📄 no3.txt
字号:
;玩俄罗斯方块,从一个窗口的底部开始,当到顶端就结束,显示“game over”
Pushr macro x,y,z,w
Push x
Push y
Push z
Push w
Endm
Popr macro x,y,z,w
Pop w
Pop z
Pop y
Pop x
Endm
Stacks segment
Dw 256 dup(?)
Stacks ends
Data segment
string db 'GAME OVER';结束显示字符串
len_string equ $-string
Count dw 0
down_col db 0
Line db 0;行
Column db 0;列
endy db 0;标志在那行结束
startx db 0;标志在那行、那列结束
starty db 0
lowline db 0;标志落在那行
Data ends
Codes segment
Assume cs:codes,ds:data,es:data,ss:stacks
Start: mov ax,data
Mov ds,ax
Mov es,ax
mov ah,0
mov al,3
int 10h
call clear_screen
mov down_col,0
call window
mov dh,1;屏幕属性
mov dl,33
mov bh,0
;垒俄罗斯方块
mov lowline,22
mov endy,42
Call move;向右移动横条方块,入口参数endy,lowline
mov endy,3
mov startx,4
mov starty,32
call move_l;转动L方块,入口参数endy startx starty
call move1
call move2;移动田方块,入口参数lowline
call move3 ;移动T方块
mov endy,21
call move4;向左移动横条方块
mov endy,7
mov startx,8
mov starty,29
call Move_l;转动L方块
Call move1
mov endy,4
mov startx,5
mov starty,40
call Move_T;转动T方块
Call moveT
mov lowline,21
mov endy,21
Call move5;移动锄头状方块
add endy,3
call move5
add endy,3
call move5
call move6
mov lowline,20
call move7;移动直条方块
mov lowline,18
call move3
mov endy,45
call move10;Z方块
call move8;移动卜方块
mov endy,35
mov lowline,16
Call move;向右移动横条方块
mov endy,26
call move9;与方块
mov endy,39
mov lowline,15
mov endy,35
call move11
dec lowline
call move7;移动直条方块
mov lowline,13
Call move;向右移动横条方块
mov lowline,12
mov endy,37
call move11
mov lowline,10
inc endy
call move11
mov lowline,8
inc endy
call move11
mov lowline,7
mov endy,30
call move4;向左移动横条方块
mov lowline,6
mov endy,33
call move10;Z方块
mov lowline,2
call move4
mov lowline,1
mov endy,33
call move11
call move12;铺满整个窗口
;显示字符串“game over”
call window
call delay
mov ah,13h
mov dh,11; 读字符串
mov dl,30
mov bh,0
mov bp,seg string
mov es,bp
mov bp,offset string
mov cx,len_string
mov bl,41h
mov al,1
int 10h
call delay2
;窗口及下卷
window proc
mov ah,7
mov al,down_col
mov bh,14h
mov ch,1
mov cl,20
mov dh,23
mov dl,50
int 10h
ret
window endp
Move proc
Pushr ax,bx,cx,dx
Xor ch,ch
Mov line,dh
Mov column,dl
Next:
inc dl
cmp dl,44
jb do
mov dl,44
do: inc dh
mov cx,6
call view
Cmp dh,lowline
Ja done
Call delay
Call Erase
jmp next
done: Popr ax,bx,cx,dx
Ret
Move endp
Erase proc;擦除横条
Mov dh,line
Mov dl,column
add dh,1
inc dl
mov cx,7
call view1
mov al,endy
cmp column,al
ja do1
inc column
do1: mov dl,column
inc line
mov dh,line
ret
erase endp
Move2 proc
Pushr ax,bx,cx,dx
inc dh
Xor ch,ch
Mov line,dh
Mov column,dl
Next2: mov cx,3
call view
inc dh
mov cx,3
call view
Call delay
Cmp dh,lowline
Ja done2
Call Erase2
jmp next2
done2: Popr ax,bx,cx,dx
Ret
Move2 endp
Erase2 proc
Mov dh,line
Mov dl,column
mov cx,4
call view1
inc dh
mov cx,4
call view1
mov dl,column
inc line
mov dh,line
ret
erase2 endp
Move_l proc
Pushr ax,bx,cx,dx
mov dh,1
mov dl,35
mov bh,0
Xor ch,ch
Mov line,dh
Mov column,dl
Next_l: mov cx,4
call view
inc dh
add dl,3
mov cx,1
call view
Call delay
Call Erase_l
Cmp dh,endy
Ja done_l
Call Erase_l
jmp Next_l
done_l: Popr ax,bx,cx,dx
Ret
Move_l endp
Erase_l proc
Mov dh,line
Mov dl,column
mov cx,4
call view1
inc dh
add dl,3
mov cx,1
call view1
dec column
mov dl,column
inc line
mov dh,line
ret
Erase_l endp
Move1 proc
Pushr ax,bx,cx,dx
mov dh,startx
mov dl,starty
Xor ch,ch
Mov line,dh
Mov column,dl
Next1:
mov cx,1
call view
inc dh
mov cx,1
call view
sub dl,2
inc dh
mov cx,3
call view
Call delay
Cmp dh,lowline
Ja done1
Call Erase1
jmp next1
done1: Popr ax,bx,cx,dx
Ret
Move1 endp
Erase1 proc
Mov dh,line
Mov dl,column
mov cx,1
call view1
inc dh
mov cx,1
call view1
sub dl,2
inc dh
mov cx,3
call view1
mov dl,column
inc line
mov dh,line
ret
erase1 endp
Move3 proc;移动T方块
Pushr ax,bx,cx,dx
inc dh
Xor ch,ch
Mov line,dh
Mov column,dl
Next3: mov cx,2
call view
inc dh
sub dl,2
mov cx,6
call view
Call delay
Cmp dh,lowline
Ja done3
Call Erase3
jmp next3
done3: Popr ax,bx,cx,dx
Ret
Move3 endp
Erase3 proc
Mov dh,line
Mov dl,column
mov cx,2
call view1
sub dl,2
inc dh
mov cx,6
call view1
cmp column,37
ja do3
inc column
do3: mov dl,column
inc line
mov dh,line
ret
erase3 endp
Move4 proc
Pushr ax,bx,cx,dx
inc dh
Xor ch,ch
Mov line,dh
Mov column,dl
Next4: mov cx,7
call view
Call delay
Cmp dh,lowline
Ja done4
Call Erase4
jmp next4
done4: Popr ax,bx,cx,dx
Ret
Move4 endp
Erase4 proc
Mov dh,line
Mov dl,column
mov cx,7
call view1
mov al,endy
cmp column,al
jb do4
dec column
do4: mov dl,column
inc line
mov dh,line
ret
erase4 endp
Move_T proc
Pushr ax,bx,cx,dx
mov dh,1
mov dl,35
mov bh,0
Xor ch,ch
Mov line,dh
Mov column,dl
Next_T: mov cx,2
call view
inc dh
sub dl,2
mov cx,6
call view
Call delay
Call Erase_T
Cmp dh,endy
Ja done_T
jmp Next_T
done_T: Popr ax,bx,cx,dx
Ret
Move_T endp
Erase_T proc
Mov dh,line
Mov dl,column
mov cx,2
call view1
inc dh
sub dl,2
mov cx,6
call view1
inc column
mov dl,column
inc line
mov dh,line
ret
Erase_T endp
MoveT proc
Pushr ax,bx,cx,dx
mov dh,startx
mov dl,starty
Xor ch,ch
Mov line,dh
Mov column,dl
NextT:
mov cx,6
call view
add dl,2
inc dh
mov cx,2
call view
Call delay
Cmp dh,lowline
Ja doneT
Call EraseT
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -