# 基于汇编实现的欢乐QQ堂小游戏
# 一、介绍
本次实现制作了汇编版的QQ堂,使用了VGA 320x200 256色视频显示, FAT12文件系统、时钟中断,nasm + gcc联合编译,通过端口设置调色板。其中除了AI,游戏界面、逻辑等均由汇编实现。游戏具有良好的图形界面,流畅的操作性,令人愉快的玩法,并且有AI与你作战。
**首先展示游戏的开始界面**:
![](http://www.writebug.com/myres/static/uploads/2021/10/19/05d1d24af56ba19cb264ac1cdb6e65be.writebug)
**按任意键可以进入游戏界面**:
![](http://www.writebug.com/myres/static/uploads/2021/10/19/d938cfdb6479cfdfae63009f4fad710b.writebug)
**胜利,成功打败年兽**:
![](http://www.writebug.com/myres/static/uploads/2021/10/19/df439534da5e4c214ac94541efa7858a.writebug)
# 二、实现方式
这里重点说明视频显示的方法:
**进入视频模式**
通过设置ah = 0, al = 13h, 调用0x13号中断,进入320 x 200 256色视频模式。
**视频显存与缓存**
段0xA000为显存段,每个字节对应屏幕上的一个像素。使用一个内存段作绘制缓存,每次更新画面,首先将图像绘制到内存,最后将结果拷贝到显存中,这样的方式避免了屏幕刷新各个图片的层次覆盖出错的问题(如人物被地图覆盖)。
**颜色处理**
- 每个像素对应的字节分为3段,从高位到低位,R、G各占3位,B占2位
- 通过端口设置调色板颜色(color.asm)
- 使用时钟中断,确保屏幕每秒刷新60次,也很好地控制了角色等事件的刷新速度
**图片存储**
图片的存储格式为一个二进制文件,每个字节对应一个像素。使用python脚本tu.py将png或jpg文件转换为二进制文件。
**图片加载**
由于固定段地址后,偏移量的取值范围为64k,而图片总共大小远远超过了这个范围。因此使用了FAT12文件系统存储图片,从文件系统中读取图片文件,并放到指定的不同段中。
# 三、操作方式
- **操作方式**
- 方向键移动
- 空格开始游戏,或者在结束游戏时返回开始界面
- **剧情**
- 年兽来糖果王国踢足球了,你要打败它
- 界面上方为年兽的血量,共5 HP
- 你可以踢足球:-)
- 在驱逐年兽的同时,要避免足球炸弹的伤害
# 四、实验环境与工具
## 4.1 实验环境
- **物理机操作系统**:Arch Linux 4.5.4-1
- **调试使用虚拟机**:qemu-system-i386, bochs
- **虚拟机软件**:VMware Workstation 12 Pro
- **虚拟机配置**:CPU: i7-4702MQ @ 2.20GHz, 使用单核单线程
- **内存**:4 MB
- **硬盘**:32 MB
## 4.2 实验工具
- **编辑器**:Vim 7.4
- **汇编工具**:NASM 2.11.08
- **C语言编译器**:gcc 6.1.1
- **链接工具**:GNU ld 2.26.0.20160501
- **构建工具**:GNU Make 4.1
- **调试工具**:Bochs x86 Emulator 2.6.8
- **虚拟机**:qemu-system-i386
- VMWare Workstation 12 Pro
- **合并文件**:dd
- **图像编辑**:gimp2.8.16
- **地图编辑**:RPG Maker XP 1.02
- 另外使用了Python 2.7的PIL,numpy等库
# 五、小结
这次实验,我做了汇编版的QQ堂,这是我比较喜欢玩的游戏,我觉得我做的游戏在技术上(VGA视频显示,图片的存储与读取,AI,代码规范),细节上(游戏的流畅性,炸弹爆炸的细节(可以看见不同方向的火焰图像是不一样的,火焰距离是根据是否能经过某格判定的),可以重新开始游戏)比较满意的。除了LoadKnl.asm和disk.asm借用了老师的代码,其他代码(游戏本体,AI,图片转换,地图数据导出)都是自己编写的。我在小学的时候,已经能使用RPG Maker XP制作这一个游戏,里面的图片大多数是自己截图并整理的,有趣的是开始界面的图片也是我以前使用画图绘制,现在稍作修改的。在9天的时间内,能通过汇编完成这个游戏的基本框架,我觉得是很大的突破。
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
huibian_QQ_Hall_Games-master.rar (44个子文件)
huibian_QQ_Hall_Games-master
huibian_qq_hall_games_code
src
game
include
rand.asm 276B
map3.asm 813B
color.asm 313B
disk.asm 10KB
keyboard.asm 5KB
map0.asm 1KB
pic
qqt.png 238KB
3.png 47KB
wallpaper_07_800.png 241KB
wallpaper_07_800.jpg 45KB
g.png 15KB
title.png 209KB
lose.png 10KB
wallpaper_07_800.xcf 515KB
win.png 8KB
power.png 24KB
fbqqt.png 79KB
people.png 13KB
2.png 40KB
title2.png 52KB
boss.png 37KB
tools
key.cpp 2KB
tu.py 1KB
key.txt 3KB
makemap.cpp 334B
Makefile 2KB
res
power.asm 14KB
football.asm 8KB
lose.asm 14KB
huoying.asm 152KB
boss.asm 152KB
mappic.asm 200KB
people.asm 24KB
title.asm 374KB
win.asm 14KB
source
kernel.asm 24KB
loadknl.asm 13KB
ai.c 4KB
bochsrc.bxrc 56KB
ReadMe.txt 849B
report
14348134吴侃-汇编HappyQQT.docx 157KB
14348134吴侃-汇编HappyQQT.pdf 360KB
LICENSE 1KB
README.md 4KB
共 44 条
- 1
资源评论
计算机毕设论文
- 粉丝: 1w+
- 资源: 399
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功