突然找到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 ----
原文:http://blog.csdn.net/yarkey09/article/details/27383251