issues
search
weirongxu
/
ife2016-spaceplane
百度前端技术学院2016春季班任务: 行星与飞船
http://weirongxu.github.io/ife2016-spaceplane
4
stars
1
forks
source link
ife
ife-2016
readme
百度前端技术学院2016春季班任务: 行星与飞船
在线演示
第一阶段
第三阶段
任务内容
第一阶段
如图(打开查看),创建一个虚拟宇宙,包括一个行星和飞船
每个飞船由以下部分组成
动力系统,可以完成飞行和停止飞行两个行为,暂定所有飞船的动力系统飞行速度是一致的,比如每秒20px,飞行过程中会按照一定速率消耗能源(比如每秒减5%)
能源系统,提供能源,并且在宇宙中通过太阳能充电(比如每秒增加2%,具体速率自定)
信号接收处理系统,用于接收行星上的信号
自爆系统,用于自我销毁
每个飞船的能源是有限的,用一个属性来表示能源剩余量,这是一个百分比,表示还剩余多少能源。
能源耗尽时,飞船会自动停止飞行
飞船有两个状态:飞行中和停止,飞船的行为会改变这个属性状态
飞船的自我销毁方法会立即销毁飞船自身
行星上有一个指挥官(不需要在页面上表现出其形象),指挥官可以通过行星上的信号发射器发布如下命令
创建一个新的飞船进入轨道,最多可以创建4个飞船,刚被创建的飞船会停留在某一个轨道上静止不动
命令某个飞船开始飞行,飞行后飞船会围绕行星做环绕运动,需要模拟出这个动画效果
命令某个飞船停止飞行
命令某个飞船销毁,销毁后飞船消失、飞船标示可以用于下次新创建的飞船
你需要设计类似如下指令格式的数据格式
{ id: 1, commond: 'stop' }
指挥官通过信号发射器发出的命令是通过一种叫做Mediator的介质进行广播
Mediator是单向传播的,只能从行星发射到宇宙中,在发射过程中,有30%的信息传送失败(丢包)概率,你需要模拟这个丢包率,另外每次信息正常传送的时间需要1秒
指挥官并不知道自己的指令是不是真的传给了飞船,飞船的状态他是不知道的,他只能通过自己之前的操作来假设飞船当前的状态
每个飞船通过信号接收器,接受到通过Mediator传达过来的指挥官的广播信号,但因为是广播信号,所以每个飞船能接受到指挥官发出给所有飞船的所有指令,因此需要通过读取信息判断这个指令是不是发给自己的
第二阶段
基于上个任务,我们继续改善我们的任务
第一代宇宙飞船系统真是糟糕的实现,所以我们需要进行改进飞船自身,我们在几个部件进行了更多的组合可能性,在创建新飞船时可以自行选择,如图
我们新增了几种动力系统,能够让飞船飞得更快,相应的能源消耗也会不同
我们新增了集中能源系统,能够让飞船能量补充能源速度越快
接下来改进的是指令的传播问题
我们发明了新一代的传播介质BUS,它的单次传播失败率降低到10%,传播速度提升到300ms,而且他增加了多次重试的功能,可以保证信息一定能够传递出去,请你实现这个可以通过多次重试保证在10%丢包率情况下顺利将信息传递出去的BUS传播介质
但BUS有个弱点,就是无法直接传递JSON格式,它只能传递二进制码,但指挥官并不能够直接下达二进制编码指令,所以我们需要在行星上的发射器部分增加一个模块Adapter,把原来的指令格式翻译成二进制码。同时还需要在飞船的接收器部分增加一个Adapter,用来把二进制码翻译成原来能够理解的指令格式
二进制码格式自定,可以参考的例子:前四位标示飞船编号,后四位标示具体指令(0001:开始飞行,0010:停止飞行,1100:自我销毁)
第三阶段
基于上个任务,我们继续改善
第二代宇宙飞船系统进步了很多,但是我们依然无法知道飞船的能源消耗情况,可能有的时候我们发出开始飞行的指令,但飞船早就没有能量了,所以我们再次进行升级,这次我们需要增加一个飞船状态的监视系统
我们为每个飞船增加一个信号发射器,飞船会通过BUS系统定时(比如每秒)广播自己的飞行状态。发送的时候,我们通过已经安装在飞船上的Adapter把状态数据翻译成二进制码形式,把飞船自身标示,飞行状态,能量编码成一个16位的二进制串,前四位用于飞船自身标示,接下来4位表示飞行状态,0010为停止,0001为飞行,1100表示即将销毁,后八位用于记录飞船剩余能源百分比
行星上有一个信号接收器,用于通过BUS系统接受各个飞船发送过来的信号
当信号接收器接收到飞船信号后,会把信息传给数据处理中心(DC),数据处理中心依然是调用Adapter模块,把这些二进制数据转为对象格式存储在DC中
实现一个行星上的监视大屏幕(如图),用来显示所有飞船的飞行状态及能源情况,当数据处理中心飞船数据发生变化时,它会相应在监视器上做出变化