bool CriteriaAreMet方法检查的条件集合
本文关键字:条件 集合 检查 CriteriaAreMet 方法 bool | 更新日期: 2023-09-27 18:04:10
我正尝试着为游戏设计一个简单的技能系统。在每个游戏循环中,我都想遍历所有玩家的技能,并决定是否有技能需要提升。
我想我应该构造如下所示的东西。我不知道在技能类中使用什么类型的组件来列出进度标准。
我不喜欢这种方法,但我希望避免为每个技能编写单独的具体类;会有几十个,我打算把它当作一个图书馆。
public class Player
{
public List<Skill> Skills { get; }
}
public class Skill
{
public List<???> AdvancementCriteria { get; }
bool AdvancementCriteriaMet()
{
// Iterate through AdvancementCriteria
// if any return FALSE then return FALSE
}
void Advance()
{
// Advance the skill
}
public void Update()
{
if(AdvancementCriteriaMet) Advance();
}
}
public class GameLoop
{
Player player = new Player();
void Loop()
{
foreach(Skill s in player.Skills) s.Update();
}
}
编辑澄清:我希望能够断言的东西作为标准,如:
- 运动技能:玩家正在跳跃||玩家正在奔跑||玩家正在游泳 剑技能:玩家。InCombat == true &&player . wieldtype == Sword急救技能:BandagesUsedCurrent> BandagesUsedPrevious
您可以使用委托,使用一组lambda表达式。
public delegate bool AdvancementCriterion(Player player);
public List<AdvancementCriterion> AdvancementCriteria { get; }
AdvancementCriteria.Add(p => p.Thingy > x);
if (AdvancementCriteria.All(c => c(Player))
public List<Func<bool>> AdvancementCriteria { get; }