public void AssignInitialTraits(Game game, Character character, int maxInitialTraits)
        {
            ISet<string> banned = new HashSet<string>();
            for (int i = 0; i < maxInitialTraits; ++i)
            {
                Trait nextTrait = traits.Values.ElementAt(game.GetRandom(traits.Values.Count));
                if (banned.Contains(nextTrait.Identifier))
                {
                    continue;
                }

                foreach (var opposite in nextTrait.Opposites)
                {
                    banned.Add(opposite);
                }

                banned.Add(nextTrait.Identifier);
                character.AddTrait(nextTrait);
            }
        }
Beispiel #2
0
        public void Execute(EventResults result, Game game, EventContext context)
        {
            const int RandomPrecision = 1000000;

            int val = game.GetRandom(RandomPrecision);
            for(int i = 0; i < outcomes.Length; ++i)
            {
                int myCutoff = (int)(chances[i] * RandomPrecision);
                if (val < myCutoff)
                {
                    outcomes[i].Execute(result, game, context);
                    return;
                }

                val -= myCutoff;
            }
        }
Beispiel #3
0
 public DNA CreateRandomDNA(Character character, Game game)
 {
     DNA dna = new DNA(SelectRandomAllowed(faceImages, character, game),
         SelectRandomAllowed(mouthImages, character, game), SelectRandomAllowed(noseImages, character, game),
         SelectRandomAllowed(eyeImages, character, game), SelectRandomAllowed(eyebrowImages, character, game),
         SelectRandomAllowed(earImages, character, game), SelectRandomAllowed(hairImages, character, game),
         game.GetRandom(skinColors.Length), game.GetRandom(eyeColors.Length), game.GetRandom(hairColors.Length), game.GetRandom(shirtColors.Length));
     return dna;
 }
Beispiel #4
0
 public static int GetRandomShirtColor(Game g)
 {
     return g.GetRandom(shirtColors.Length);
 }
Beispiel #5
0
 private int SelectRandomAllowedColor(Color[] rules, Character character, int father, int mother, Game game)
 {
     return game.GetRandom(2) == 0 ? father : mother;
 }
Beispiel #6
0
        private int SelectRandomAllowed(List<PortraitRule> rules, Character character, int father, int mother, Game game)
        {
            EventContext context = new EventContext(character);

            List<PortraitRule> allowed = new List<PortraitRule>();
            if(rules[father].Requirements.Evaluate(context, game))
            {
                for (int i = 0; i < 45; ++i)
                {
                    allowed.Add(rules[father]);
                }
            }
            if (rules[mother].Requirements.Evaluate(context, game))
            {
                for (int i = 0; i < 45; ++i)
                {
                    allowed.Add(rules[mother]);
                }
            }
            allowed.AddRange(rules.Where(r => r.Requirements.Evaluate(context, game)));
            return allowed[game.GetRandom(allowed.Count)].Index;
        }
Beispiel #7
0
 private int SelectRandomAllowed(List<PortraitRule> rules, Character character, Game game)
 {
     EventContext context = new EventContext(character);
     PortraitRule[] allowed = rules.Where(r => r.Requirements.Evaluate(context, game)).ToArray();
     return allowed[game.GetRandom(allowed.Length)].Index;
 }