团队作业(HCL队)第三周—需求改进和系统分析
2、需求&原型改进:
1.问题:游戏中坦克的移动和攻击怎么控制的?
改进:
在游戏中,我控制我方坦克,按下方向键坦克便向按下的方向移动,按下Z键,我方坦克发射炮弹。敌方坦克面向随机的方向移动,并向面向的方向随机发射炮弹,炮弹按发射时的方向沿直线射出。当我方坦克的炮弹击中对方坦克的时候,对方坦克爆炸,之后被击中的坦克消失,游戏继续。当对方坦克的炮弹击中我方坦克的时候,我方坦克血量减1,当我方坦克空血的时候,我方坦克爆炸,此时游戏结束。
分析:自上而下
A)找到这个游戏中的对象:窗体、我的坦克、敌方坦克、红色炮弹、蓝色炮弹、爆炸
B)找到对象之间的关系:在窗体上有我方坦克和敌方坦克,我方坦克发射红色子弹,敌方坦克发射蓝色子弹,我方坦克遇到蓝色子弹后血量减1,血量为0时爆炸,敌方坦克遇到红色子弹后爆炸。我方坦克和对方坦克同属坦克类,红色炮弹和蓝色炮弹同属炮弹类。
2.问题:坦克和子弹的属性有没有更加具体化?
改进:
坦克:
我方坦克:长度、宽度、速度、位置、面向的方向、血量
移动、发炮、减血
敌方坦克:长度、宽度、速度、位置、面向的方向
移动、发炮
炮弹:
红色炮弹:大小、颜色、速度、位置、方向
移动、碰撞
蓝色炮弹:大小、颜色、速度、位置、方向
移动、碰撞
爆炸:长度、宽度、位置
爆炸
3、系统设计:
整个游戏系统利用面向对象语言Java编写,程序可大致分为以下几个大模块:
游戏程序中会涉及到6个类,,包括Tank类、Missile类、TankLocal类、BloodTool类等。
1. Tank类
属性:坦克类是最主要的类,包含了坦克的一些基本的属性,如初始坐标、移动速度、存活情况、正义或反派,也包括了一些特殊用途的变量,如frontX,frontY用来判断坦克是否撞墙的,step则是用于产生敌人坦克移动的随机步数。
方法:
1 两个参数不同的构造方法、自身的draw()方法,绘制坦克
2 locate()方法用于确定判断坦克移动的方向,主要判断是否为斜向移动
3 move()方法则是控制坦克坐标移动
4 fire()方法用来构建子弹对象并加入到子弹集合中
5 另外还有事件处理方法KeyPressed()和KeyReleaes()
6 impactOnWall()用来判断坦克是否撞墙(省略impactOnTank()原理相同
7 superFire()则是用来实现八个方向的子弹发射的
8 stayMove()用于处理坦克撞墙的坐标变换
9 eat()方法用来判断主坦克是否与补血道具碰撞及处理
内部类:坦克类中还拥有一个内部类BloodBar,用于绘制坦克的血条
2. Missile类
属性:子弹的初始坐标x、y,子弹的存活情况、正义或反派以及方向,还定义着主面板TankLocal的引用tl。
方法:
1 两个不同参数构造方法,子弹自身的draw()方法,绘制子弹
2 move()控制子弹的移动
3 hitTank()判断子弹是否击中坦克及处理,并遵循相同justice值的子弹与坦克不能发生碰撞
4 getRect()用于返回子弹的坐标、宽度和高度,以便进行碰撞检测
5 hitWall()用于判断子弹是否撞墙及处理

3. TankLocal类
属性:主面板中属性较少,主要是一些对象创建的工作,也有一些全局变量,如有grade,记录玩家的分数。
方法:
1 paint()方法是最重要的方法之一,所有的可视化对象都必须在此方法中实例化,并绘制。包括坦克,子弹,墙壁,以及信息栏的文字信息,都需要在此方法中随主面板实时刷新,也因此能看到对象的移动。
2 update()方法是双缓冲技术的实现,主要画出一张虚拟图片,将要加载的内容绘制好,再拷贝到当前画板中。
3 startFrame()负责创建主面板,并初始化一些面板数据,如标题、背景色、可见性、窗口尺寸可更改性,还负责启动主线程。
4 main()启动程序
内部类:
1 paintThread 线程内部类,用于重绘面板
2 KeyMoniter 监听内部类,用于监听主坦克的按键事件
3 BloodTool类
属性:道具的初始坐标x、y,宽高 w、h,记录移动的步数step,存活情况isLive,主面板引用tl,移动的轨迹数组postion[][]
方法:
1 构造方法BloodTool(),道具自身的draw()方法,绘制道具
2 move()控制道具的不断移动
3 getRect()得到当前道具的坐标及宽度和高度,用于坦克对其的碰撞检测,从而判断坦克是否“吃”到道具。
4、Alpha任务分配计划
Tank类 | 黄宇航, |
Missile类 | 黄国航 |
TankLocal类 | 赖少勇 |
BloodTool类 | 卢泰佑 |
paintThread类 | 李密 |
KeyMoniter类 | 陈舒标 |
5、测试计划
1、开发时测试:后台主要是对游戏操作、功能代码能否正常运行测试,前端主要是界面是否正常的测试
2、Alpha测试:首次实现前后台对接的各种测试,保证功能、游戏能正常运行
3、Beta测试:面对外部用户的意见反馈进行开发测试
4、最终测试:完整游戏最终测试
最新文章
- Linux下安装与使用本地的perl模块
- lua中得栈
- WAF绕过小结
- Labeling Balls 分类: POJ 2015-07-28 19:47 10人阅读 评论(0) 收藏
- 给TextView添加超链接的四种方式
- [POJ] 3468 A Simple Problem with Integers [线段树区间更新求和]
- Node.js how to respond to an upgrade request?
- servlet+jsp+jdbc实现从数据库查询用户信息到页面
- 在一个终端后台运行的进程在新的终端中使用job不会被发现
- 【java学习】spring mvc 公共dao的实现,定义基本的增删改查
- SQL SERVER 游标的使用
- 【一天一道LeetCode】#34. Search for a Range
- SDL 开发实战(六): 使用 SDL 实现 YUV 播放器
- [html]CSS中的margin、border、padding区别
- nodejs的某些api~(一)node的流1
- java 数据的存储
- bitmap运算
- loadrunner12.5-添加检查点
- mysql中UNION ALL用法
- Linux下修改时间时区的方法介绍