问题描述:算法
策划想要设计一种怪物,它有m种攻击方式,每种攻击方式都有其特定的使用权重N(i),其中N(i)为正整数,i为1到m的正整数,表明攻击方式序号。当怪物遇到敌人时,将按照权重指示随机的从m种攻击方式选取一种进行攻击,该次攻击完毕后以相同方式再次选取新的攻击方式,并继续攻击敌人,直到战斗结束。spa
游戏设计者但愿以下: 权重为1的攻击方式,最多连续使用1次。权重为2的攻击方式最多连续选取2次,以此类推,权重为n的攻击方式最多连续使用n次。设计
那么假设如今怪物进入了一场旷日持久的大战,该算法还须要确保权重为N(i)的攻击方式出现频率为 。code
举例说明,假设该怪物有3种攻击方式,使用权重分别为1,2,3。 那么权重为1的攻击方式,不得连续使用,权重为2的攻击方式,最多只能连续使用2次。。。且要保证攻击屡次后,采用权重为1的攻击方式几率为 ,采用权重为2的攻击方式几率
。。。blog
只有两个要求,固然算法可读性越高越好(最好是不管童叟都能看懂你在写什么),代码量越少越好。游戏
假设已经有SkillData类,包含了SkillData的数据。class
struct SkillData { int skill_id; int skill_weight; }
但须要设计一个类SkillSelector,用来实现上述逻辑。List
public class SkillSelector { private List<SkillData> skill_list; SkillSelector(List<SkillData> data) { skill_list = new List<SkillData>(data.ToArray()); } int GetNextSkillID() { //这个方法每次调用返回新的skill id,确保实现上述逻辑 //TODO:..... } }