問題描述:算法
策劃想要設計一種怪物,它有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:..... } }