C++实训报告 - 飞机大战

更新时间:2023-11-06 03:42:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

软件开发生产 实习报告

姓名 班级 实习地点 实习成绩

XXX XXXX XXX 学号 项目名称 实习时间 指导教师签字 XXXXXX 飞机大战游戏 XXX 信息科学与工程学院

2014 年

10 月 6 日

软件开发生产实习报告

1. 实习目的

1.1使学生全面了解软件项目实施的过程,理解软件企业对于程序员的基本素质和技术能力要求。

1.2使学生掌握C++及Window程序设计的基本技术,能够运用MFC技术及其开发环境进行小型项目的开发。

1.3重点培养学生的独立创新精神和查阅资料能力,提高其口头和书面的沟通能力。

1.4使学生掌握快速学习新知识、新技术方法,培养良好的分析问题和解决问题的能力

1.5重点提高学生的编程能力,使学生建立正确的编程理念,养成规范的编程习惯。

2. 实习计划

2.1 C++语言知识复习,尤其是指针的安全和类型转换继承的使用、多态的

使用。

2.2 项目技术学习:Windows窗体消息机制、透明绘图、游戏对象的面向对

象分析和设计、API使用,参考相应的书籍详尽的学习。

2.3 Windows API编程基础练习,实现简单的透明贴图,即把战机图片贴

到屏幕上。

2.4 读懂老师给的游戏项目技术架构设计、游戏对象的面向对象分析和设

计、UML建模,同时把其余的图片包括敌机、子弹、爆炸效果登都贴到屏幕上。

2.5 项目编码、测试(包括讲师演练)、完成基本功能,主要实现战机的控

制移动、敌机的随机出现并移动和敌机发射子弹等。

2.6 项目迭代,完成扩展功能,把本项目的功能(尤其是人工智能部分)

实现。

2.7 全部代码测试并改进,尽可能好的完善项目。

3.实习过程

3.1 技术准备

提高程序编写能力,提高程序调试能力,资料检索、阅读能力,强大的自学能力,加深对面向对象程序设计的理解。具体说来,需要掌握指针的安全和类型转换,继承和组合的区别、继承的使用,多态的使用,GDI的应用以及UML建模,了解游戏编程架构、Win32 API编程。再具体来说: 3.1.1透明贴图实现技术

绘制透明位图的关键就是创建一个“掩码”位图(mask bitmap),这个“掩码”位图是一个单色位图,它是位图中图像的一个单色剪影。

在详细介绍实现过程之前先介绍下所使用的画图函数以及函数参数所代表的功能;整个绘制过程需要使用到BitBlt()函数。整个功能的实现过程如下:

(1) 创建一张大小与需要绘制图像相同的位图作为“掩码”位图; (2) 将新创建的“掩码”位图存储至掩码位图的设备描述表中; (3) 把位图设备描述表的背景设置成“透明色”,不需要显示的颜色;

(4) 复制粘贴位图到“掩码”位图的设备描述表中,这个时候“掩码”位图设备描述表中存放的位图与位图设备描述表中的位图一样;

(5) 把需要透明绘制的位图与对话框绘图相应区域的背景进行逻辑异或操作绘制到对话框上;

(6) 把“掩码”位图与这个时候对话框相应区域的背景进行逻辑与的操作;

(7) 重复步骤5的操作,把需要透明绘制的位图与对话框绘图相应区域的背景进行逻辑异或操作绘制到对话框上;

(8) 最后把系统的画笔还给系统,删除使用过的GDIObject,释放非空的指针,最后把新建的设备描述表也删除。

BOOL CGameObject::LoadImage(CImageList& imgList,UINT bmpID,

COLORREF crMask,int cx,int cy,int nInitial)

{

CBitmap bmp;

if(!bmp.LoadBitmap(bmpID))

return FALSE;

if(!imgList.Create(cx, cy, ILC_COLOR24|ILC_MASK, nInitial, 0))

return FALSE;

imgList.Add(&bmp, crMask);

return TRUE; }

3.1.2 CObList链表

在本程序中我使用了CObList链表来分别存储敌机,炸弹,导弹,爆 炸效果和掉落物品。CobList类似于一个双向链表,POSITION类型的变量 为链表的键。使用POSITION变量,既可以作为链表循环中的循环变量, 也可以作为标记某个位置的标签。我们可以通过获得某元素的

POSITION来访问它。本程序中主要用到的函数有:GetHeadPosition()——获取链表首元素的POSITION,AddTail()——向链表尾部添加新的元素,GetNext( POSITION& rPosition )——返回当前rPosition指向的元素,并使rPosition指向下一个元素。 3.1.3内存释放

在VC/MFC用CDC绘图时,频繁的刷新,屏幕会出现闪烁的现象,CPU时间占用率相当高,绘图效率极低,很容易出现程序崩溃。及时的释放程序所占用的内存资源是非常重要的。在程序中使用到的链表、刷子等占用内存资源的对象都要及时的删除。Delete Brush,List.removeall()等。 3.1.4双缓冲技术

当数据量很大时,绘图可能需要几秒钟甚至更长的时间,而且有时还会出现闪烁现象,为了解决这些问题,可采用双缓冲技术来绘图。 双缓冲实现过程如下:

在内存中创建与画布一致的缓冲区 在缓冲区画图

将缓冲区位图拷贝到当前画布上 释放内存缓冲区

下面给出实现的程序,同样是在OnDraw(CDC *pDC)中: CDC MemDC; //定义一个显示设备对象 CBitmap MemBitmap;//定义一个位图对像 MemDC.CreateCompatibleDC(NULL);

MemBitmap.CreateCompatibleBitmap(MemDC,nWidth,nHeight);//

将位图选入到内存显示设备中

CBitmap* pOldBit=MemDC.SelectObject(&MemBitmap);

MemDC.FillSolidRect(0,0,nWidth,nHeight,RGB(255,255,255));

MemDC.MoveTo(??); MemDC.LineTo(??);

pDC->BitBlt(0,0,nWidth,nHeight,&MemDC,0,0,SRCCOPY); MemDC.SelectObject(pOldBit); MemBitmap.DeleteObject(); MemDC.DeleteDC(); 3.1.5键盘对战机的控制

添加OnKeyDown()和OnKeyUp()函数,用GetKeyState()函数来判断按下了哪个键,通过修改战机的相应参数来实现对战机的控制,如上下左右运动,发射子弹等等。如果战机此时已处于屏幕边缘,则控制战机飞出屏幕的按键信息无效。 3.2 项目实施

按照项目实施计划和技术准备一步一步去实现项目。

3.2.1 功能需求

本程序为飞机大战游戏,飞机大战游戏作为PC中一款桌面游戏,界

面简洁流畅、游戏方式简单,玩起来易于上手。

主要实现的功能如下:

1. 战机数量为1

2.由玩家通过键盘控制(方向键控制位置、默认开启炸弹、空格键发射清屏导弹)战机

本文来源:https://www.bwwdw.com/article/j7r2.html

Top