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); }
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)); }