C++课程设计报告(飞机大战) (1).docx
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《C++课程设计报告(飞机大战) (1).docx》由用户(四川天地人教育)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 飞机大战 C+课程设计报告【飞机大战】 1 C+ 课程设计 报告 飞机 大战
- 资源描述:
-
1、C+程序设计A2 课程设计报告 课程名称_C+程序设计 A2_ 课题名称_ 飞机大战_ 专 业_计算机科学与技术_ 班级_1820544_ 学号_ 182054424_ 姓 名_王锐_ 指导教师_韩燕丽_ 2019 年 6 月 15 日 一)、课程设计题目: 飞机大战 二)、目的与要求: 1、目的: (1)要求学生达到熟练掌握 C+语言的基本知识和技能; ( 2)基本掌握面向对象程序设计的基本思路和方法; (3)能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。 2、 基本要求: (1)要求利用面向对象的方法 以及 C+的编程思路来完成系统的设计。 (2)在系统的设计中,要求运用面
2、向对象的机制( 继承及多态性 ),来实现系统 功 能,并且要建立清晰的类层次结构。 (3)在系统设计中要分析和定义各个类,每个类中要有各自的数据成员和成员数。 (4)主函数中提供 菜单选项 ,并给出足够的选择信息以及提示信息。 (5)程序具有一定的 健壮性 , 不会因为用户的输入错误引起程序运行错误而中断 执 行。对输入值的类型、大小范围、字符串的长度等,进行正确性检查,对不合法 的输入值 给出出错信息,指出错误类型,等待重新输入。 3、 创新要求: 在基本要求达到后,可进行创新设计,如根据查找结果进行修改的功能。 三)、设计方法和基本原理: 功能要求: 设计一个基于控制台的简洁流畅的飞机大战
3、游戏。 问题的解决方案: 根据系统功能要求,可以将问题解决分为以下步骤: (1)应用系统分析,建立该系统的功能模块框图以及界面的组织和设计; (2)分析系统中的各个实体及它们之间的关系包括属性和行为; (3)根据问题描述,设计系统的类层次; (4)完成类层次中各个类的描述(包括属性和方法) ; (5)完成类中各个成员函数的定义; (6)完成系统的应用模块; ( 7)功能调试; (8)完成系统总结报告以及系统使用说明书 目录 1.系统需求分析 . 1. 2.总体设计 .2. 3.详细设计及实现 .5. 4.系统调试 .5. 5.结论 .错.误! 未定义书签。 6.心得体会 .错. 误! 未定义书
4、签。 7.参考书目 .4.5. 1. 系统需求分析 1.1 系统设计的目的与意义: 飞机大战游戏作为 PC 中一款桌面游戏,界面简洁流畅、游戏方式简单玩起来容 易上 手。面向休闲游戏的玩家,例如:家庭、办公人员等,使用人群广泛。 1.2 系统功能需求: 1) 通过键盘,方向键 WASD 键可控制战机的位置,空格键发射子弹, 2) 界面中敌机出现的位置是随机的。 3) 对于随机产生的敌机及子弹,若超出界面,则释放该对象。 4) 战机、敌机、子弹都有生命值,敌机和玩家碰撞、敌机和玩家的子弹碰撞、敌 机的子弹和玩家碰撞、敌机的子弹和玩家的子弹碰撞均需考虑。敌机的生命值为0,则 删除敌机或 BOSS
5、战机生命值为 0,游戏结束。 5) 战机子弹:战机有两种子弹可自由选择。 6) 结束功能:游戏中按下 2 会结束游戏,再次按下 Y/N 可继续或者退出游戏。 2. 总体设计 2.1 系统功能分析: 系统通过调用类函数来实现游戏的运行,通过面向对象类的继承、多态等思想在使 程 序简洁的同时保证游戏的正常运行。 2.2 系统功能模块划分与设计: 系统定义了 Bullet() 、 Plane()两个基类, 通过继承得到 Bullet_1() 、 Bullet_2() Bullet_3() 、 Bullet_3() 、Bullet()_4 、Player()等类。Map 类用于地图的绘制,Bullet
6、 类用于子弹的实现, Plane 类是飞机的实现,在通过 Plane 类的继承,编写敌机和战 机类。 2.3 系统功能模块图: 飞机大战 2.4 类的设计 (1)Bullet 类(抽象类)的设计 Bullct bool isOut; bool isDead; int atk; int m_hp_b; Note* noo; vector* m_bull; virtual void draw_on_map(Map* p) = 0; virtual void clear(Map* m) = 0; virtual void init(int x, int y) = 0; virtual void up
7、Date(Map* m) = 0; virtual void overstep(Map* m) = 0; (2) Plane 类的设计: (3) Map 类的设计: P1 ane bool isOut; bool isDead; int atk; int m_hp; char directi on; Note* noo; vector* m_data; virtual void draw_ on _map(Map* p) = 0; virtual void clear(Map* m) = 0; virtual void in it() = 0; virtual void upDate(Map*
8、 m) = 0; virtual void is_game_over() = 0; (4) Manager 类的设计: M; in门客 Map* m; Player* p_m; bool game_over; vectorvE nemy* m_en emy; void draw(); void in it(); void up_date(); bool get_aircraft(); bool get_boss(); void gameStart(); void gameAga in (i nt playerHP); int in tervalE nemy_Aircraft(); int cu
9、rre ntEn emy_Aircraft(); int in tervalE nemy_Boss(); int curre ntEn emy_Boss(); 3. 详细设计及实现 3.1 Public_using 及 stdafx 的实现 / Public_Using.h #pragmaonce / 组成飞机和子弹的节点 struct Note int m_x; int m_y; Note(int x, int y):m_x(x), m_y(y) ; / 枚举类型(自己定义) enum Type KONG,HEAD_F,LEFT_F,RIGHT_F,XUNL_F ,OBSTACLE,B UL
10、LET,SMALL,BOSS,MIND ,B_U_HEAD,SHENTI,B_HEA D,B_LEFT,B_RIGHT ,BOOS,PLAYER,A,B,C,D,E,F,G,H,I,J, K ,BULLET_4_HEAK,BULLET_4_SHENTI ; / stdafx.h / stdafx.h : 标准系统包含文件的包含文件, / 或是经常使用但不常更改的 / 特定于项目的包含文件 / #pragmaonce #include targetver.h #include #include #include #include #include #include #include #inclu
11、de for(i nt i = 0; i m_row; i+ ) delete mapi; using n amespacestd; / TODO:在此处引用程序需要的其他头文件 3.2 地图类的实现 / Map.h #pragmao nee #i nclude Public_Us in g.h class Map public: Map (i nt x=25, i nt y=30); M ap(void); void draw(); void cha nge_map(nt x, i nt y ,Type t);地图的改 变 char* map; int m_row; int m_clo; ;
12、一 / Map.cpp #i nclude stdafx.h #i nclude Map .h #i nclude Public_Usi ng.h Map:Map(i nt x, i nt y) :m_row(x),m_clo(y) map=new char*m_row; for(i nt i = 0; i m_row; i +) _ mapi = n ew charm_clo; memset(mapi, KONG, m_clo); _ Map: Map () delete map; map = NULL; 地图二维指针 行 /列 void Map:draw() for (int i = 0;
13、 i m_row; i+) for (int j = 0; j m_clo; j+) if(mapij = KONG) cout ; elseif(mapij = HEAD_F) cout; elseif(mapij = LEFT_F) cout丄; elseif(mapij = RIGHT_F) coutk; elseif(mapij = BULLET) cout; elseif(mapij = MIND) coutvv; elseif(mapij = SMALL) cout; elseif(mapij = PLAYER) coutvv; elseif(mapij = B_U_HEAD) c
14、outvvv; elseif(mapij = SHENTI) coutvvnelseif(mapij = B_HEAD) coutvv; elseif(mapij = B_LEFT) coutvv、; elseif(mapij = B_RIGHT) coutvvF; elseif(mapij = B) coutvv;elseif(mapij = C) coutvv; elseif(mapij = D) coutvv; elseif(mapij = E) coutvv; else if (mapij = F) cout; else if (mapij = G) cout; else if (ma
15、pij = H) cout; else if (mapij = I) cout; else if (mapij = J) cout; else if (mapij = BULLET_4_HEAK) coutV; else if (mapij = BULLET_4_SHENTI) cout; cout* m_bull; 里是指针)一 节点的指针 存放自己包含的节点的容器(这 bool isOut; bool isDead; int atk; int m_hp_b; ; _ _ 是否越界 是否死亡 /攻击力 血量 / Bullet.cpp #i nclude stdafx.h #i nclude
16、Bullet.h #i nclude Map .h Bullet:Bullet( int atk, int m_hp_b, bool isOut, bool isDead):atk(atk),isOut(isOut),isDead(isDead),m_hp_b(m_hp_b) /开空间 m_bull = new vectorvNote*(); Bullet:Bullet() /释放内存 delete m_bull; m_bull = NULL; 2)/ Bullet_1.h #pragmao nee #i nclude Bullet.h class Bullet_1:public Bullet
17、 _ public: Bullet_1(i nt x, i nt y, int atk = 1, i nt m_hp_b = 1); Bullet_1(); virtual void draw_on_map(Map* m); virtual void clearMe(Map* m); virtual void init(int x, int y); virtual void upDate(Map* m); virtual void overstep(Map* m); ; / Bullet_1.cpp #includestdafx.h #includeBullet_1.h #includeMap
18、.h Bullet_1:Bullet_1(int x, int y, int atk, int m_hp_b):Bullet(atk, m_hp_b) init(x, y); Bullet_1:Bullet_1() / 释放内存 delete noo; noo = NULL; void Bullet_1:draw_on_map(Map* m) for(int i = 0; i v m_bull-size(); i +) Note* n = m_bull-at(i); / 循环返回容器元素的位置 m-change_map(n-m_x, n-m_y, BULLET); void Bullet_1:
19、clearMe(Map* m) for(int i = 0; i v m_bull-size(); i +) Note* n = m_bull-at(i); m-change_map(n-m_x, n-m_y, KONG); void Bullet_1:init( int x, int y) noo = new Note(x, y); m_bull-push_back(noo); void Bullet_1:upDate(Map* m) / 清空自己的轨迹 clearMe(m); / 自己更新 for(int i = 0; i size(); i +) m_bull-at(i)-m_x-; /
20、 判断是否越界 overstep(m); void Bullet_1:overstep(Map* m) for(int i = 0; i size(); i +) Note* n = m_bull-at(i); if (n-m_x m_y m_x m-m_row - 1 | n-m_y m-m_clo - 1) isOut = true; 3) / Bullet_2.h#pragmaonce #includeBullet.h class Bullet_2:public Bullet public: Bullet_2(int x, int y, int atk = 1); Bullet_2();
21、 virtual void draw_on_map(Map* m); virtual void clearMe(Map* m); virtual void init(int x, int y); virtual void upDate(Map* m); virtual void overstep(Map* m); ; / Bullet_2.cpp #includestdafx.h #includeBullet_2.h #includeMap.h void Bullet_2:upDate(Map* m) #includePublic_Using.h Bullet_2:Bullet_2(int x
22、, int y, int atk):Bullet(atk) init(x, y); Bullet_2:Bullet_2() / 释放内存 delete noo; noo = NULL; void Bullet_2:draw_on_map(Map* m) for(int i = 0; i v m_bull-size(); i +) Note* n = m_bull-at(i); / 循环返回容器元素的位置 m-change_map(n-m_x, n-m_y, BULLET); void Bullet_2:clearMe(Map* m) for(int i = 0; i v m_bull-size
23、(); i +) Note* n = m_bull-at(i); m-change_map(n-m_x, n-m_y, KONG); void Bullet_2:init( int x, int y) / 内存泄漏 noo = new Note(x, y - 1); m_bull-push_back(noo); noo = new Note(x, y + 1); m_bull-push_back(noo); clearMe(m); for(int i = 0; i size(); i +) m_bull-at(i)-m_x-; overstep(m); void Bullet_2:overst
24、ep(Map* m) for(int i = 0; i size(); i +) Note* n = m_bull-at(i); if (n-m_x m_y m_x m-m_row - 1 | n-m_y m-m_clo - 1) isOut = true; 4) / Bullet_3.h#pragmaonce #includeBullet.h class Bullet_3:public Bullet public: Bullet_3(int x, int y, int atk = 1); Bullet_3(); virtual void draw_on_map(Map* m); virtua
25、l void clearMe(Map* m); virtual void init(int x, int y); virtual void upDate(Map* m); virtual void overstep(Map* m); ; / Bullet_3.cpp #includestdafx.h #includeBullet_3.h #includeMap.h #includePublic_Using.h Bullet_3:Bullet_3( int x, int y, int atk):Bullet(atk) init(x, y); Bullet_3:Bullet_3() void Bu
展开阅读全文