WarPlane——游戏设计文档

                                      WarPlane                                                    

                                                        ——项目设计文档

一、项目简介

      “WarPlane”是Geekers团队在本次软件工程课程中所完成的团队项目作业。根据团队成立初期大家经过用户调查与分析,最终决定设计出一款Android平台的手机游戏,后经过了成员们对Android开发的学习,综合自身能力,最后设计出了这款名为“WarPlane”的游戏,该游戏是一款竖版射击类游戏,具有操作简便、游戏体积小巧的优点,同时也有诸多的缺点,Geekers将在本设计文档中对本次的项目进行全面的描述与解析。

      “WarPlane”项目历时一个月,经过了调研分析、设立目标、开发语言学习,以及最终完成项目的设计。这整个流程对于Geekers来说是一次非常重要的体验,也是一次困难的试炼,因为我们团队中的小伙伴们基本都是对Android开发零基础,大家在短短的一个月内学习JAVA、Android,并最终及时地交付出了一款App,这对Geekers来说,确实得到了锻炼和提升。

      Coding地址:https://coding.net/u/kpy/p/WarPlane/git/tree/master/

 

二、系统框架

      (1)运行环境

       “WarPlane”是一款运行在Android系统中的游戏App,基于Android4.0开发,可以运行在Android3.0以上版本的手机中。

      (2)组织结构

        “WarPlane”是一款手机游戏App,所以需要的唯一硬件就是Android手机,对于手机的硬件配置要求也非常低,现在大家使用的Android3.0版本以上的手机都可以完美运行本游戏。编写本软件使用到的工具是Eclipse中的ADT功能,虽然有Google官方的Android Studio,不过学习JAVA时已经对Eclipse的操作比较熟悉,所以就一直使用Eclipse来编写。以下为系统框架图。

       

 

三、系统结构

      我们采用了思维导图的方式来展现系统结构。

      游戏的设计分为四大模块:游戏界面、背景音乐、我方单位(玩家)、敌方单位。

      游戏界面包括:游戏的主界面(菜单界面)、游戏进行的界面、游戏胜利界面、游戏失败界面,这些界面均由背景图与按钮组成,并且由监听器来完成点击按钮的功能。

      背景音乐包括:不同场景会有不同的音乐作为背景。

      敌方单位包括:本游戏目前我们只设计了两个关卡,每一关都会有敌机、Boss,每个敌方单位都需要进行绘图、参数设置。逻辑设置,其中绘图需要绘制敌方单位的外形、子弹、被击中的效果,Boss则加入了“放大招”的效果,在图中显示为“狂暴模式”。

      我方单位包括:玩家只有一人,从始至终只需要绘制玩家操作的飞机、子弹、被击中、血量,还有玩家的逻辑。

 

四、详细设计

    (1)开始界面模块设计

      开始界面是进入游戏后的第一个界面,在代码中用GameMenu类来绘制开始页面和为按钮加上相应的监听器,同时GameMenu也用来实现游戏胜利与游戏失败的界面。界面中有两个按键,分别是Start与Quit,Start是进入游戏界面的按钮,Quit是退出游戏的按钮。

(2)胜利与失败界面设计

      胜利与失败界面与主界面类似,都是用GameMenu类来实现,加载对应的图片与按钮,在这两个界面中加入了“Again”与“Quit”两个按钮,“Again”的功能是按下之后重新开始第一关的游戏,“Quit”为退出游戏。

                     

 

(3)游戏中界面与逻辑设计

      本项目最关键的地方是游戏内的设计,包括界面设计与逻辑设计。

      游戏中共有6类对象,分别是主角、敌机、Boss、子弹效果、爆炸效果、游戏背景滚动效果。在代码中我们用Player类来实现主角玩家、Enemy类来实现敌机、Boss类来实现Boss、Bullet类来实现子弹效果、Boom类来实现爆炸效果、GameBg来实现游戏背景滚动效果。

      Player类用来实现玩家,在该类中实现了绘制玩家图形、设置生命值、判断玩家被子弹或敌方单位击中后的逻辑、玩家通过触屏控制飞机移动的方法,我们还人性化的为每次玩家受到伤害会有短暂的无敌时间。

      Enemy类实现敌机,本游戏共有两关,设置了3中敌机类型,分别是垂直方向运动的、水平向右、水平向左3个类型,敌机被玩家子弹击中即会爆炸,所以在该类中没有设置生命值,设置了敌机图形绘制方法、不同类型的敌机飞行轨迹方法、敌机飞出屏幕显示范围自动死亡的方法、敌机被子弹击中毁灭的方法。

      Boss类来实现每一关的Boss,Boss拥有特殊技能,会在屏幕顶端下降到中间位置发射出8个方向的子弹。在该类中,我们设计了Boss的血量、Boss绘制、Boss移动方法、Boss开大招时所产生的移动与发射子弹的方法,以及Boss受到攻击掉血的方法。

      Bullet类用来绘制子弹效果,使用Switch-case语句来分别实现玩家、敌机、Boss的子弹模型绘制,以及写入了子弹超出屏幕显示范围自动消失的优化方法。

      Boom类用来绘制爆炸效果,使用canvas.clipRect和canvas.drawBitmap方法将效果图中的多张图片连续播放以达到动画效果。

      GameBg类用来实现游戏中背景滚动,原理是使用两张一样的图片交替播放,以达到不停滚动的效果。

      在各个类都定义完成之后,创建MySurfaceView类来完成整个游戏的实现过程。在MySurfaceView类中定义表示游戏状态的常量gamestate,使用switch-case语句来完成不同游戏状态下实现不同方法以达到游戏效果。创建initGame()方法来初始化一切参数,创建myDraw()方法来绘制不同状态下的图形,创建onTouchEvent()方法来完成不同状态下监听触摸屏幕的功能,创建logic()方法来完成整个游戏的逻辑建立。因此MySurfaceView类是用来连接各个模块的核心部分。

     

 

 

五、项目演示

      在本环节中,将会简单地介绍一下项目完成后实际操作的过程:

      1.首先在手机上安装“WarPlane.apk”安装包。

      2.安装完成后将会在手机上看到已安装的“WarPlane”的图标,点击打开。

      3.开始游戏之后,来到主菜单,点击Start即可开始游戏,点击Quit则退出游戏,回到桌面。

      

      4.游戏操作非常简单,玩家只需要用手指触摸屏幕来控制飞机移动就可以了。

              

                       Level 1                                              Level 1   Boss

 

              

                        Level 2                                              Level 2   Boss

      5.若玩家在游戏中因失血过多而失败,会出现“Game Over”的画面,玩家可自行选择“Again”重新开始,或者“Quit”退出游戏;通关后胜利的画面也是如此。

 

              

                    游戏失败画面                                             游戏胜利画面

 

 

六、项目总结

      冬去春来,花开叶茂,紧张而忙碌的一个学期,在季节的轮回中伴着我们全校师生坚实的脚步走过了这一程。过去的一个月多里,我们Geekers团队完成了软件工程课程布置的团队编程作业,自己设计并制作的一个小软件。而我们这次制作的是一个基于安卓的简易的手机游戏——飞机大战。整个过程有讨论制作方向、学习eclipse、设计游戏、内部测试、大众测试等几个阶段。

1. 队员讨论

      我们队共有6个队员,其中有一名女生,五名男生。我们为了讨论项目方便,就找到了学校图书馆的研修室进行集体讨论,每次讨论队员们都能到全,没有一个人对这个团队项目有任何懈怠的感觉。队伍讨论项目的时候,男生比较容易说的开,女生就有一些腼腆,而之后,通过不断的交流与协作,大家今后的交流也都放得开了。这是很重要的一步,队伍内部的交流很重要,如果队员之间连话都不敢说,那么这个项目就没有一点坚韧性,就会错误连连,也没有综合的思想,达不到与时俱进的要求。

总之,队员在项目开始之前的沟通渠道要疏通,这是很重要的一步。通过不断的讨论,最后也决定了我们制作的方向,一个基于安卓的简易的手机游戏——飞机大战。

2.  团队分工

      我们团队的模式是剧院模式,这种模式的理想状态就是大家分工合作,各司其职,没有绝对的领导,也没有打酱油的同学,就目前而言这是最符合我们团队的模式,大家实力比较平均,同时也不希望有人掉队,采用了这种模式可以帮助大家共同合作,共同进步,这也是我们喜欢也最适合我们的模式,所以在大家讨论过后,最终选择了此模式。

我们在项目制作中做了如下分工:

      ①   陈一鸣负责java代码脚本的错误检查和后期组装;

      ②   口平音,黄冠译,樊西江负责代码脚本的编程及测试;

      ③   王敬一和张倩负责游戏界面整理布局和游戏内部道具的绘制。

      每个人都各司其职,都有不同的任务,而且每个人的完成效果都很好,整体组装也较为顺利,虽然在制作过程中也存在过错误和争议的发生,但这也是通向成功必不可少的一步,只有这样我们才能更加完善自己,更加经得起考验,使我们在今后无论遇到多大的困难都能从容应对。

3.  项目测试及总结

      经过一个月的制作,我们的团队终于完成了这个小游戏α作品,我们内部自己在考虑到不同情况下进行了一些测试,也正如我们所想到的,出现了一些问题,有大有小。例如:

      ①   飞机爆炸,游戏结束时点击再来一局,会继续着当前的进度而不是重新开始新的一局;

      ②   子弹还没有遇到敌机时,敌机就发生了爆炸;

      ③   关卡最后的BOSS是无敌的,无法击败;

      ④   这个游戏中不同场景都不同的音效,而我们发现切换场景后,音效却没有了。而且再也不会出现。

      也有很多其它的小错误,但这几个是很严重的问题,我们也进行了修复:

      ①   这个问题是因为有一个变量记录着当前游戏时间的进度,而这个进度还是一个全局变量,所以他在下一次开始之前必须初始化清零;

      ②   这个问题的原因在于飞机的图片太大,使得子弹碰到飞机图片的下边缘就使得飞机爆炸,所以需要我们的游戏图片制作更加完善,这个问题也花掉了我们很多时间,因为PS的过程要求更加的精细;

      ③   BOSS无敌我们最初认为是血量不减,但是错误还是发生,所以我们通过观察代码发现了飞机的绘图代码是无限循环的,无论血量怎样,所以应该是血量减到0后,停止绘图;

      ④   我们最初用的切换音效函数分别是是:音效调用——音效停止——音效调用,我们发现了还有一个函数是“音效暂停”,我们应该用“音效暂停”,即暂停音效而不是“音效停止”,永远关闭音效。

      我们也给我们的其它朋友玩了玩我们的游戏,也有一些很小的问题发生,我们也都改正了,最终的β版本也完成了。

      测试是编程的必不可缺少的一部分,他是通过不同的情况来测试程序的可用性,程序在刚制作完成时,肯定会有我们想不到的bug,通过测试才能让软件更加完善,更具可用性,也是测试,让我们明白了代码编程者,也就我们自身的一些不足之处。

4.  总结及感想

      β版本的发布也就意味着我们的软件制作阶段基本上完成了,因为我们觉得软件的阶段并不适合发布,所以我们也没有选择发布,而是让自己的朋友去适用。虽然没有发布,但是整个过程是值得我们永远铭记的。作为程序员,这是我们的第一个团队项目,而且我们觉得自己对待这个项目的态度也是很积极的。在这个制作过程中,我们6个人就是一个大家庭,每个人每天都要不停地互相沟通交流方法和询问制作进程。想要完成一个团队项目,最重要的就是一个“团”字,团结是基础。

      这个过程为我们今后的工作生活打下了基础,我相信我们的Geekers队员们都不会忘记这一次团队作业的历程,感谢每一位参加这次项目制作的队员们,最后感谢这一学习老师的对我们悉心教导!

posted @ 2016-05-27 17:21  Geekers102  阅读(456)  评论(2编辑  收藏  举报