兵种是数据设计的核心。为了避免曹操传中各种重复数据的麻烦,我把兵种数据设计成这个样子:
兵种元素基于继承实现。一个兵种元素可以继承另一个兵种的数据,也可以不继承,直接实现。当然,总有一个兵种要自己实现,要不然就无从继承了。在最开始,我曾经考虑过使用多重继承,但是分析以后发现,这纯粹是坑自己。所有的兵种都具有相同的属性,那么多重继承不就必须要选择从哪个祖先获得属性值吗?连C++编译器都不干这种活,兵种数据玩多重继承简直是跟自己过不去玩。
理论上说,这种方式可以用于包括RTS、RPG等各种类型的游戏,只要它们需要“单位”的出现。比如说,Diablo2中各场景、难度下的沉沦魔就可以通过这种模板继承和级别增加的方法来生成。
- 不继承
兵种升级是不继承的。这主要是基于使用的考虑。还是用曹操传的兵种举例吧。很自然地,我们会从“轻步兵”继承产生“重步兵”的数据。同时,轻步兵会在level 15升级到重步兵。但是重步兵显然不能再次升级到重步兵,如果兵种升级也同样继承的话,那我们就必须要在重步兵元素里面删掉继承来的升级。这样的话还不如不继承升级信息呢。
在最下面的图片中,重步兵有两个升级,可以在30级升级到近卫兵或者大戟士。
- 覆盖修改
这种方式要么不修改,继承原来的数值