欢迎来到冰豆网! | 帮助中心 分享价值,成长自我!
冰豆网
全部分类
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • 党团工作>
  • ImageVerifierCode 换一换
    首页 冰豆网 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    课程设计报告坦克大战文档格式.docx

    • 资源ID:22553396       资源大小:539.31KB        全文页数:74页
    • 资源格式: DOCX        下载积分:12金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要12金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    课程设计报告坦克大战文档格式.docx

    1、因为之前的学习,我具备了C+语言和面向对象的基础知识,在这个基础上按照实验指南的指导一步一步进行下去,把这款经典游戏做出来。巩固之前所学知识也学习新的知识。2可行性研究1.技术可行性本游戏采用 FunCode和Visual C+6.0进行开发,基于Windows xp和Windows7操作系统。Funcode软件提供了大量基础类库,可以快速方便地构造出游戏软件。之前课程学习过C+,具有一定的C+语言开发基础,对面向程序设计有一定了解。2.经济可行性此次课程设计由我一人完成,只需装有Funcode及Visual C+的电脑一台,无资金需求;且制作出来的游戏软件并不打算发行,也无后期资金需求,经济

    2、完全可行。3.操作可行性本游戏只需用W、A、S、D来移动,用J键进行攻击,操作十分简单,界面友好,符合用户操作习惯。3需求分析1.游戏内容需求在一个战场上,玩家控制坦克,消灭敌方坦克,并防止敌方坦克摧毁我方基地。游戏的具体要求如下:游戏有一个初始页面,如下图。按下任意键开始游戏,玩家控制坦克在战场上穿梭,碰到墙时,不能通过。敌方坦克自由移动,每隔2秒改变一个方向,每隔3秒发射一发子弹。敌方坦克每隔5秒出现一辆,从屏幕上方的左、中、右三个位置依次出现。当玩家被消灭或者我方基地被摧毁或者游戏时间大于30秒的时候,游戏结束。图1 游戏开始前图2 进入游戏2.游戏规则1.按下任意键游戏开始。2.通过W

    3、SAD 键控制玩家坦克上下左右移动,但不能走出边境。3.通过J键控制玩家坦克发射子弹。4.玩家坦克有三条生命,每条命有1点HP,每次被敌方坦克的子弹打到扣除1点HP,当HP=0时,如果玩家生命条数0,则玩家在初始位置复活,否则游戏结束。5.游戏中的地形包括砖墙、海水、钢板、森林、地板5种。6.敌人种类则包括装甲车、轻型坦克、宝物坦克、3种。7.当关卡中的敌方坦克被全部消灭完,则进入下一个关卡,如果当前关卡为最后一关,则游戏通关。8.在界面外用一个文本显示玩家生命条数,一个文本显示当前关卡,一个文本显示敌方坦克剩余数量。4游戏设计1.类的设计 游戏中能直接看到的精灵:玩家坦克、敌方坦克、子弹、地

    4、形、当前关卡文本精灵,当前玩家剩余生命条数文本精灵,当前敌方坦克剩余数量文本精灵。其中,当前关卡文本精灵,玩家剩余生命条数文本精灵,当前敌方坦克剩余数量文本精灵只需要显示响应的数值,可以直接使用CTextSprite类。玩家坦克、敌方坦克、子弹、地形创建相应的类。 可以从玩家坦克和敌方坦克抽象出一个坦克类,作为父类。 坦克类,子弹类,地形类继承CSprite类,通过CSprite类的方法操作精灵。 玩家坦克和敌方坦克被摧毁时,都要播放相应的爆炸动画,这些动画可直接使用CAnimateSprite类。 创建一个游戏类,各个类之间的通信在游戏世界类中进行。该类采用“单例模式”,在程序中只能创建一个

    5、对象。本游戏是坦克大战,该类称为坦克游戏类。创建一个精灵工厂类,用来生成各种精灵类的对象。这就是“工厂模式”。游戏中还有其他类,详见下面类图:图3 类图2.游戏流程1.主流程 游戏分四个状态:未开始、开始、运行和结束。CGameMain类是控制游戏流程的类,游戏屏幕每刷新一次,调用一次该类的GameMainLoop方。GameMainLoop根据m_iGameState的值分别调用该类的GameInit、GameRun和GameEnd方法。这三个方法对应初始化游戏、游戏运行和游戏结束这三个状态。GameInit只执行一次。执行后修改游戏状态。屏幕刷新后,进入状态2,开始执行GameRun方法。

    6、当玩家HP0即玩家坦克不死的时候,GameRun一直被执行。玩家坦克被摧毁后,调用GameEnd执行一次,清除本局游戏数据,恢复游戏未开始状态。主流程图如下:图4 主流程图2.游戏初始化 完成游戏初始工作,界面上的工作:当前关卡初始化为1,创建玩家坦克并放置在指定位置。此外,我们需要创建TankWorld对象,该对象采用单例模式,所以不管游戏运行多少次,TankWorld对象始终只有一个,并且把玩家飞机对象加入到TankWorld对象中。图5 初始化流程图3.游戏运行 游戏运行中,每刷新一次屏幕,需要根据最新数据,更新玩家生命次数,设置玩家移动方向,删除被摧毁的敌方坦克和子弹,判断是否生产新的

    7、电脑坦克。图6 运行流程图玩家坦克处理: 在游戏的运行中,玩家通过WSAD键改变了玩家坦克的移动速度及方向,我们在游戏运行中要实时的向FunCode接口更新玩家数据,达到在屏幕上更新玩家状态。图7 玩家坦克处理流程图电脑坦克处理:删除HP=0的电脑坦克,并播放爆炸动画,判断是否出战新的坦克。图8 电脑坦克处理流程图文本精灵处理:在游戏运行时玩家的生命条数以及当前关卡和敌方坦克剩余数量都会实时发生变化,所以文本精灵的数据也需要实时更新显示。图9 文本精灵处理流程图地形及关卡处理:在游戏运行时地形的属性也是会随着坦克子弹的击中而发生变化的,我们需要在此方法内实时更新地图中所有地形的信息,关卡也会发

    8、生变化,例如初始化关卡,或者销毁关卡等。图10 地形及关卡处理流程图游戏结束:将游戏中剩余的精灵删除,包括删除精灵本身和集合中对应的对象。重新显示游戏开始的提示图片。图11 游戏结束流程图键盘按下事件:本游戏中,游戏状态为1时,按下任意键,游戏状态转为2。游戏状态为2时,玩家按下了WSAD键,分别设置玩家坦克的上下左右速度,当按下的是J键,需要调用玩家坦克的射击方法。图12 键盘按下流程图键盘弹起事件:本游戏中,游戏状态为2时,玩家松开WSAD键,相应设置玩家坦克上下左右速度为0。图13 键盘弹起流程图精灵之间的碰撞本游戏中,坦克均为发送碰撞并且接收碰撞,子弹发送碰撞,地形接收碰撞,宝物接收碰

    9、撞。图14 精灵的碰撞流程图玩家坦克发生碰撞:玩家发生碰撞时,会撞到地形、电脑坦克、宝物。图15 玩家坦克碰撞流程图玩家炮弹发生碰撞:玩家炮弹发送碰撞会撞到地形 、敌方坦克、敌方炮弹。图16玩家炮弹碰撞流程图电脑坦克发送碰撞:电脑坦克会撞到玩家坦克、地形、撞到盟友。图17 电脑坦克碰撞 电脑坦克炮弹发送碰撞: 电脑坦克炮弹需要处理撞到玩家坦克、地形、盟友。图18 电脑坦克炮弹碰撞世界边界碰撞事件:本游戏中,游戏状态为2时,主要处理电脑坦克的世界边界碰撞事件。图19 世界边界碰撞3.游戏序列图游戏初始化在CGameMain类的GameInit方法中完成游戏初始化。图20 游戏初始化键盘按下事件在

    10、CGameMain类的OnKeyDown方法中完成。键盘按下处理三个事件:一个是游戏的开始:按下空格键;一个是玩家坦克的上下左右移动:当游戏状态为2时,且按下了WASD键;一个是玩家坦克发射炮弹:当按下J键。完成该任务后,运行程序。图21 键盘按下事件游戏运行在CGameMain类的GameRun方法中完成游戏运行代码。图22 游戏运行玩家坦克处理主要更新玩家坦克移动方向及速度及是否发射子弹处理。图23 玩家坦克处理电脑坦克处理主要负责删除HP=0的电脑坦克,以及是否生产新的电脑坦克,设置电脑坦克移动速度及方向以及何时改变方向及发射子弹。图24 敌方坦克处理炮弹碰撞处理精灵与精灵的碰撞事件是在

    11、CGameMain类的OnSpriteColSprite方法中完成的。该方法有两个参数,一个是szSrcName,表示发送碰撞的精灵的名称;一个是szTarName,表示接受碰撞的精灵的名称。根据这两个精灵的名称,可以判断碰撞的精灵是什么类型(因为创建精灵时,命名有规则)。子弹只可能与地形、我方坦克、敌方坦克、世界边界等发生碰撞;先判断子弹由敌方还是玩家坦克发出,两者子弹皆可击破地形。图25 炮弹碰撞处理坦克碰撞处理玩家坦克可能与敌方坦克、敌方子弹、地形及世界边界等发生碰撞,敌方坦克类似。与子弹碰撞上面炮弹处理已经描述,坦克无法穿过地形、边界和对方坦克。图26 坦克碰撞处理游戏结束当玩家坦克的

    12、生命条数=0时,一局游戏结束。对应的方法是CGameMain类的GameEnd方法。游戏结束时,删除所有电脑坦克与地形还有玩家坦克,然后重新显示“空格开始”图片,游戏环境又重新回到未开始状态。图27 游戏结束4.游戏用例图玩家坦克用例图:图28 玩家坦克用例图敌方坦克用例图:图29 敌方坦克用例图5游戏代码CGameMain类头文件#ifndef _LESSON_X_H_#define _LESSON_X_H_/#include #includeTankPlayer.hTankEnemy.h#includeusing namespace std;/ 游戏总管类。负责处理游戏主循环、游戏初始化、

    13、结束等工作class CGameMainprivate: int m_iGameState; / 游戏状态,0:结束或者等待开始;1:初始化;2:游戏进行中 CSprite* m_pSplash; CSprite* m_pStart; CTankPlayer* m_pTankPlayer; int m_iBulletNum;/ CTankEnemy* m_pTankEnemy; vector m_vWeapon; float m_fTankEnemyTime; int m_iTankEnemyNumber; CWeapon * m_pAim_nor; CTextSprite* m_pScore

    14、; /表示分数的文本精灵 CTextSprite* m_pHight; /表示最高分的文本精灵 CTextSprite* m_pEnemy;/表示敌人数量的文本精灵 int m_iScore;/分数 int m_iEnemy;/敌人数量 int m_iHight;/几局最高分 float m_fDeltaTime;/表示游戏时间public: CGameMain(); /构造函数 CGameMain(); /析构函数 / Get方法 int GetGameState() return m_iGameState; / Set方法 void SetGameState( const int iSta

    15、te ) m_iGameState = iState; / 游戏主循环等 void GameMainLoop( float fDeltaTime ); void GameInit(); void GameRun( float fDeltaTime ); void GameEnd(); void OnKeyDown( const int iKey, const bool bAltPress, const bool bShiftPress, const bool bCtrlPress ); void OnKeyUp( const int iKey ); void OnSpriteColWorldL

    16、imit( const char *szName, const int iColSide ); void AddBullet( int iDir,float fPosX,float fPosY ,int iOwner); void LoadMap(); CWeapon* FindWeaponByName(const char* szName); void DeleteWeaponByName(const char* szName); void AddTankEnemy(float fDeltaTime); void OnSpriteColSprite(const char *szSrcName

    17、, const char *szTarName); void DeleteAllSprite();/ extern CGameMain g_GameMain;#endif / _LESSON_X_H_源文件Stdio.h#include CommonClass.hLessonX.hBullet.h/CGameMain g_GameMain;CSprite* m_pSplash;CSprite* m_pStart;CTankPlayer* m_pTankplayer= new CTankPlayer(myplayer);/*int g_iMap1113= 0,0,0,0,0,0,0,0,0,0,

    18、0,0,0, 0,0,0,1,0,0,0,0,0,1,0,0,0, 0,1,0,1,0,1,1,1,0,1,0,1,0, 0,1,1,1,1,1,0,1,1,1,1,1,0, 0,1,0,1,0,1,0,1,0,1,0,1,0, 0,0,0,0,0,1,0,1,0,0,0,0,0, /0,0,0,0,0,1,0,1,0,0,0,0,0*/int g_iMap1113= 0,0,0,0,0,0,0,0,0,0,0,0,0, 0,1,1,0,0,1,0,1,0,0,1,1,0, 0,1,0,0,0,1,0,1,0,0,0,1,0, 1,1,1,1,1,1,1,1,1,1,1,1,1, 0,0,1,

    19、0,0,1,0,1,0,0,1,0,0, 0,0,0,1,0,0,0,0,0,1,0,0,0, 0,0,1,0,1,0,0,0,1,0,1,0,0, 0,1,0,1,0,0,0,0,0,1,0,1,0, 0,0,0,0,0,1,1,1,0,0,0,0,0, 0,0,0,0,0,1,0,1,0,0,0,0,0/=/ 大体的程序流程为:GameMainLoop函数为主循环函数,在引擎每帧刷新屏幕图像之后,都会被调用一次。/ 构造函数CGameMain:CGameMain() m_iGameState = 0; m_pSplash = new CSprite(splash m_pStart = ne

    20、w CSprite(start m_pTankPlayer = new CTankPlayer(/ m_pTankEnemy = new CTankEnemy(enemy m_fTankEnemyTime = 0; m_iTankEnemyNumber = 0; m_pScore = new CTextSprite(score m_pHight = new CTextSprite(hight m_pEnemy = new CTextSprite(enemyNum m_iScore=0; m_iEnemy=0; m_iHight = 0; m_fDeltaTime = 0.f;/ 析构函数CGa

    21、meMain() delete m_pSplash; delete m_pStart; delete m_pTankplayer;/ 游戏主循环,此函数将被不停的调用,引擎每刷新一次屏幕,此函数即被调用一次/ 用以处理游戏的开始、进行中、结束等各种状态. / 函数参数fDeltaTime : 上次调用本函数到此次调用本函数的时间间隔,单位:秒void CGameMain:GameMainLoop( float fDeltaTime ) switch( GetGameState() ) / 初始化游戏,清空上一局相关数据 case 1: GameInit(); SetGameState(2);

    22、/ 初始化之后,将游戏状态设置为进行中 break; / 游戏进行中,处理各种游戏逻辑 case 2: / TODO 修改此处游戏循环条件,完成正确游戏逻辑 if(!m_pTankplayer-IsDead() & !m_pAim_nor-IsDead()&m_fDeltaTimeSetSpriteVisible(false); m_pStart- m_pTankPlayer=new CTankPlayer(/新建一个名字是myPlayer的我方坦克对象 m_pTankPlayer-CloneSprite(player/我方坦克克隆在funcode模板中存在的名字为player的坦克,表示新建

    23、的坦克对象有现在精灵的所有属性Init(); /m_pTankEnemy- m_vWeapon.push_back(m_pTankplayer); LoadMap(); m_pAim_nor = new CWeapon(myaim_nor m_pAim_nor-aim_nor m_vWeapon.push_back(m_pAim_nor);SetSpriteCollisionReceive(true);SetSpritePosition(0.f,20.f); m_iBulletNum = 0; m_fTankEnemyTime = 4.f; m_iScore = 0; /m_iHight = 0; m_iEnemy = 0; FILE * fp =fopen(save.dat,r+ if(fp) fread(&m_iHight,sizeof(int),1,fp); fclose(fp); m_pHight-SetTextValue(m_iHight);/


    注意事项

    本文(课程设计报告坦克大战文档格式.docx)为本站会员主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2022 冰点文档网站版权所有

    经营许可证编号:鄂ICP备2022015515号-1

    收起
    展开