|
给出让可进入部队的武将;
给出让可城市在职的武将;
给出让可城市在野的武将;
……
具体到关卡,为给出以上情况下更简洁提示,引入了武将状态。像已是进入部队的武将,给出在职时就不该可选了。
- enum {STATE_UNKNOWN, STATE_SERVICE, STATE_WANDER, STATE_ARMY, STATE_RESERVE};
- STATE_UNKNOWN: 一开始处于的状态,未分配。
- STATE_SERVICE: 在城市在职;
- STATE_WANDER: 在城市在野;
- STATE_ARMY: 处在部队中;
- STATE_RESERVE: 保留武将。这些武将一开始时不出现在关卡,但在过程中可能会出现,像到第N回合时会加入战场。
复制代码
tstate,封装的除了状态还有城市编号
- struct tstate {
- ......
- int state;
- int city;
- };
复制代码
state:以上的状态变量。
city:城市。有效值用的是hero.dat出现的城市编号。-1指示无效值。
在一关卡,同一武将可处在多个势力
任一时刻,一个武将不应该同时出现在两个势力,但编辑器要关注的是整个关卡过程,第N回合武将归属势力a,第M回合该武将可能归属到势力b。因为这个多势力,武将状态需要支持同时在多个势力。
- class hero_state
- {
- bool allocated(int side, bool exclude_reserve = false) const;
- ......
- std::map<int, tstate> states_;
- };
复制代码
states_表示一个武将状态,first就是势力编号(基于0始)。
武将只有在被“使用”后才会现在states_,即如果该武将不被使用,那states_是空。
allocated用于判断具体一武将是否处于“使用”状态,返回true指示已“使用”。side参数是势力编号,当是有效编号时判断指定势力是否“使用”该武将,参数值是HEROS_INVALID_SIDE时则只要有势力“使用”了该武将就返回true。
exclude_reserve:是否要排除保留。值是ture时,处于保留状态的不认为是“使用”中。
不可分配武将不需要状态
武将分为可分配和不可分配。不可分配指的是在关卡不能设置的武将,在编号上是hero.dat中的0到49,像文官,士兵、建筑物、平民。可分配武将包括城市(编号50--99)、历史武将(编号>=100)。
- artificals_、persons_
- class tscenario: public tscenario_
- {
- ......
- std::map<int, hero_state> artificals_;
- std::map<int, hero_state> persons_;
- }
复制代码 它们存储可分配武将,类型都是std::map<int, hero_state>,first指的是武将编号,seond是该武将所处状态。artificals_存储城市,persons_存储历史武将。
|
|