飞机大战实训报告
- 格式:doc
- 大小:301.65 KB
- 文档页数:20
程序设计综合实践
实习报告
学院名称
专业班级
学生姓名
学号
指导教师
山东科技大学
一、实习题目:飞机大战游戏的设计与实现
二、实习时间:18周~ 19周实习地点:
三、实习任务:
1.基本功能要求:飞机大战游戏必须运用透明贴图、按键处理、定时控制、双缓冲技术等技术实现战机(玩家)和敌机(计算机)对战功能
2.扩展功能:在完成基本功能基础上可以增加双人对战、游戏积分制、声音效果、多种子弹类型、客机类型、游戏关卡设计、多种类型敌机、游戏中间结果存贮等功能
四、小组分工说明:自己完成
五、实习成绩
六、指导教师对实习的评语:
指导教师(签章):
2015年月日
目录
1.概述 (4)
1.1实训项目简介 (4)
1.2实训项目功能说明 (4)
2.相关技术 (5)
2.1透明贴图技术 (5)
2.2 获取矩形区域并判断两个矩形区域是否相撞 (5)
2.3鼠标控制我方战机 (5)
2.4 Windows定时器技术 (6)
2.5 CObList链表 (6)
2.6对话框的应用 (7)
2.7双缓冲技术 (7)
3.需求分析 (7)
3.1功能需求分析 (7)
3.2 数据需求分析 . (7)
3.3 行为需求分析 (7)
3.4 其他需求 (7)
4.总体设计与详细设计 (8)
4.1 系统模块划分 (8)
4.2 主要功能模块 (8)
4.2.1系统主要类图 (8)
4.2.2飞机大战游戏设计执行流程图 (8)
4.3 扩展功能设计思路 (9)
4.4 软件结构设计体会 (9)
5.编码实现 (10)
5.1绘制游戏背景位图的程序 (10)
5.2各个游戏对象的绘制 (10)
5.3我方战机位置的动态控制 (12)
5.4各个游戏对象碰撞的实现 (13)
5.5游戏界面输出当前游戏信息 (15)
6.测试情况说明 (17)
6.1主要模块测试情况 (17)
6.2 主要功能测试情况 (18)
7. 实训中遇到的主要问题及解决方法 (19)
8.实训收获与体会 (19)
1. 概述
1.1实训项目简介
本次实训项目是应用MFC编程完成一个界面简洁、运行流畅、操作简单、易于上手的飞机大战。该飞机大战项目运用的主要技术是MFC编程中的一些函数、链表、贴图技术。1.2实训项目功能说明
1.2.1基本功能
(1)设定我方战机有速度初值,可通过键盘方向键控制我方战机位置,空格键控制我方战机发射导弹。
(2)游戏界面中敌机出现的位置、敌机导弹的发射是随机的,敌机有不同的速度。
(3)敌机以及敌机发射的导弹,一旦超出游戏界面边界,则删除出界对象。
(4)敌机导弹击中我方战机、我方战机导弹击中敌机、我方战机与敌机碰撞均会产生爆炸效果。并且产生爆炸效果后,敌机、敌机导弹、我方战机、我方战机导弹消失,我方战机生命值减一,得分加五分。
1.2.2附加功能
(1)为游戏界面添加了背景图片。
(2)为游戏设置积分制,每击落一架敌机或与敌机相撞得分加5分。
(3)敌机从游戏界面上界和下界随机飞出。
(4)为游戏设置关卡制,每得分增加100分自动进入下一关,每进入新的一关,通过减缓我方战机速度来逐渐增加游戏难度。
(5)添加无敌模式,当得分达到1000分后,按“Z”键即可开启无敌模式。开启无敌模式后,我方战机生命值增加到999,并且被敌方战机击中或与敌方战机相撞生命值不减少,击落敌机分数继续增加。
(6)游戏界面显示当前游戏信息,游戏界面左上角分别显示“我的分数、战机生命值、开启无敌模式还需杀敌的数量、关数”,右上角显示“是否开启了无敌模式”,当达到开启无敌模式的条件后,右上角显示“按Z键开启无敌模式”,开启无敌模式后,右上角变为“无敌模式已开启”,右下角显示开启无敌模式需达到的条件,当每进入新的一关,游
戏界面中心显示“玩的不错,进入第X关”。
(7)增加鼠标左键控制我方战机发射导弹的功能。
(8)当我方战机炸毁后,弹出对话框提示玩家是否重新开始游戏。
2. 相关技术
2.1 透明贴图技术
绘制透明位图的关键就是创建一个“掩码”位图(mask bitmap),这个“掩码”位图是一个单色位图,它是位图中图像的一个单色剪影。
(1)DDB可以用MFC中的CBitmap来表示,而DDB一般储存在资源文件中,在加载时只需通过资源ID号就可以将图形装入。
(2)BOOL CBitmap::LoadBitmap(UINT nIDResource)可以装入指定DDB,但是在绘制时必须借助另一个和当前绘图DC兼容的内存DC来进行。
(3)通过CDC::BitBLT()绘制图形,同时指定光栅操作的类型。
2.2 获取矩形区域并判断两个矩形区域是否相撞
首先,使用CRect定义一个对象,然后使用GetRect(&对象名)函数,获取界面的矩形区域rect.Width() 为矩形区域的宽度,rect.Height()为矩形区域的高度。
使用IntersectRect(&,&))函数来判断两个源矩形是否有重合的部分。如果有不为空,则返回非零值;否则,返回0。
2.3鼠标控制我方战机
WM_LBUTTONDOWN(鼠标左键被按下)对应的函数为OnLButtonDown (UINT nFlags,CPoint point)
当鼠标左键被按下时,我方战机两翼开始发射导弹。
void CPlaneGameView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值