Ejemplo n.º 1
0
        public static string Draw(IList <CardEntry> availableCards, string ai_level, bool pickRandom)
        {
            Random           r       = new Random((int)(DateTime.Now.Ticks & 0xFFFFFFFF));
            List <CardEntry> entries = availableCards.Where(p => { return(p.AILevel.Equals(ai_level)); }).ToList();
            CardEntry        e       = null;

            if (entries.Count > 0)
            {
                if (pickRandom)
                {
                    e = entries[r.Next(0, entries.Count)];
                }
                else
                {
                    e = entries[0];
                }
            }

            if (e == null)
            {
                return(string.Empty);
            }
            return(e.CardName);
        }
Ejemplo n.º 2
0
        private static string PickAIFromDeck(IList <CardEntry> availableCards, string[] monsterTemplate, string[] specialRules, string[] exclusions)
        {
            IList <string>   cardList            = new List <string>();
            List <CardEntry> positionalCardsList = new List <CardEntry>();
            Regex            r  = new Regex(@"\[([0-9])\](.+)");
            Regex            nm = new Regex(@"\{(B|A|L|S)\}");

            foreach (string exclusion in exclusions)
            {
                string    sanified = exclusion.TrimEnd('`');
                CardEntry e        = availableCards.Where(p => { return(p.CardName.StartsWith(sanified)); }).FirstOrDefault();
                if (e != null)
                {
                    availableCards.Remove(e);
                }
            }

            foreach (string s in monsterTemplate)
            {
                bool   faceUp   = false;
                string sanified = s.TrimEnd('`');
                if (sanified.StartsWith("~"))
                {
                    sanified = sanified.Substring(1);
                    faceUp   = true;
                }
                bool addAt = r.IsMatch(sanified);

                if (addAt)
                {
                    Match m = r.Match(sanified);
                    sanified = m.Groups[2].Value;
                    string cardName = sanified;


                    if (nm.IsMatch(sanified))
                    {
                        cardName = DataUtils.Draw(availableCards, nm.Match(sanified).Groups[1].Value, true);
                    }
                    else
                    {
                        cardName = sanified;
                    }

                    availableCards.Remove(availableCards.Where(p => { return(p.CardName.StartsWith(cardName)); }).FirstOrDefault());

                    CardEntry e = new CardEntry(CardType.AI.ToString(), cardName);
                    e.FixedPosition = int.Parse(m.Groups[1].Value);
                    e.FaceUp        = faceUp;

                    int pos = 0;
                    foreach (CardEntry x in positionalCardsList)
                    {
                        if (e.FixedPosition > x.FixedPosition)
                        {
                            pos++;
                        }
                        else
                        {
                            break;
                        }
                    }

                    positionalCardsList.Insert(pos, e);
                }
                else
                {
                    string cardName;

                    if (nm.IsMatch(sanified))
                    {
                        cardName = DataUtils.Draw(availableCards, nm.Match(sanified).Groups[1].Value, true);
                    }
                    else
                    {
                        cardName = sanified;
                    }

                    availableCards.Remove(availableCards.Where(p => { return(p.CardName.StartsWith(cardName)); }).FirstOrDefault());
                    cardList.Add($"{(faceUp ? "~" : "")}{cardName}");
                }
            }

            cardList = DataUtils.Shuffle(cardList);

            foreach (CardEntry e in positionalCardsList)
            {
                cardList.Insert(e.FixedPosition, $"{(e.FaceUp ? "~" : "")}{e.CardName}");
            }

            return(string.Join(",", cardList));
        }