贪食蛇的汇编代码(8086)

这是一个使用8086汇编语言编写的贪食蛇游戏实践项目,代码较长,包含了游戏初始化、方向控制、碰撞检测等功能。程序通过MASM编译,涉及汇编语言基本结构和流程控制,适合学习汇编语言的初学者参考。
摘要由CSDN通过智能技术生成

这是我学习8086汇编的时候做得一个练习,代码写得比较长,可能有BUG,没认真去测试了,不过结构化做得还算好,应该容易看懂,这是目前这止写得最长的汇编程序,有好几百行代码,汇编语言的基本知识都用到了。

下面是源代码,MASM编译通过:

 

assume cs:code,ss:stack,ds:data

data segment
        db 16 dup(0)        ;第0字节保存颜色,1字节保存方向(1左2右3上4下),2、3字节保存食物所在行和列,4蛇的节数,5级数,67得分数
        db 160 dup(0)        ;食蛇尾的每一节所在的行和列,食蛇尾最大节数80
        db 'game over!',0,'level: 1',0,'scores: 0',0,'wtan',0,'v1.0',0
data ends

stack segment
        dw 32 dup(0)
stack ends

code segment

start:
        mov ax,3
        int 10h
        mov ax,stack 
        mov ss,ax
        mov sp,20h
        mov ax,data
        mov ds,ax

        call show_wall

        call show_level_score
        
        mov al,2
        mov bx,1
        mov [bx],al        ;初始方向向右

        call show_init_snake
        call randrow
s_move:        
        
        call show_rand_star
        call hide_snake_tail

        call show_snake_head
        
        call sleep
        
        mov al,0
        mov ah,0bh
        int 21h
        cmp al,0ffh
        jz s_next
        jmp s_move

s_next:
        mov al,0
        mov ah,07
        int 21h
        cmp al,4bh        ;按键为左箭头
        jz s_left

        cmp al,4dh        ;按键为右箭头
        jz s_right

        cmp al,48h        ;按键为上箭头
        jz s_up

        cmp al,50h        ;按键为下箭头
        jz s_down

        cmp al,39h        ;按键为空格
        jz s_exit
        jmp s_move

s_left:
        mov al,1
        mov bx,1
        mov [bx],al        ;方向改为向左
        jmp s_move

s_right:
        mov al,2
        mov bx,1
        mov [bx],al        ;方向改为向右
        jmp s_move

s_up:
        mov al,3
        mov bx,1
        mov [bx],al        ;方向改为向上
        jmp s_move

s_down:
        mov al,4
        mov bx,1
        mov [bx],al        ;方向改为向下
        jmp s_move

s_exit:
        mov ax,4c00h
        int 21h

;------------------------------------睡眼
sleep:
        push bx
        push cx
        
        mov bx,500
s7:        mov cx,65535
s6:        loop s6

        dec bx
        jnz s7

        pop cx
        pop bx        
        ret

;------------------------------------得到随机行和列
;参数:无
;返回:无

randrow:
        push ax
        push bx
        push dx

        call srand
        mov ax,dx
        and ah,00001111b
        mov dl,22
        div dl
        inc ah
        mov bx,2
        mov [bx],ah
        
        call srand
        mov ax,dx
        and ah,00001111b
        mov dl,58
        div dl
        inc ah
        mov bx,3
        mov [bx],ah

        pop dx
        pop bx

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值