首页 > 代码库 > 8086汇编双人贪食蛇游戏

8086汇编双人贪食蛇游戏

突然找到4年前自己写的纯8086汇编语言双人贪食蛇游戏,绝对原创代码纯手打。分享给有需要参考的童鞋!


Download : http://download.csdn.net/detail/yarkey09/7415405

源码:game1205.asm

可运行文件:GAME1205.EXE ( Windows XP 32bit 环境下测试成功 )

字库文件:HZK24

位图图片:256.bmp


主要涉及以下几大难点:

1,8086汇编语言语法

2,BIOS/DOS系统中断功能调用

3,中断向量表修改与恢复(定时中断)

4,BMP图片的解码与显示

5,汉字库文件的解码与显示

6,贪食蛇游戏数据结构与算法实现


一,调用系统中断切换为VGA256显示模式

VIDEO           equ     0a000h      ;VGA256模式下的视频存储区段基址

setvga          macro
                push    ax
                mov     ah,00h
                mov     al,13h
                int     10h         ;进入VGA256图形模式
                mov     ax,VIDEO    ;设置es为段基址
                mov     es,ax
                pop     ax
                endm
切换为VGA256显示模式后,我们的屏幕分辨率为320*200,每个像素都对应内存的一个字节空间。这是后面所有操作的基础。所有的界面效果都是通过操作内存实现!

二,Bmp图片解码与显示


Windows自带画图工具便可创建一张320*200的Bmp图片。Bmp文件格式包括:文件头区,调色板数据区,文件图像区。


三,鼠标上下键选择 单打/双打,按Enter键确定


这里主要完成汉字的显示。可以网上找到 HZK24 汉字库点阵文件(24*24字模)。

汉字区位码与汉字库文件偏移量的 换算式子:72 * ((left - 161)* 94 + right - 161)

;输出中文单个字符函数
;主导为24*24字模
;参数:[si]:left,right,xxxx,yyyy,color

put_hz          proc    near

                push    ax
                push    bx
                push    cx
                push    dx
                push    si
                push    di

                ;为读打开文件
                mov     ah,3dh
                mov     al,0
                mov     dx,offset filename
                INT     21H
                mov     hzkfile,ax
                jc      putexit      ;如果打开文件失败,则退出

                ;计算文件指针偏移量
                mov     al,[si]
                sub     al,161       ;left - 161
                mov     dx,94        ;(left - 161)* 94
                mov     ah,0
                mul     dx           ;结果存入dx:ax
                add     al,[si+1]    ;(left - 161)* 94 + right
                adc     ah,0
                adc     dx,0
                sub     ax,161       ;(left - 161)* 94 + right - 161
                sbb     dx,0
                mov     bx,dx        ;暂存入bx
		;
                mov     cx,WORDSIZE  ;24*24字模
                mul     cx           ;72 * ((left - 161)* 94 + right - 161)
                add     dx,bx
                xchg    ax,dx
                mov     cx,ax         ;cx:dx为文件指针位移量

                ;文件指针偏移
                mov     ah,42h
                mov     al,0          ;从文件头开始偏移
                mov     bx,hzkfile
                int     21h

                ;开始边读文件边输出中文
                mov     hzkwidth,WORDWIDTH

nextrow:
                ;读取字模的一行,一次读3个字节;读取后,文件指针自动向后移
                mov     ah,3fh
                mov     bx,hzkfile
                mov     cx,WIDTHBYTE    ;一行有3个字节
                mov     dx,offset datatemp
                int     21h
		
                ;按照数组输出一行
                mov     al,WIDTHBYTE    ;一行3个字节
                mov     bx,offset datatemp

nextbyte:
                mov     ah,8            ;一个字节有8位
                mov     dl,[bx]         ;datatemp
                mov     di,offset bit

nextbit:
                test    dl,[di]	        ;bit
                jz      nono
                call	disp            ;显示出来

nono:
                inc     di
                dec     ah
                jnz     nextbit
                ;
                inc     bx
                dec     al
                jnz     nextbyte
                ;
                dec     hzkwidth
                jnz     nextrow
                ;
                ;关闭文件
                mov     ah,3eh
                mov     bx,hzkfile
                int     21h

                pop     di
                pop     si
                pop     dx
                pop     cx
                pop     bx
                pop     ax
putexit:
                ret


四,不同等级代表贪食蛇的移动速度( 菜鸟级/入门级/提高级/大师级/骨灰级 )



五,游戏中两蛇分别计分。撞墙或者相撞,会导致Game Over。

按Enter键暂停游戏,按Esc键退出游戏



---- end ----