请教一个observer设计问题。
刚刚学了一点事件处理,准备做个编程练习。
可是一到实践,就出现了很多问题。具体是这样的:
1、一个坦克大战游戏;
2、战场上有M枚飞行中的导弹;
3、战场上有N辆行进中的坦克;
如何处理下面两种事件?
事件1:坦克被导弹击中
事件2:导弹击中了坦克
也就是说:一枚导弹击中了坦克的同时,就有一辆坦克被这枚导弹击中。
我的问题是,如何检测这两个事件的发生比较好呢?
1、坦克获得每个导弹的位置,并检测是否相撞,如果相撞则调用this.notifyTankAttacked()和hisMissile.notifyMissileHitTank();
2、导弹获得每个坦克的位置,并检测是否相撞,如果相撞则调用this.notifyMissileHitTank()和hisTank.notifyTankAttacked();
3、由其他线程获得坦克和导弹的位置,循环每个坦克,再拿每个坦克的位置跟每个导弹的位置相比较,循环嵌套;当确认相撞后,调用tank.notifyTankAttacked()和
missile.notifyMissileHitTank();
4、有其他更好的办法。。。
//////////////////////以下是部分代码/////////////////////
这里有些不知所措,
我该如何定义事件?
这里仅考虑了tankAttacked()这个事件,它有两个参与者
1、发生该事件的坦克
2、击中坦克的导弹
如果坦克还有其他事件,如:tankFire()坦克开炮/tankMove()坦克移动/tankDie()坦克死掉/...
那么在这些事件中,第二个参数attackerMissile(击中坦克的导弹)将没有任何用处了。
同样的问题也在MissileEvent中存在。
不知道这里应该如何处理?
我在想,这个TankEvent事件可不可以看作是DTO?也就是粗粒度的,我可以把所有可能用到的属性都加上,不用的属性就传递成null即可了?
|
[该贴被darasion于2008-12-21 19:03修改过]
[该贴被darasion于2008-12-21 20:11修改过]