飞机大战实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实训报告
飞机大战游戏设计与开发
专业名称:______ __________
班级:________________________
学号:_________
信息科学与工程学院
二零一二年十二月
目录
1.概述 (3)
2. 相关技术 (3)
2.1 指针的应用 (3)
2.2 动态链表的调用 (3)
3. 总体设计与详细设计 (3)
3.1 系统模块划分 (3)
3.2 主要功能模块 (3)
4. 编码实现 (4)
5. 实训中遇到的主要问题及解决方法 (15)
6. 实训体会 (15)
1. 概述
本项目是通过vb基于c++实现的战斗机通过导弹炸毁敌机以及躲避敌机导弹的一款游戏,游戏里包括躲避敌机轰炸,轰炸敌机,以及打boss,以及通过shift键实现对背后敌机的轰炸。
2. 相关技术
所用的关键技术void Ctest2View::OnTimer(UINT_PTR nIDEvent)在此函数里实现对图像里所出现的一切事物的绘制,在ontimer里主要用到的一个是碰撞即判断两个碰撞物体的矩形区域是否有交集。
2.1 指针的应用
指针类型 pBomb->Draw();pBoss->GetRect();pBoss->GetPoint();指针易于获得某个类的所在的位置,所在的区域、坐标以及图像的绘制
2.2 动态链表的应用
链表类型:例:定义一个链表CObList listBoss;
listExplosion.AddTail(new
CExplosion(plane.GetRect().left,plane.GetRect().top));
plane. GetRect() 通过链表来求出某个类的矩形区域、坐标、以及图形的绘制。
3. 总体设计与详细设计
3.1 系统模块划分
1、void Ctest2View::OnDraw(CDC* pDC)
2、void Ctest2View::OnTimer(UINT_PTR nIDEvent)
3、void Ctest2View::OnInitialUpdate()
4、void Ctest2View::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
5、void Ctest2View::OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags)
3.2 主要功能模块
功能模块分为敌机绘制导弹绘制战机绘制炸弹绘制 boss、boss1绘制、爆炸绘制、插入图片、插入声效以及每关boss的筛选。
主要类图:BALL(炸弹)类 BOSS1类 BOSS类 Enemy(敌机)类 Myplane类
Explosion类 BOMB类
在ontimer里实现对所弹出的icon里所有图像的输出,主要划分为
1、敌机、战机、导弹、boss、背景图片、gameover图片的绘制,以
及爆炸声效,结束声效的实现。
2、实现方向键对飞机的控制,实现space 以及shift键对导弹发射的
控制
4. 编码实现
// test2View.cpp : Ctest2View 类的实现
#include"stdafx.h"
#include"test2.h"
#include"test2Doc.h"
#include"test2View.h"
#pragma comment(lib,"winmm.lib")
#include"mmsystem.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// Ctest2View
IMPLEMENT_DYNCREATE(Ctest2View, CView)
BEGIN_MESSAGE_MAP(Ctest2View, CView)
// 标准打印命令
ON_COMMAND(ID_FILE_PRINT, &CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, &CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, &CView::OnFilePrintPreview) ON_WM_TIMER()
// ON_WM_CREATE()
ON_WM_KEYDOWN()
ON_WM_KEYUP()
END_MESSAGE_MAP()
// Ctest2View 构造/析构
Ctest2View::Ctest2View()
{
// TODO: 在此处添加构造代码
}
Ctest2View::~Ctest2View()
{
}
BOOL Ctest2View::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: 在此处通过修改
// CREATESTRUCT cs 来修改窗口类或样式
return CView::PreCreateWindow(cs);
}
// Ctest2View 绘制
void Ctest2View::OnDraw(CDC* pDC)
{
Ctest2Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
// TODO: 在此处为本机数据添加绘制代码
CRect rect;
GetClientRect(&rect);
pDC->Rectangle(rect);//画边框
CBrush brush;
brush.CreateSolidBrush(RGB(0,150,255));//设置背景颜色
CBrush *oldbrush=pDC->SelectObject(&brush);
pDC->Rectangle(rect);
pDC->SelectObject(oldbrush);
}
// Ctest2View 打印
BOOL Ctest2View::OnPreparePrinting(CPrintInfo* pInfo)
{// 默认准备
return DoPreparePrinting(pInfo);
}
void Ctest2View::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) {
// TODO: 添加额外的打印前进行的初始化过程
}
void Ctest2View::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) {
// TODO: 添加打印后进行的清理过程
}
// Ctest2View 诊断
#ifdef _DEBUG
void Ctest2View::AssertValid() const
{
CView::AssertValid();
}
void Ctest2View::Dump(CDumpContext& dc) const
{