C++实训报告 - 飞机大战
更新时间:2023-11-06 03:42:01 阅读量: 教育文库 文档下载
- c实训报告总结推荐度:
- 相关推荐
软件开发生产 实习报告
姓名 班级 实习地点 实习成绩
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.由玩家通过键盘控制(方向键控制位置、默认开启炸弹、空格键发射清屏导弹)战机
正在阅读:
C++实训报告 - 飞机大战11-06
2015年造价工程师各科真题及答案汇总梳理(齐全正确) - 图文01-19
数学补习班02-08
设立基金管理公司项目可行性研究报告10-10
公司技术员年终工作总结例文八篇08-02
拼搏在寻梦之路上01-23
某某县委上半年基础设施建设工作总结08-03
江苏省徐州市2022-2022学年七年级地理下学期期中联考试题04-05
部队个人思想汇报09-08
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- C++
- 大战
- 飞机
- 报告
- 单桩承台塔吊基础专项施工方案
- 华南理工网络教育-工程水文学·作业1答案(1)
- 推荐-中山市2018年高考模拟试题数学(中山一中命题)(附答案) 精品
- 20MWp分布式光伏电站项目外输电线路工程监理实施细则
- 病理学题库
- 小学素质教育实效性探索
- 张永杰梅花卦例集锦
- 浅析企业员工绩效考核制度-以海尔电器集团有限公司为例
- 四川重庆地区李氏家谱摘要大全
- 先秦南海的开发者 - 骆越方国
- 07453007《汇编语言程序设计实验》教学大纲2009-finall
- 南召县云阳镇第三中心小学简介
- 不同类型学生因材施教管理策略研究阶段总结
- 会计试题及答案
- 渔父复习导学案
- 10KV开关柜技术规范书3
- 苏州大学《计算机硬件技术》期末考试
- 评课通讯稿
- 传染病医院建设标准
- 软件项目安装部署手册(模版)