escape equ 01h
up equ 48h
down equ 50h
right equ 4dh
left equ 4bh
assume cs:code
data segment
shet dw 40 dup (0)
count dw 2
a dw 1
b dw 2
data ends
code segment
;---------------------------------------------清屏
qingp proc
mov ax,0b800h
mov es,ax
mov si,0
mov cx,2000
q: mov byte ptr es:[si],0
inc si
inc si
loop q
ret
qingp endp
;----------------------------------------------边界
huag proc
mov cx,25
mov si,160
h1: mov byte ptr es:[si],"|"
mov byte ptr es:[si+48],"|"
add si,160
loop h1
mov si,162
mov cx,23
h2: mov byte ptr es:[si],"-"
mov byte ptr es:[si][23*160],"-"
add si,2
loop h2
ret
huag endp
;--------------------------------------------初始化
start: call qingp
call huag
mov ax,data
mov ds,ax
mov di,offset shet
mov ax,0b800h
mov es,ax
mov si,320
mov cx,5
s: add si,2
mov [di],si
add di,2
loop s
call xians
mov byte ptr es:[si+322],"*"
;-------------------------------------------------
s3: call yans ;延时
call fangx ;方向
add si,count
mov di,offset shet
mov bx,si
s1: cmp word ptr [di],0 ;蛇体个数
je s2
add di,2
inc cx
jmp s1
s2: call pand
jmp s3
esca: mov ax,4c00h
int 21h
;----------------------------------------------移动
pand: cmp byte ptr es:[bx],"|"
jne s6
jmp esca
s6: cmp byte ptr es:[bx],"-" ;撞墙死
jne s7
jmp esca
s7: cmp byte ptr es:[bx],"*"
jne s8
push di
s10: cmp [di-2],bx ;自杀死
je esca
sub di,2
loop s10
pop di
mov [di],bx
call xians
call food ;显示新的食物
jmp s9
s8: xchg [di-2],bx
sub di,2
loop s8
mov byte ptr es:[bx],0
call xians
s9: ret
;----------------------------------------------食物
food proc
push ax
push bx
push cx
push dx ;0-23的伪随机数
mov ax,a
mov bx,b
xor ch,ch
mov cl,3
mul cl
add ax,bx
mov cl,24
div cl
mov al,ah ;a=[(a*3)+b]%24]
xor ah,ah
xchg ax,bx ;交换a,b的值
mov a,ax
mov b,bx
nfd: cmp a,1
ja nfx
inc a
jmp nfd
nfx: cmp b,1
jae nf
inc b
nf: mov ax,a
mov cx,160 ;a*160+b*2得到食物的偏移
mul cx
mov bx,ax
mov ax,b
mov cx,2
mul cx
add bx,ax
mov di,offset shet
s12: cmp word ptr [di],0 ;蛇体个数
je s13
add di,2
inc cx
jmp s12
s13: cmp bx,[di-2]
je food
sub di,2
loop s13
mov ax,0b800h
mov es,ax
mov byte ptr es:[bx],"*"
pop dx
pop cx
pop bx
pop ax
ret
food endp
;----------------------------------------------延时
yans proc
push cx
push bx
mov cx,10000
sd: mov bx,20000
sx: dec bx
cmp bx,0
jnz sx
loop sd
pop bx
pop cx
ret
yans endp
;----------------------------------------------显示
xians proc
push bx
push di
push cx
mov di,offset shet
s4: cmp word ptr [di],0
je s5
add di,2
inc cx
jmp s4
s5: mov bx,[di-2]
mov byte ptr es:[bx],"*"
sub di,2
loop s5
pop cx
pop di
pop bx
ret
xians endp
;----------------------------------------------方向
fangx proc
mov ah,1
int 16h
jz sss
cmp ah,escape
jne up1
jmp esca
up1: cmp ah,up
jne down1
mov dx,-160
add dx,count
jz sss
sub dx,count
jmp ssa
down1: cmp ah,down
jne left1
mov dx,160
add dx,count
jz sss
sub dx,count
jmp ssa
left1: cmp ah,left
jne right1
mov dx,-2
add dx,count
jz sss
sub dx,count
jmp ssa
right1: cmp ah,right
jne sss
mov dx,2
add dx,count
jz sss
sub dx,count
ssa: mov count,dx
sss: mov ah,0ch ;清除缓冲区
int 21h
ret
fangx endp
code ends
end start
- [zaixuexi] 我以为是a0=0,a1=1,没仔细看 02/12 09:23
- [yang5731] 不对吧 我的结果应该是对的 N=9时 确实得217 你自己算算。你帮我看看论坛 算法上的程序吧 题 02/11 23:49
- [zaixuexi] 递归不是这么写的哦,我想你肯定没调试过自己写的这代码. 先看C代码吧: unsigned int 02/11 22:58
- [游客] <a href="http://www.playren.com/">整人方法</a> 12/15 17:11
- [wisji8] mov ax,0a0h mul dh mov bx,ax mov ax,2 mul 10/03 16:56
- [yang5731] 谢谢了 课程设计一做出来了 确实不能调用着个····· 08/25 02:50
- [mywiil] 课程设计一要用到这个子程序,这里暂不做评论。 赶紧完成课程设计一吧。 08/21 03:33