版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、FunCode游戏开发设计文档微信版打飞机编写:2017年5月18日目录一、问题定义1二、实验准备1三、可行性分析3四、用例图及类图设计4五、时序图设计与流程描述135.1 游戏初始化135.2键盘相关函数设计145.3 游戏运行相关设计165.4 碰撞函数设计225.5 游戏结束设计23六、编码与实现24Plane 类24Player类25EnemyPlane类26Bullet类27PlaneItem类28SpriteFactory类28PlaneGame类29EnumDefine类32LessonX类34一、问题定义开发一款微信打飞机的小游戏,实现自己飞机击毁敌机得分,吃到加血物品加血,吃
2、到加魔的物品加魔,魔到一定值时可以通过吃掉相应物品在一定时间内获得不同的子弹发射方式和飞机移动速度。规则如下:1.按下空格键游戏开始。2.通过WSAD 键控制玩家飞机移动上下左右移动,但不能飞出边境。3.玩家飞机每隔一段时间自动发射一发炮弹。4.玩家飞机被敌机碰到后,生命值会减少,生命值变为0的时候,游戏结束。5.在游戏上方会一直出现电脑飞机(敌机),敌机分为大、中、小三种类型,越小的飞机出现的几率越大。6.敌机被玩家飞机击中后,生命值会减少,生命值变为0时,该敌机被摧毁,玩家得分。越大的飞机越难击毁,击毁后玩家得分也越多。7.敌机飞到界面下方时,删除敌机。8.在界面外用一个文本显示玩家游戏得
3、分。二、实验准备打开FunCode,创建一个新的C+项目。注意:项目名称必须为英文和数字,且不能有空格。点击“项目”“导入地图模板”,从对话框中选取名称为WarPlane的模板导入。导入成功后,界面如下:查看模板设置。模板设置中有如下几点,在项目开发时需要用到:精灵的名称,创建精灵对象时,通过精灵名称把对象和精灵图片绑定在一起。玩家飞机的链接点,右下图鼠标点击的位置就是玩家飞机的链接点,飞机发散子弹时,位置应该在链接点前方位置。 子弹的碰撞边界的设定,把碰撞边界设置在图片中的有颜色区域,这样敌方飞机实际是碰撞到子弹图片的有颜色区域才发生碰撞事件,从而是游戏效果更逼真。 在“场景预览”窗口中,点
4、击游戏屏幕之外的区域,然后在“编辑”面板中修改“窗口大小”,该属性用来设置游戏运行时屏幕大小。“屏幕位置”中的“宽”“高”则是用来设置“场景预览”窗口中可见区域的大小。按下图进行设置。也可以自行调整这两个区域大小,以及图片大小,从而达到最佳效果。三、可行性分析FunCode作为一个功能比较简单,封装的库函数不多的,游戏开发引擎,上手比较容易,对于开发平台的性能要求也不高,符合技术可行性和系统可行性。四、用例图及类图设计玩家控制飞机移动,飞机自动发射子弹,然后游戏一直循环,当飞机HP归0时游戏结束。飞机类作为其他所有和飞机相关类的基类,PlaneGame类是控制类,这个游戏的主要实现在Plane
5、Game类中完成。包括设定子弹、开火、删除已摧毁精灵、通过名字获得精灵、播放动画、创建敌机、创建物品等动作。类的具体定义如下:飞机类:Plane 继承自CSprite类属性private int iHP飞机生命值private float fPointX飞机当前位置中心点的X坐标private float fPointY飞机当前位置中心点的Y坐标private float fSpeedX飞机X轴方向移动速度private float fSpeedY飞机Y轴方向移动速度方法public int getHP()获取飞机生命值public void setHP(int hp)根据参数设置飞机生命值p
6、ublic float getPointX()获得飞机的X坐标public void setPointX(int x)设置飞机的X坐标public float getPointY()获得飞机的Y坐标public void setPointY(int y)设置飞机的Y坐标public float getMoveSpeedX()获得飞机X轴方向上速度public void setMoveSpeedX(float speedX)设置飞机X轴方向上速度public float getMoveSpeedY()获得飞机Y轴方向上速度public void setMoveSpeedY(float speed
7、Y)设置飞机Y轴方向上速度敌方飞机类:EnemyPlane 继承自Plane类属性private int iValue敌机价值,即玩家飞机击毁敌机后可获得分数private int iType飞机类型。0 大型敌机 1 中型敌机 2 小型敌机方法public int getValue()获取敌机价值public void setValue(int value)设置敌机价值public int getPlaneType()获取敌机类型public void setPlaneType(int planeType)设置敌机类型玩家飞机类:Player 继承自Plane类属性private int i
8、Score玩家得分private float fFireTime玩家发射子弹的时间间隔,可理解为安装子弹需要的时间private float fUsedTime玩家飞机安装子弹已经用去的时间private int iMp魔抗值private bool flag标志位方法public int getScore()获取玩家得分public void setScore(int score)设置玩家得分public float getFireTime()获取玩家子弹发射间隔public void setFireTime(float fireTime)设置玩家子弹发射间隔public float get
9、UsedTime()获取玩家飞机装弹已用时间public void setUsedTime(float usedTime)设置玩家飞机装弹已用时间public void move()玩家飞机移动public void stopMove(int hp)忘记飞机停止移动public void fire()玩家飞机发射子弹public int getMP()获得魔抗public void setMP(int mp)设置魔抗public bool getflag()获得标志位public void setflag()设置标志位子弹类:Bullet 继承自Plane类属性private int iDam
10、age子弹伤害值方法public int getiDamage()获取子弹伤害值public void setiDamage (int val)设置子弹伤害值精灵工厂类:SpriteFactory属性private static int iId静态成员变量。缺省值为0,每复制一个精灵时递增一次,用于作为新生成的精灵名称的后缀。例如:plane1, plane2, bullet3方法public CSprite *getSprite(int type)获取生产出的精灵。type:0 大型敌机 1 中型敌机 2 小型敌机 3 玩家飞机 4 子弹5,6,7,8,9 物品private static
11、Player *createPlayer()创建玩家飞机对象private static EnemyPlane *createEnemyPlane(const int iType)创建敌方飞机对象private static Bullet *createBullet()玩家子弹精灵对象private static PlaneItem *createItem(const int iType)飞机游戏类:PlaneGame属性private static PlaneGame *pGame游戏对象private CTextSprite *pTextScore显示玩家得分的文本精灵private CT
12、extSprite *pTextHp显示玩家生命值的文本精灵private CTextSprite *pTextMp显示玩家魔抗值的文本精灵private Player *pPlayer玩家飞机private List spriteList精灵集合private float fCreateEnemyTime生成一架新敌机的时间间隔,即生产一架新敌机需要的时间private float fUsedEnemyTime生产一架新敌机已经用去的时间private float fCreateItemTime生成一个物品的时间间隔,即生产一个物品需要的时间private float fUsedItemTi
13、me生产一个物品已经用去的时间private float fMPTime魔法能持续的时间private float fMPUsedTime魔法已经持续的时间private int bulletType子弹的类型private float speed飞机加速后的速度方法private PlaneGame()单例模式的做法,构造函数是私有的,用户不能直接创建该类对象public static PlaneGame *getPlaneGame()用户只能通过该方法获得PlaneGame对象,且对象为同一个public CSprite *getSpriteByName(const char* name)
14、通过名称从集合中获取精灵(敌方飞机、子弹)public void setTextScore(int score)设置显示玩家得分的文本精灵对象public void setTextHp(int hp)设置显示玩家血量的文本精灵对象public void setTextMp(int mp)设置显示玩家魔抗的文本精灵对象public int getBulletType()获得子弹类型public void setBulletType(float time)根据时间设置子弹类型public void setBulletType(int type)设置子弹类型public float getfMPTi
15、me()获得魔抗能持续的时间间隔public void setfMPTime(float val)设置魔抗能持续的时间间隔public float getfMPUsedTime()获得魔抗已经持续的时间void setfMPUsedTime(float val)设置魔抗已经持续的时间public Player *getPlayer()获得玩家飞机public void setPlayer(Player *myPlane)设置玩家飞机public float getEnemyPlaneCreateTime()获得产生一架敌机的时间间隔public void setEnemyPlaneCreate
16、Time (float createTime)设置产生一架敌机的时间间隔public float getEnemyPlaneUsedTime()获得生产一架敌机已经用去的敌机public void setEnemyPlaneUsedTime(float usedTime)设置生产一架敌机已经用去的敌机public List getEnemyPlaneList()获得敌机集合public List getBulletList()获得子弹集合public void playerFire(float time,int type)玩家飞机每隔一段时间发散一发子弹。参数time是屏幕每次刷新的时间pub
17、lic void destroyDeadSprites()从精灵集合中删除HP=0的精灵public void creatNewEnemyPlane(float time)每隔一段时间创建一架敌方飞机。参数time是屏幕每次刷新的时间public void creatNewItemPlane(float Time)每隔一段时间创建一个物品。参数time是屏幕每次刷新的时间public void destroyPlayer()删除玩家飞机public void playExplodeAnimation(float x, float y)播放爆炸动画,参数是要爆炸的精灵当前所在位置坐标public
18、 void setspeed(float ispeed)设置子弹加速的速度public float getspeed()获得子弹加速的速度常量值类:EnumDefine属性Public static int BIG_ENEMY = 0 大型敌机public static int MEDIUM_ENEMY = 1中型敌机public static int SMALL_ENEMY = 2小型敌机public static int PLAYER_PLANE = 3玩家飞机public static int BULLET = 4子弹public static int HP = 5加血public st
19、atic int MP = 6加魔抗public static int BULLET1 =7子弹1public static int BULLET2 = 8子弹2public static int BULLETSPEED = 9加速Public static int BIG_ENEMY_VALUE = 10 打掉大飞机的玩家得分Public static int MEDIUM_ENEMY _VALUE= 5打掉中飞机的玩家得分public static int SMALL_ENEMY _VALUE= 2打掉小飞机的玩家得分public static int BULLET_DAMAGE = 1子
20、弹伤害public static int PLAYER_HP = 1玩家血量public static float PLAYER_SPEED = 30玩家速度public static float BULLET_SPEED = 50子弹速度public static float BIG_ENEMY_SPEED = 5大飞机速度public static float MEDIUN_ENEMY_SPEED = 10中飞机速度public static float SMALL_ENEMY_SPEED = 20小飞机速度public static float HP_SPEED = 20加血速度publ
21、ic static float MP_SPEED = 20加魔速度public static float BULLET1_SPEED = 20子弹1速度public static float BULLET2_SPEED = 20子弹2速度public static float BULLETSPEED_SPEED = 20飞机加速速度五、时序图设计与流程描述5.1 游戏初始化从PlaneGame中后的一个单例模式的PlaneGame对象,产生玩家飞机,把玩家飞机放到PlaneGame的对象pGame中。5.2键盘相关函数设计键盘按下有两种情况,如果游戏状态为0并且按下的是空格,就把游戏状态设为1
22、,如果游戏状态是2并且按下的为WASD这几个键,那么就给玩家飞机设置速度让其移动。键盘松开就把玩家飞机速度归05.3 游戏运行相关设计游戏运行的主过程,先更新玩家的得分、MP值和HP值,如果HP=0游戏结束。然后设置子弹的类型,飞机自动开火。在列表中删除已经被摧毁的精灵,生成新的敌机和新的物品。对于子弹开火的函数,先判断生成子弹易用的时间是否大于等于需要的时间,然后根据子弹的类型选择哪几个链接点,然后获取链接点坐标,设置为子弹的坐标,然后把子弹对象放入集合,将生成子弹已用的时间归0。在集合中循环删除精灵,先获得HP值,判断是否大于0,对于小于等于0的精灵,如果是敌机,就给玩家加分,然后删除敌机
23、,播放动画。如果是子弹,就直接删除。如果是物品,就直接删除。根据坐标设置动画精灵的坐标,设置时长,播放动画。如果生成一架敌机的已用时间大于等于需要时间,就从精灵工程中获得一架新的飞机,这里通过生成随机数,在1-50之间时,就生产小型敌机;在51-80之间时,就生产中型敌机;在81-100之间时,就生产大型敌机。如果生成一个物品的已用时间大于等于需要时间,就从精灵工程中获得一个新的物品,这里通过生成随机数,在1-10之间时,就生产加血物品;在11-30之间时,就生产加魔物品;在31-50之间时,就生产子弹1;在51-80之间时,就生产子弹2;在81-100之间时,就生产飞机加速。5.4 碰撞函数
24、设计如果玩家与敌机碰撞,敌机HP归0,玩家HP-1,如果敌机与子弹碰撞,子弹HP归0,敌机HP-1。如果玩家与物品碰撞,物品HP归0,加血则玩家HP+1,加魔则玩家MP+1,子弹1则改变子弹类型为1,子弹2则改变子弹类型为2,飞机加速则改变玩家速度。如果游戏状态为2,且与世界边界碰撞的是敌机、子弹或者物品,则删除精灵。5.5 游戏结束设计删除玩家飞机、被摧毁的敌机,然后清空精灵集合。六、编码与实现Plane 类#include CommonClass.hclass Plane : public CSprite public: Plane(const char *name); virtual P
25、lane(); int getHP() return iHP; void setHP(int hp) iHP=hp; float getPointX() fPointX=GetSpritePositionX();return fPointX; void setPointX(float x) fPointX=x;SetSpritePositionX(x); float getPointY() fPointY=GetSpritePositionY();return fPointY; void setPointY(float y) fPointY=y;SetSpritePositionY(y); f
26、loat getMoveSpeedX() return fSpeedX; void setMoveSpeedX(float speedX) fSpeedX=speedX;SetSpriteLinearVelocityX(speedX); float getMoveSpeedY() return fSpeedY; void setMoveSpeedY(float speedY) fSpeedY=speedY;SetSpriteLinearVelocityY(speedY); protected: private: int iHP; float fPointX; float fPointY; fl
27、oat fSpeedX; float fSpeedY;Player类#include Plane.hclass Player : public Plane public: Player(const char* name); virtual Player(); int getMP() return iMp; void setMP(int mp) iMp=mp; int getiScore() return iScore; void setiScore(int val) iScore = val; float getfFireTime() return fFireTime; void setfFi
28、reTime(float val) fFireTime = val; float getfUsedTime() return fUsedTime; void setfUsedTime(float val) fUsedTime = val; void Move(); void stopMove(int hp); void fire(); bool getflag() return flag; void setflag() if(flag) flag=false; else flag=true; protected: private: int iMp; int iScore; float fFir
29、eTime; float fUsedTime; bool flag;EnemyPlane类#include class EnemyPlane : public Plane public: EnemyPlane(const char* name); virtual EnemyPlane(); int getiValue() return iValue; void setiValue(int val) iValue = val; int getiType() return iType; void setiType(int val) iType = val; protected: private:
30、int iValue; int iType;Bullet类#include Plane.hclass Bullet : public Plane public: Bullet(const char* name); virtual Bullet(); int getiDamage() return iDamage; void setiDamage(int val) iDamage = val; protected: private: int iDamage;PlaneItem类#include Plane.hclass PlaneItem : public Plane public: Plane
31、Item(const char *name); virtual PlaneItem(); int getiType() return iType; void setiType(const int type) iType=type; protected: private: int iType;SpriteFactory类#include CommonClass.h#include Plane.h#include Player.h#include EnemyPlane.h#include Bullet.h#include PlaneItem.hclass SpriteFactory public:
32、 SpriteFactory(); virtual SpriteFactory(); static CSprite *getSprite(int type); static void Init(); protected: private: static Player *createPlayer(); static EnemyPlane *createEnemyPlane(const int iType); static Bullet *createBullet(); static PlaneItem *createItem(const int iType); static int iID;Pl
33、aneGame类#include CommonClass.h#include Plane.h#include Player.h#include EnemyPlane.h#include Bullet.h#include EnumDefine.h#include SpriteFactory.h#include using namespace std;class PlaneGame public: virtual PlaneGame(); static PlaneGame *getPlaneGame(); CSprite *getSpriteByName(const char *name); vo
34、id setTextScore(int score); void setTextHp(int hp); void setTextMp(int mp); int getBulletType() return bulletType; void setBulletType(float time); void setBulletType(int type) bulletType=type; float getfMPTime() return fMPTime; void setfMPTime(float val) fMPTime = val; float getfMPUsedTime() return
35、fMPUsedTime; void setfMPUsedTime(float val) fMPUsedTime = val; Player *getPlayer() return pPlayer; void setPlayer(Player *myPlane) pPlayer=myPlane; float getEnemyPlaneCreateTime() return fCreateEnemyTime; void setEnemyPlaneCreateTime (float createTime) fCreateEnemyTime=createTime; float getEnemyPlan
36、eUsedTime() return fUsedEnemyTime; void setEnemyPlaneUsedTime(float usedTime) fUsedEnemyTime=usedTime; float getItemCreateTime() return fCreateItemTime; void setItemCreateTime (float createTime) fCreateItemTime=createTime; float getItemUsedTime() return fUsedItemTime; void setItemUsedTime(float used
37、Time) fUsedItemTime=usedTime; list getEnemyPlaneList(); list getBulletList(); list getSpriteList() return spriteList; void playerFire(float time,int type); void destroyDeadSprites(); void creatNewEnemyPlane(float Time); void creatNewItemPlane(float Time); void destroyWorldLimit(const char *name); vo
38、id destroyPlayer(); void destroyAll(); void playExplodeAnimation(float x, float y, int type); void setspeed(float ispeed) speed=ispeed; float getspeed() return speed; protected: private: static PlaneGame *pGame; static int iID; CTextSprite *pTextScore; CTextSprite *pTextHp; CTextSprite *pTextMp; Pla
39、yer *pPlayer=NULL; list spriteList; float fCreateEnemyTime; float fUsedEnemyTime; float fCreateItemTime; float fUsedItemTime; float fMPTime; float fMPUsedTime; int bulletType; PlaneGame(); float speed;EnumDefine类class EnumDefine public: EnumDefine(); virtual EnumDefine(); static const int BIG_ENEMY=0; static const int MEDIUM_ENEMY=1; static const int SMALL_ENEMY=2; static const int PLAYER_PLANE=3; static const int BULLET=4; static const int BULLET_DAMAGE=1; static const int BIG_ENEMY_VALUE=10; static const int MED
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 江苏省泰州市姜堰区2024-2025学年八年级上学期期中考试地理试题(含答案)
- 2024年度云南省高校教师资格证之高等教育法规综合检测试卷A卷含答案
- 安徽省亳州市黉学英才中学2024-2025学年九年级上学期9月月考地理试卷(含答案)
- 数据中心项目立项报告
- 阜阳师范大学《国际贸易理论与实务》2023-2024学年第一学期期末试卷
- 苏教版小学科学一年级下册全册教案(新课标)讲解学习
- 福建师范大学《语言与统计学》2022-2023学年第一学期期末试卷
- 骨科实习生出科考试试题及答案
- 2024年二级建造师-法规-速通宝典
- 福建师范大学《土壤地理学》2022-2023学年第一学期期末试卷
- JT∕T 795-2023 事故汽车修复技术规范
- 2024年广西职业院校技能大赛高职组《英语口语》赛项赛题(Presentation)
- 作文稿纸A4打印模板
- 大学生创新创业项目计划书医疗
- 欧洲文明与世界遗产智慧树知到期末考试答案2024年
- 山东省淄博市临淄区2022-2023学年六年级上学期期中英语试卷
- 23年11月14日江苏省南京鼓楼八上语文期中【学生】
- 中医合理膳食知识讲座
- (高清版)TDT 1033-2012 高标准基本农田建设标准
- 2024年中核武汉核电运行技术股份有限公司招聘笔试参考题库含答案解析
- 周围神经损伤(InjuryofPeripheralNerve)
评论
0/150
提交评论