SDL中文论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 5096|回复: 0
打印 上一主题 下一主题

[讨论] 编辑器中武将状态

[复制链接]

21

主题

36

帖子

334

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
334
跳转到指定楼层
楼主
发表于 2020-9-3 18:14:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
给出让可进入部队的武将;
给出让可城市在职的武将;
给出让可城市在野的武将;
……
具体到关卡,为给出以上情况下更简洁提示,引入了武将状态。像已是进入部队的武将,给出在职时就不该可选了。
  1. enum {STATE_UNKNOWN, STATE_SERVICE, STATE_WANDER, STATE_ARMY, STATE_RESERVE};
  2. STATE_UNKNOWN: 一开始处于的状态,未分配。
  3. STATE_SERVICE: 在城市在职;
  4. STATE_WANDER: 在城市在野;
  5. STATE_ARMY: 处在部队中;
  6. STATE_RESERVE: 保留武将。这些武将一开始时不出现在关卡,但在过程中可能会出现,像到第N回合时会加入战场。
复制代码


tstate,封装的除了状态还有城市编号
  1. struct tstate {
  2.         ......
  3.         int state;
  4.         int city;
  5. };
复制代码

state:以上的状态变量。
city:城市。有效值用的是hero.dat出现的城市编号。-1指示无效值。


在一关卡,同一武将可处在多个势力
任一时刻,一个武将不应该同时出现在两个势力,但编辑器要关注的是整个关卡过程,第N回合武将归属势力a,第M回合该武将可能归属到势力b。因为这个多势力,武将状态需要支持同时在多个势力。
  1. class hero_state
  2. {
  3.         bool allocated(int side, bool exclude_reserve = false) const;
  4.         ......
  5.         std::map<int, tstate> states_;
  6. };
复制代码

states_表示一个武将状态,first就是势力编号(基于0始)。
武将只有在被“使用”后才会现在states_,即如果该武将不被使用,那states_是空。

allocated用于判断具体一武将是否处于“使用”状态,返回true指示已“使用”。side参数是势力编号,当是有效编号时判断指定势力是否“使用”该武将,参数值是HEROS_INVALID_SIDE时则只要有势力“使用”了该武将就返回true。

exclude_reserve:是否要排除保留。值是ture时,处于保留状态的不认为是“使用”中。

不可分配武将不需要状态
武将分为可分配和不可分配。不可分配指的是在关卡不能设置的武将,在编号上是hero.dat中的0到49,像文官,士兵、建筑物、平民。可分配武将包括城市(编号50--99)、历史武将(编号>=100)。
  1. artificals_、persons_
  2. class tscenario: public tscenario_
  3. {
  4.         ......
  5.         std::map<int, hero_state> artificals_;
  6.         std::map<int, hero_state> persons_;
  7. }
复制代码
它们存储可分配武将,类型都是std::map<int, hero_state>,first指的是武将编号,seond是该武将所处状态。artificals_存储城市,persons_存储历史武将。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|丽谷软件|libsdl.cn

GMT+8, 2025-5-2 03:43 , Processed in 0.048598 second(s), 19 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表