funcodeC++课程设计_坦克大战文档推荐

上传人:粗**** 文档编号:135281839 上传时间:2020-06-14 格式:PDF 页数:29 大小:785.11KB
返回 下载 相关 举报
funcodeC++课程设计_坦克大战文档推荐_第1页
第1页 / 共29页
funcodeC++课程设计_坦克大战文档推荐_第2页
第2页 / 共29页
funcodeC++课程设计_坦克大战文档推荐_第3页
第3页 / 共29页
funcodeC++课程设计_坦克大战文档推荐_第4页
第4页 / 共29页
funcodeC++课程设计_坦克大战文档推荐_第5页
第5页 / 共29页
点击查看更多>>
资源描述

《funcodeC++课程设计_坦克大战文档推荐》由会员分享,可在线阅读,更多相关《funcodeC++课程设计_坦克大战文档推荐(29页珍藏版)》请在金锄头文库上搜索。

1、课程设计一坦克大战 一 游戏介绍 相信大部分同学都玩过或看过 坦克大战 这款经典游戏 现在 就由我们自己动手来开发它 只要大家具备了C 语言和面向对象的基础知识 然后按照实验指南的指导一步一步进行下去 相信我们每个同学都能把这款经典游戏做出来 二 实验目标 综合运用C 及其面向对象的知识开发一款小游戏 三 实验内容 在一个战场上 玩家控制坦克 消灭敌方坦克 并防止敌方坦克摧毁我方基地 游戏的具 体要求如下 游戏有一个初始页面 如下图 按下任意键开始游戏 玩家控制坦克在战场上穿梭 碰到墙时 不能通过 敌方坦克自由移动 每隔2 秒改变一个方向 每隔3 秒发射一发子弹 敌方坦克每隔5 秒出现一辆 从

2、屏幕上方的左 中 右三个位置依次出现 当玩家被消灭或者我方基地被摧毁或者游戏时间大于30 秒的时候 游戏结束 游戏开始前 进入游戏 四 游戏的整体框架 实验指南 实验准备 打开 FunCode 创建一个新的C 项目 注意 项目名称必须为英文和数字 且不能有空格 点击 项目 导入地图模板 从对话框中选取名称为TankWar 的模板导入 导入成功后 界面如下 实验一 游戏开始 实验内容 设置游戏标题 按空格键 提示图片消失 游戏进入开始状态 实验运行结果 游戏开始前 按下空格键后 实验思路 按下空格键是键盘按下事件 可在 CSystem OnKeyDown 函数中编写响应代码 为了保证程序结构 的

3、清晰 一致 更好的办法是在CGameMain 类中添加一个相应的键盘按下事件处理函数 然后 在 CSystem OnMouseClick 函数中进行调用 g GameMain 是 CGameMain 类的对象 它是全局变量 在程序运行时最先被创建 实验指导 C 程 序 的 执 行 入 口 是 主 函 数 FunCode的 主 函 数 名 称 叫WinMain 写 在 文 件 中 CSystem SetWindowTitle 是设置程序运行窗口标题的函数 修改如下 CSystem SetWindowTitle 坦克大战 参考 CSystem OnKeyDown 函数 为 CGameMain 类创

4、建一个OnKeyDown 函数 CGameMain 类的 头文件是文件 实现代码写在文件中 因此 先在文件对函数进行声明 函数的返回值和参数列 表都与 CSystem OnKeyDown 函数保持一致 访问权限应该是public 代码如下 void OnKeyDown const int iKey const bool bAltPress const bool bShiftPress const bool bCtrlPress 接着 在文件中对该函数进行定义 void CGameMain OnKeyDown const int iKey const bool bAltPress const b

5、ool bShiftPress const bool bCtrlPress 在 CSystem OnKeyDown 函数 文件中 调用CGameMain OnKeyDown 函数 并将自己的参数传 递给该函数 g GameMain 是是 CGameMain 类的对象 它是全局变量 在程序运行时最先被创 建 因此 我们可以用g GameMain 调用自己的成员函数OnKeyDown iKey bAltPress bShiftPress bCtrlPress FunCode 程序运行时 当发生键盘按下事件 程序首先调用并执行CSystem OnKeyDown 函数 然后由 CSystem OnKe

6、yDown 函数调用并执行CGameMain OnKeyDown 函数 因此 键盘按下事 件的响应代码我们在CGameMain OnKeyDown 函数中编写即可 我们要处理的两个精灵如下图 它们的名称分别是splash 和 start 我们需要创建两个CSprite 类 对象与这两个精灵绑定 在 CGameMain 类中声明两个CSprite 类型 根据面向对象的封装性原理 成员变量的访问权限 应该是 private 代码应该写在哪个文件 请参看前面的实验步骤 CSprite m pSplash CSprite m pStart 在 CGameMain 类的构造函数中 对上面两个指针变量进行

7、初始化 通过调用CSprite 的构造函数 将精灵和精力对象绑定在一起 m pSplash new CSprite splash m pStart new CSprite start 最后 我们在CGameMain OnKeyDown 函数中处理空格键按下事件 if 0 GetGameState if iKey KEY SPACE m iGameState 1 KEY SPACE 是枚举变量KeyCodes 的成员 表示空格键 KeyCodes定义在文件中 该枚举变量定 义了全部的键盘值 注意 必须将 m iGameState 的值改为1 当 GameMainLoop 函数再次执行 时 根据m

8、 iGameState 的值调用并执行GameInit 函数 游戏进入开始状态 进入游戏开始状态时 调用CSprite 类的 SetSpriteVisible 函数将精灵图片设置为不可见 在 GameInit 函数中添加代码 m pSplash SetSpriteVisible false m pStart SetSpriteVisible false 程序执行完CGameMain GameInit 函数后 执行 CGameMain SetGameState 2 将 m iGameState 的值改为2 游戏进入运行状态 在 CGameMain 类的析构函数中delete 本实验创建的指针对象

9、 以释放分配的内存 CGameMain CGameMain delete m pSplash delete m pStart 编译并运行程序 然后按下空格键 看看运行效果 实验二 坦克运动 实验内容 创建坦克类CTankPlayer 游戏开始时 将坦克放置于 0 0 的坐标上 通过按键WSAD 控制坦克上下左右运动 坦克运行到黑色区域边界时不能继续前进 实验运行结果 在区域内运动 运动到区域边界 实验思路 坦克也是精灵 但是它具备一些自己独特的功能 比如通过键盘控制运动 开炮等 因此我们可 以创建一个新的类CTankPlayer 类 并让它继承CSprite 类 通过WASD 键 控制坦克做相

10、应的的上左下右运动 按下某个键 给坦克设置相应方向的运动 速度 松开时 将该方向的速度设为0 表示停止运动 屏幕上最内部的黑色区域为玩家坦克的活动区域 左上角坐标为 26 22 右下角坐标为 26 22 当坦克运动到该区域边界时 坦克不能继续前进 实验指导 通过类向导创建CTankPlayer 类 其继承于CSprite 类 以 VC 为例 第一步 点击菜单 插入 新建类 第二步 在 New Class 对话框中输入类名和父类名 第三步 点击 Change 按钮 在新对话框中修改CTankPlayer 类的头文件和cpp 文件的路径 将头文件保存到项目文件夹的 SourceCode Heade

11、r 文件夹中 将 cpp 文件保存到项目文件夹下的 SourceCode Src 文件夹中 这 里 需 要 特 别 注 意 的 是 创 建 文 件 路 径 的 问 题 所 有 的 h头 文 件 应 该 在 项 目 文 件 夹 SourceCode Header中 所有的 cpp 源文件应该放在项目文件夹下的 SourceCode Src文件夹中 为 CTankPlayer 类添加 m iDir m fSpeedX m fSpeedY m iHp 四个成员变量 成员变 量 用来表示坦克在X 轴和 Y轴方向上的速度以及运行的方向 并且在构造函数中初始化为0 这里规定 m iDir 的值为 0 1

12、2 3 分别表示上 右 下 左 成员函数的声明和定义如何添加 访问权限是什么 可参考实验一 下文不再继续提示 分别 表示运动方向 X 轴 Y轴速度以及血量值 本文档的命名采用匈牙利命名法 m 表示类成员变 量 i 表示整型 f 表示 float 型 sz 表示字符指针 g 表示全局变量等 同时需要在public 权限下定义获取和设置这些变量的Get 和 Set 方法 set 方法 void SetHp int hp m iHp hp void SetDir int dir m iDir dir void SetSpeedX float speedX m fSpeedX speedX void

13、SetSpeedY float speedY m fSpeedY speedY get 方法 int GetHp return m iHp int GetDir return m iDir float GetSpeedX return m fSpeedX float GetSpeedY return m fSpeedY CTankPlayer 的父类是CSprite 类 具体声明查看 构造函数为CSprite const char szName 所以通过上边方法自动生成的类 如果系统自动生成构造函数CTankPlayer void 删除掉它以 及在中自动生成的对构造函数实现的代码 CTankP

14、layer CTankPlayer void 再为 CTankPlayer 类添加新的构造函数 CTankPlayer const char szName CTankPlayer CTankPlayer const char szName CSprite szName 对构造函数进行实现 m iDir 0 m fSpeedX m fSpeedY m iHp 2 子类对象创建时 要先调用父类的构造函数完成父类部分的构造 如果父类没有默认构造函数 子类的构造函数必须显示调用父类的构造函数 CTankPlayer 构造函数调用CSprite 类构造函数 并将参数 szName 的值传递给它 从而将名

15、称为szName 的精灵图片与CTankPlayer 对象绑定起来 为 CTankPlayer 类添加Init 函数 该函数主要用来完成该类的初始化工作 这里 先调用setHp 方法设置血量 然后调用父类的SetSpritePosition 函数将坦克精灵设置在屏幕中央 0 0 处 接下 来给坦克精灵设置时间边界的大小 与世界边界的碰撞模式为WORLD LIMIT NULL 表示精灵与 世界边界碰撞的响应由代码完成 同时设置坦克碰撞模式为发送碰撞和接收碰撞 void CTankPlayer Init SetHp 2 SetSpritePosition SetSpriteWorldLimit W

16、ORLD LIMIT NULL 26 22 26 22 SetSpriteCollisionActive 1 1 设置为可以接受和发生碰撞 SetSpriteVisible true 在 CGameMain 类中增加一个私有成员变量m pTankplayer 类型为CTankPlayer 注意在添加头文件 include 按下空格键后 程序会调用键盘按下事件响应函数 将m iGameState 的值改为1 游戏进入开 始状态 见实验一 程序再次执行CGameMain GameMainLoop函数时 根据m iGameState 的值调用并执行CGameMain GameInit函数 因此 可以在该函数中创建我方坦克 并调用 CTankPlayer Init 函数来完成该类对象的初始化工作 m pTankPlayer new CTankPlayer myplayer 新建一个名字是myPlayer 的我方坦克对象 m pTankPlayer CloneSprite player 我方坦克克隆在funcode 模板中存在的名字为player 的坦 克 表示新建的坦克对象有现在精灵的所有属性

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号