没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
1
目 录
1. 概述........................................................................................................3
2. 相关技术................................................................................................3
2.1 透明贴图函数................................................................................3
2.2 CObList 链表..................................................................................4
2.3 获取矩形区域函数........................................................................4
2.4 添加背景音乐函数........................................................................4
2.5 弹出对话框函数............................................................................5
2.6 屏幕滚动函数................................................................................5
2.7 键盘控制战机位置的函数............................................................5
2.8 设置定时器....................................................................................5
2.9 双缓冲技术....................................................................................5
2.11 内存释放技术..............................................................................6
3. 总体设计与详细设计............................................................................6
3.1 系统模块划分................................................................................7
3.2 主要功能模块................................................................................7
3.3 扩展功能设计思路........................................................................8
4. 编码实现................................................................................................8
4.1 游戏各项数值初始化....................................................................8
4.2 定时器............................................................................................8
2
4.3 滚动背景........................................................................................8
4.4 键盘控制函数................................................................................9
4.5 文字显示......................................................................................10
4.6 敌机对象定时产生子弹代码.......................................................11
4.7 爆炸效果代码...............................................................................11
4.8 判断两个物体是否相交代码.......................................................11
4.9 显示导弹代码...............................................................................11
4.10 重新开始或者结束游戏游戏代码............................................12
4.11 boss 类代码................................................................................13
4.12 追踪子弹类代码........................................................................14
4.13 保护膜类代码............................................................................15
4.14 加速大招类代码........................................................................15
4.15 爆炸类代码................................................................................16
4.16 战机类代码................................................................................17
4.17 敌机类代码................................................................................18
4.18 敌机子弹类代码........................................................................19
4.19 战机导弹类代码........................................................................20
4.20 生命补给箱类代码....................................................................21
5. 实训中遇到的主要问题及解决方法..................................................22
6. 实训体会..............................................................................................22
3
1. 概述
此次实训主要是用 MFC 做一个飞机大战的小型电脑游戏,我实现的主要功能为:实现
游戏对象的技能特效,保护膜特效,爆炸特效、背景音乐特效、生命属性掉落物和 boss
及其 boss 技能特效,背景滚动特效,关卡,游戏结束返归弹框,其主要是遵循一定的游
戏规则进行游戏。
游戏中的主要角色可分为如下几个基本部分:战机、敌机、战机的导弹、敌机的子弹。
Boss,boss 追踪导弹、生命补给箱、保护膜其主要遵循的游戏规则为:战机数量为 1;
由玩家通过键盘控制(方向键控制位置、空格键发射导弹、ctrl 键开启保护膜,shift 使用
加速技能)战机;导弹释放存在间隔,有一定的运行速度;导弹遇到敌机发生爆炸,敌机
被炸毁,导弹消失,玩家得分;自身撞击敌机自身与敌机均爆炸;由计算机控制敌机自动
向战机发动攻击;敌机数量随机但随关卡增加,发射子弹速度随机,随关卡难度增加;敌
机从游戏区域的上端进入,左右位置随机;敌机行驶期间,不左右移动,不反向移动;子
弹运行线路为直线,或从下至上,不可左右移动。纵向由发射位置起至游戏区域结束;炸
弹遇到战机时发生爆炸,战机生命减一,到 0 炸毁结束,炸弹消失,游戏结束;中途会有
掉落物增加生命值,可左右移动,上下速度随机,boss 循环出现,到屏幕中央开始发射追
踪导弹,一直向我方逼近,可射击导弹,导弹不会自己消失,boss 追踪炸弹运行时有速度
限制。
2. 相关技术
此次实训的飞机大战游戏其中的技术主要就是一些函数、内存释放,背景滚动和双缓
冲技术。
2.1 透明贴图函数
此次实训中用于贴图的函数:
static CImageList m_Images;
CGameObject::LoadImage(m_Images, IDB_boss, RGB(0, 0, 0),
BOSS_WIDTH, BOSS_HEIGHT, 1); //此函数主要用于将图片放入图像链表 imageList
4
中。
return m_Images.Draw(pDC, 0, m_ptPos, ILD_NORMAL); // 此函数主要是讲
img_Bomb1 链表中的图像显示在 pDC 这个句柄中。其中主要就是 CImageList 图像列
表。它是相同大小图像的一个集合,每个集合中均以 0 为图像的索引序号基数,图像列表
通常由大图标或位图构成,其中包含透明位图模式。可以利用 WINDOWS32 位应用程序
接口函数 API 来绘制、建立和删除图像,并能实现增加、删除、替换和拖动图像等操作。
2.2 CObList 链表
CObList Enemylist; //主要是定义一个 CObList 类的一个链表对象用于存储所有的
此种相关的对象,易于后续的添加删除和提取数据。
POSITION posEN = Enemylist.GetHeadPosition(), tmp_posEN = NULL;//定义
指针,读取头结点
while (posEN != NULL)
CEnemy *ene = (CEnemy *)Enemylist.GetNext(posEN);//指针读取下
一个结点
2.3 获取矩形区域函数
CRect rc; //定义
GetClientRect(&rc); //获取其矩形区域 获取结果课为:rc.Width() //矩形区域
rc.Height() //矩形区域的高度
CRect tmpRect;
tmpRect.IntersectRect(&bRect,eRect))//判断两个矩形是否有交接
2.4 添加背景音乐函数
PlaySound((LPCTSTR)IDR_WAVE1, AfxGetInstanceHandle(),
SND_RESOURCE | SND_ASYNC | SND_LOOP);; //此函数用于将 ID 为 IDR_WAVE1 的
音频在执行此语句时进行播放并循环。
5
2.5 弹出对话框函数
if (AfxMessageBox(L"GAME OVER! whether to retry?", MB_YESNO) ==
6)//此函数主要是弹出对话框供用户进行选择,当用户点击确定按钮时执行此函数的{}内
的语句进行继续运行。
2.6 屏幕滚动函数
ppDC.BitBlt(0, run, rect.Width(), rect.Height() - run, &cdcbk, 0, 0,
SRCCOPY);
ppDC.BitBlt(0, 0, rect.Width(),run, &cdcbk, 0, rect.Height()-run,
SRCCOPY);//滚屏
2.7 键盘控制战机位置的函数
void CPlaneFightView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT
nFlags)//用于键盘控制其位置
其中 GetKey(int nVirtKey) 用于使键盘更加的灵活课进行粘连。
2.8 设置定时器
定时器告诉 WINDOWS 一个时间间隔,然后 WINDOWS 以此时间间隔周期性触发程
序。通常有两种方法来实现:发送 WM_TIMER 消息和调用应用程序定义的回调函数。
SetTimer(1,150,NULL); //设置每 150 毫秒刷新一次
KillTimer(1);//释放定义的定时器
2.9 双缓冲技术
关于双缓冲技术主要就是利用缓存的原理进行将所有的东西都先存在一个缓冲得虚拟
的区域,然后再一次性的将所有的虚拟缓存中的东西都放入实在的存储器中。
CDC*pDC=GetDC();
CDC dcMem;
dcMem.CreateCompatibleDC(pDC);//依附窗口 DC 创建兼容内存 DC
依 次 , 所 有 的 图 像 文 字 均 存 入 dcMem 中 , 然 后 一 次 性 的 通 过 pDC-
>BitBlt(0,0,rc.Width(),rc.Height(),&dcMem,0,0,SRCCOPY);
将内存 DC 上的图像拷贝到前台
dcMem.DeleteDC();
bmp.DeleteObject();
//pDC->SelectObject(Oldbrush);
ReleaseDC(pDC);
dcMem.FillSolidRect(rc,RGB(255,255,255));
剩余22页未读,继续阅读
资源评论
偷摘月亮了
- 粉丝: 8
- 资源: 55
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功