汇编网首页登录博客注册
yang5731的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
学习动态
最新留言
友情链接

[2011-03-09 18:26] 贪吃蛇

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
评论次数(0)  |  浏览次数(1132)  |  类型(章节要点) |  收藏此文  | 
 
 请输入验证码  (提示:点击验证码输入框,以获取验证码