




已阅读5页,还剩14页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
辽 宁 工 业 大 学C+语言程序设计课程设计(论文)题目: 一个简单的飞行射击游戏 院(系): 软 件 学 院 专业班级: 学 号: 学生姓名: 指导教师: 教师职称: 起止时间:2011.12.12-2011.12.25课程设计(论文)任务及评语院(系):软件学院 教研室:软件教研室学 号学生姓名专业班级课程设计(论文)题目一个简单的飞行射击游戏课程设计(论文)任务程序设计的任务与要求:(1). 掌握面向对象程序设计语言C+的基本语法(2). 掌握C+面向对象设计的思想(3). 掌握VC+6.0与DEV C+ 开发工具的使用 (4). 运用标准C+规范设计应用程序设计过程中,要严格遵守设计的时间安排,听从指导教师的指导。正确地完成上述内容,规范完整地撰写出设计报告。指导教师评语及成绩 成绩: 指导教师签字: 年 月 日辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文) 目 录第1章 课程设计目的与要求11.1 设计目的11.2实验环境11.3预备知识11.4设计要求1第2章 课程设计内容22.1 课题描述22.2 系统设计22.2.1功能分析32.2.2面向对象设计52.2.2类成员描述62.3程序实现72.3.1源码分析72.3.2运行结果14第3章 课程设计总结15参考文献16第1章 课程设计目的与要求1.1 设计目的将理论教学中涉及到的知识点贯穿起来,对不同的数据类型、程序控制结构、数据结构作一比较和总结,结合设计题目进行综合性应用,对所学知识达到融会贯通的程度。通过课程设计,学生在下述各方面的能力应该得到锻炼:(1)进一步巩固、加深学生所学专业课程C+语言教程的基本理论知识,理论联系实际,进一步培养学生综合分析问题,解决问题的能力。(2)全面考核学生所掌握的基本理论知识及其实际业务能力,从而达到提高学生素质的最终目的。(3)利用所学知识,开发小型应用系统,掌握运用C+语言编写调试应用系统程序,训练独立开发应用系统,进行数据处理的综合能力。(4)对于给定的设计题目,如何进行分析,理清思路,并给出相应的数学模型。(5)掌握面向对象程序设计的方法。(6)熟练掌握C+语言的基本语法,灵活运用各种数据类型。(7)进一步掌握在集成环境下如何调试程序和修改程序。1.2实验环境硬件要求能运行Windows 操作系统的微机系统。C+语言应用程序开发软件使用:VC+ 系统,或其他C+语言应用程序开发软件。1.3预备知识熟悉C+语言程序设计的基本知识及VC+编辑器的使用方法。1.4设计要求1.仔细分析设计题目,画出程序流程图,编写程序源代码。2.积极上机调试源程序,增强编程技巧与调程能力。3.认真书写课程设计预习报告,课程设计说明书。4.遵守课程设计要求和机房管理制度,服从指导教师的安排,确保课程设计的顺利完成课程设计内容。第2章 课程设计内容2.1 课题描述项目选题为做一个飞行射击游戏。游戏中有各总各样的敌机和武器,敌机按一定的几率出现,玩家消灭敌机后可得分数奖励,达到一定分数后会升级,游戏难度随着玩家级数的增加而增大。游戏有很多爆炸场面,增加了刺激性。屏幕上有各种各样的战斗机、子弹,他们的行为各异。面向对象允许各种角色的特性、行为等封装在各种各样的角色类中,作为游戏的其它功能模块,它不必关心角色是怎样运动的,而只需简单地让它自己去走,也即是把所有角色对象的Update()函数调用一次,简单得很。2.2 系统设计系统流程图说明:程序初始化后,开始登陆系统或者选择退出系统。系统登录成功后选择游戏级别,初玩者是从最低级别开始。随着游戏的进行,屏幕上显示各种详细的数据。包括帧速率,生命值,武器,杀敌,分数,级数等。玩家胜利晋级,失败死亡。可以选择继续游戏或者退出系统。飞行射击游戏的系统流程图如下所示程序初始化登陆或者退出从相应级别开始射击详细数据显示晋级或者死亡退出系统图2.1飞行射击游戏系统流程图2.2.1功能分析游戏中有子弹系统、敌机系统、碰撞系统、图像显示等各个模块,将来还可能加入背景渲染、图形菜单、声音等功能模块。尽管各个模块均有复杂的功能,利用面向对象,我可以把各个模块功能的内部实现封装在一个个类中,只提供外部接口。这样,就可以做到各个模块只进行必要的通讯、交互,内部独立运作,互不干扰。操作方法: 按方向键飞行,按 Tab键武器,按空格键开火。 根据正常帧速率和当前帧速率的比例关系来重新计算角色的移动速度,使游戏在较低配置的电脑上也能按正常的速度运行。(一)根据系统功能要求,可以将问题解决分为以下步骤:(1)分析系统中的各个实体之间的关系及其属性和行为;(2)根据问题描述,设计系统的类层次;(3)完成类层次中各个类的描述(包括属性和方法);(4)完成类中各个成员函数的定义;(5)完成系统的应用模块;(6)功能调试;(二)在程序设计中,重点考虑的问题有:(1)数据类型的定义;(2)自定义构造函数的初始化与析构函数的调用;(3)数组与指针的使用;(4)虚函数的恰当运用;(4)每个类提供给外部函数的权限控制;(5)类的派生与继承的合理使用,友元函数的使用,还要重点考虑链表的正确运用。(三)本程序涉及了面向对象的设计过程中的类的概念,其中有:(1)类的定义:类(Class)实际上是对某种类型的对象定义变量和方法的原型。示对现实生活中一类具有共同特征的事物的抽象,是面向对象编程的基础。(2)类的构造函数的定义:与类名称具有一样名称的成员函数是构造函数。构造函数不能有返回值,甚至不能有return语句。说明一个有返回值的构造函数是错误的,取构造函数的地址也是错误的。如果一个类有构造函数,在程序中每个该类类型的对象在使用之前由此构造函数进行初始化,构造函数是在对象的创建点上被调用的。(3)析构函数的定义:析构函数是“反向”的构造函数。它们在对象被销毁(回收)时调用。设计一个函数为类的析构函数只要在类名之前加上()号。(4)内联函数的定义:内联函数在调用时不是像一般的函数那样要转去执行被调用函数的函数体,执行完成后再转回调用函数中,执行其后语句,而是在调用函数处用内联函数体的代码来替换,这样将会节省调用开销,提高运行速度。2.2.2面向对象设计Sprite-x, y : double-sx, sy, w, h :int-cx, cy, cw, ch :int-dx, dy :double-Used :Bool-ExplosionFrameCount :int-Life, Atackness :int+Update() :void+AdjustPosition() :void+OutOfClient() :bool+OutOfSight() :boolFighterPlane-LastFireTime : int-Firing: bool+LastFireTime : int+Firing :bool+SetLastFireTime():void+Update():void+Fire()=0: virtual void+StartFiring():void+StopFiring():voidEnermySystem-EnermyIndex : void-EnermyCount :void-Difficulty:void+EnermyIndex:void+EnermyCount:void+Difficulty:void+CreateEnermy(int x, int y):void+ResetDifficulty():void+Update():void+AddDifficulty():voidEnermySystem-EnermyIndex : int-Difficulty : int-EnermyCount : int+CreateEnermy(int x, int y): void+AddDifficulty() :void+Update() :void+ResetDifficulty() :voidGameWorld-Width : int-Height :int-PI : int+ShowInfomation() : void+Update() : void+KeyDown(WPARAM KeyCode) : void+KeyUp(WPARAM KeyCode) : void+EnermyFire(Enermy*pEnermy) : void+PlayerFire(Player *pPlayer) : void+ResetPlayer() : void+DrawSprite(Sprite *pSprite) : voidPlayer-speed :double-KillEnermy, Score :int+Update():void+Action(ACTIONNewActi) :void+ChangeWeapon():void图2.2程序中的UML类图2.2.2类成员描述fighterplanebulletspritePlayerBullet_RoundBulletPlayerBullet_MissilePlayerBullet_FireenermyEnermy_MimiEnermy_JackEnermy_Tom图2.3 类成员描述图Sprite类描述: 所有角色类的基类主要数据成员:double , y;/ X坐标和Y坐标intsx, sy, w, h;/ 在素材位图中的位置矩形intcx, cy, cw, ch;/ 碰撞检测用矩形doubledx, dy;/ 速度intLife, Atackness;/ 生命, 攻击力intExplosionFrameCount,/ 爆炸动画帧数ExplosionFrameIndex;/ 爆炸动画当前帧BoolUsed;/ 标记是否应被丢弃Bullet类描述: 由Sprite类派生, 所有子弹类的基类主要成员函数:Bullet(GameWorld *pgw, int x_value, int y_value,double sprite_vx, double sprite_vy);/ 构造函数void SetMovement(double speed, int angle);/ 根据速率和角度计算分速度void Update();/ 刷新static int GetFireInterval(BULLET_TYPE BulletType); / 返回给定类型的子弹的发射时间间隔描述: 由Bullet类派生的子弹类PlayerBullet_Fire类, PlayerBullet_Missile类, PlayerBullet_RoundBullet类, EnermyBullet1类, EnermyBullet2类, EnermyBullet3类FighterPlane类描述: 由Sprite类派生的抽象战斗机类主要数据成员:bool Firing;/ 是否正在开火int LastFireTime;/ 上一次开火的时间主要成员函数:void SetLastFireTime();/ 设置一个随机的上次开火时间void Update();/ 刷新,增加爆炸、开火void StartFiring();/ 开始开火void StopFiring();/ 停止开火virtual void Fire()=0;/ 开火, 纯虚函数Enermy类描述: 由FighterPlane类派生的敌机类主要成员函数:void Update();/ 刷新,增加检测是否可见、自动开火void Fire();/ 开火Enermy_Tom类描述: 由Enermy类派生的敌机类,会自动改变运动方向Enermy_Jack类描述: 由Enermy类派生的敌机类, 斜向发生子弹, 成群结队出现Enermy_Mimi类描述: 由Enermy类派生的敌机类, 横着发射子弹,运动速度快2.3程序实现2.3.1源码分析#ifndef GAMEWORLD_H#define GAMEWORLD_Hclass GameWorld / 游戏类,控制整个游戏过程friend class Display;friend class Sprite;friend class CollisionSystem;HWNDGameWindow;static const int MsPerFrame;double kFPS;struct int LastTime, FrameCount, FPS; FPS;int BufKey, CurKey;int Level;Display*pScreen;Player*pPlayer;BulletSystem*pPlayerBulletSystem, *pEnermyBulletSystem;EnermySystem*pEnermySystem;CollisionSystem *pCollisionSystem;void DrawSprite(Sprite *pSprite);void UpdateFPS();void ShowInfomation();double GetKFPS() return kFPS; public:static const int Width, Height;static const double PI;int Time;GameWorld( HWND);GameWorld();void Update();void KeyDown(WPARAM KeyCode);void KeyUp(WPARAM KeyCode);void EnermyFire(Enermy *pEnermy);void PlayerFire(Player *pPlayer);void ResetPlayer();#endif#include stdafx.h/ 常数定义const int GameWorld:Width=640;const int GameWorld:Height=480;const int GameWorld:MsPerFrame=20;const double GameWorld:PI=3.1415926535897932;/ 构造函数GameWorld:GameWorld(HWND hwnd):GameWindow(hwnd)Time=GetTickCount();ZeroMemory(&FPS, sizeof(FPS);FPS.LastTime = Time;kFPS = 1.0;srand(time(0);BufKey=0;CurKey=0;Level = 1;pScreen= new Display(this);pPlayer= new Player(this, Width/2, Height/2);pPlayerBulletSystem= new BulletSystem(this);pEnermyBulletSystem= new BulletSystem(this);pEnermySystem= new EnermySystem(this);pCollisionSystem= new CollisionSystem(this)/ 释构函数GameWorld:GameWorld() delete pScreen;/ 刷新游戏void GameWorld:Update()int t=GetTickCount();if( t-Time Score = Level*300)pEnermySystem-AddDifficulty();Level+;/ 清空屏幕pScreen-Clear();pCollisionSystem-Update();pEnermyBulletSystem-Update();pPlayerBulletSystem-Update();pEnermySystem-Update();pPlayer-Update();UpdateFPS();ShowInfomation();pScreen-DrawAllToScreen();/ 刷新帧速率void GameWorld:UpdateFPS()FPS.FrameCount+;if( Time-FPS.LastTime = 1000 )FPS.FPS = FPS.FrameCount;FPS.FrameCount = 0;FPS.LastTime=Time;kFPS = (double)1000 / ( MsPerFrame * FPS.FPS )/ 显示信息void GameWorld:ShowInfomation()HDC hdc = pScreen-GetOffscreenDC();ostringstream info;info 帧速率: FPS.FPS (Max:50 k= kFPS );info 生命: Life BulletType )case 0:info 机关炮;break;case 1:info 导弹;break;case 2:info 散弹枪;break;info 杀敌: KillEnermy 分数: Score; info 级数: FireHappened(pEnermy-BulletType, pEnermy-GetX()+pEnermy-w/2, pEnermy-GetY()+pEnermy-h/2, pEnermy-dx, pEnermy-dy);void GameWorld:PlayerFire(Player *pPlayer)pPlayerBulletSystem-FireHappened(pPlayer-BulletType, pPlayer-GetX()+pPlayer-w/2, pPlayer-GetY()+pPlayer-h/2, pPlayer-dx, pPlayer-dy);/ 画角色void GameWorld:DrawSprite(Sprite *pSprite)pScreen-DrawToOffscreen(pSprite-GetX(), pSprite-GetY(), pSprite-w, pSprite-h, pSprite-sx, pSprite-sy, false);/ KeyDownvoid GameWorld:KeyDown(WPARAM KeyCode)switch(KeyCode)case VK_RIGHT:case VK_UP:case VK_DOWN:if(KeyCode=CurKey | KeyCode=BufKey) return;/ 重复的键盘消息,忽略if(BufKey & CurKey) return;/ 同时按3个方向键,非法输入,忽略BufKey=CurKey;CurKey=KeyCode;if( BufKey=VK_LEFT & CurKey=VK_UP | BufKey=VK_UP & CurKey=VK_LEFT )pPlayer-Action( Player:GO_LEFT_UP );else if( BufKey=VK_LEFT & CurKey=VK_DOWN | BufKey=VK_DOWN & CurKey=VK_LEFT )pPlayer-Action( Player:GO_LEFT_DOWN );else if( BufKey=VK_RIGHT & CurKey=VK_UP | BufKey=VK_UP & CurKey=VK_RIGHT )pPlayer-Action( Player:GO_RIGHT_UP );else if( BufKey=VK_RIGHT & CurKey=VK_DOWN | BufKey=VK_DOWN & CurKey=VK_RIGHT )pPlayer-Action( Player:GO_RIGHT_DOWN );elsepPlayer-Action( (Player:ACTION) (Player:GO_LEFT + KeyCode - VK_LEFT) );break;case VK_SPACE:pPlayer-Action(Player:START_FIRING);break;case VK_TAB:pPlayer-Action(Player:CHANGE_WEAPON);break;/ KeyUpvoid GameWorld:KeyUp(WPARAM KeyCode)if(KeyCode=CurKey)CurKey=0;if(BufKey)CurKey=BufKey;BufKey=0;pPlayer-Action( ( Player:ACTION )( CurKey - VK_LEFT ) );ElsepPlayer-Action( Player:STOP_MOVING );else if(KeyCode=BufKey)BufKey=0;else if(KeyCode=VK_SPACE)pPlayer-Action(Player:STOP_FIRING);/ 重置角色void GameWorld:ResetPlayer()delete pPlayer;pPlayer = new Player( this, Width / 2, Height / 2 );Level = 1;pEnermySystem-ResetDifficulty();2.3.2运行结果图2.4 运行结果图第3章 课程设计总结C+是从C语言发展演变而来的一种面向对象的程序设计语言。C+语言主要特点表现在两个方面,一是全面兼容C,二是支持面向对象的方法。由于面向对象方法的突出优点,目前它已经成为开发大型软件采用的主要方法,C+语言是应用最广泛的面向对象的程序设计语言之一。这次课程设计基本上含盖了大学一年级学习到的C+ 语言知识点,课设题目要求不仅要
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 文件分类归档清单表
- 一次意外的相遇我与小狗的故事(4篇)
- 雪国梦幻般的情感描写:初中语文阅读理解教案
- 旅游地理学区域景点考察题库
- 交通行业汽车保险投保情况表格
- 农民教育与职业技能提升的长效机制建设
- 乡村健康教育与文化传承的结合
- 食品安全与质量控制管理知识要点梳理
- 高校预算管理一体化实施的困境与对策研究
- 2025年音乐教育专业考试试卷及答案支持
- 消化道穿孔患者的护理课件
- 作物栽培学智慧树知到期末考试答案章节答案2024年中国农业大学
- 汽车修理厂应急预案汽修厂安全生产事故应急救援综合预案2019-2020新标准完整版实施文件
- 建筑智能化系统工程挂靠协议
- 司法鉴定的奥秘智慧树知到期末考试答案2024年
- 2024春期国开电大专本科《教育学》在线形考 (形考论坛4)试题及答案
- MOOC 高速铁路运营与维护-西南交通大学 中国大学慕课答案
- 11-轮藻植物门课件
- (2024年)健康评估教学教案心电图检查教案
- 方法模型:展开图、还原立体图形
- 2023年广东省中考生物试卷(含答案)
评论
0/150
提交评论