/// <summary> /// Judges "_that".<br/> /// Gets the "opinion" of character "this" towards character "_that". /// </summary> /// <param name="_that"></param> /// <returns></returns> public int Judgement(CCharacter _that, CCharacterTraitDictionary _dictionary) { List <CCharacterTrait> likeList = new List <CCharacterTrait>(); List <CCharacterTrait> hateList = new List <CCharacterTrait>(); foreach (CCharacterTrait trait in this.traits_) { likeList.AddRange(trait.Likes(_dictionary)); hateList.AddRange(trait.Hates(_dictionary)); } int evaluation = 0; foreach (CCharacterTrait trait in _that.traits_) { if (likeList.Contains(trait)) { evaluation++; } if (hateList.Contains(trait)) { evaluation--; } } return(evaluation); }
public CGame() { this.map_ = new CMap(); this.factions_ = new List <CFaction>(); this.cities_ = new List <CCity>(); this.characters_ = new List <CCharacter>(); this.traitDictionary_ = new CCharacterTraitDictionary(); }
/// <summary> /// Generates a character randomly. /// </summary> /// <param name="_dictionary"></param> public void RandomGeneration(CCharacterTraitDictionary _dictionary) { this.leaderShip_ = rand.Next(1, 21); this.combatSkill_ = rand.Next(1, 21); this.stratagem_ = rand.Next(1, 21); this.politics_ = rand.Next(1, 21); int origin = rand.Next(18); int gender = rand.Next(18, 30); int normal = _dictionary[gender] is CCharacterTraitMale?rand.Next(30, 36) : rand.Next(30, 35); this.traits_.Add(_dictionary[origin]); this.traits_.Add(_dictionary[gender]); this.traits_.Add(_dictionary[normal]); }
/// <summary> /// Evaluates "_that"<br/> /// Gets the evaluation of attributes of character "_that", based on the judgement value. /// </summary> /// <param name="_that"></param> /// <returns></returns> public List <int> Evaluate(CCharacter _that, CCharacterTraitDictionary _dictionary) { List <int> evals = new List <int>(); evals.Add(_that.leaderShip_); evals.Add(_that.combatSkill_); evals.Add(_that.stratagem_); evals.Add(_that.politics_); int judgement = this.Judgement(_that, _dictionary); int sign = Math.Sign(judgement); float error = (20 - this.stratagem_) / 50.0f; for (int i = 0; i < evals.Count; i++) { evals[i] += (int)(evals[i] * error + sign * judgement) * sign; if (evals[i] < 1) { evals[i] = 1; } } return(evals); }